From 9c7982e8f6f56e6fc0ce76ee6cecfa74c210f42c Mon Sep 17 00:00:00 2001 From: arcox <10953229+arcox@users.noreply.github.com> Date: Thu, 9 Jul 2020 13:07:26 -0400 Subject: [PATCH] Update *.sh and *.java files to use Unix line endings --- .../util/CardViewCardTypeComparator.java | 44 +- .../mage/card/arcane/CardRendererUtils.java | 512 +++++----- .../mage/card/arcane/TextboxKeywordRule.java | 34 +- .../org/mage/card/arcane/TextboxRuleType.java | 56 +- .../src/main/java/mage/cards/CardBorder.java | 56 +- .../src/mage/deck/OldSchool9394CFB.java | 548 +++++----- .../src/mage/deck/OldSchool9394EC.java | 550 +++++----- .../src/mage/deck/OldSchool9394EG.java | 184 ++-- .../src/mage/deck/OldSchool9394Italian.java | 174 ++-- .../src/mage/deck/StarWarsBlock.java | 42 +- Mage.Sets/src/mage/cards/a/AetherTide.java | 152 +-- Mage.Sets/src/mage/cards/a/Aggression.java | 206 ++-- Mage.Sets/src/mage/cards/a/Antagonism.java | 128 +-- .../src/mage/cards/a/ArcheryTraining.java | 134 +-- .../src/mage/cards/a/AwesomePresence.java | 188 ++-- Mage.Sets/src/mage/cards/b/BarbedWire.java | 210 ++-- .../src/mage/cards/b/BenthicExplorers.java | 554 +++++------ .../src/mage/cards/b/BloodOperative.java | 194 ++-- Mage.Sets/src/mage/cards/b/BoneMask.java | 188 ++-- Mage.Sets/src/mage/cards/c/ChaosLord.java | 326 +++--- .../src/mage/cards/c/CloakOfConfusion.java | 372 +++---- Mage.Sets/src/mage/cards/c/Contempt.java | 186 ++-- Mage.Sets/src/mage/cards/c/Cunning.java | 178 ++-- Mage.Sets/src/mage/cards/d/DampingEngine.java | 414 ++++---- Mage.Sets/src/mage/cards/d/Disappear.java | 174 ++-- .../src/mage/cards/d/DiscordantDirge.java | 194 ++-- .../src/mage/cards/d/DiseasedVermin.java | 310 +++--- Mage.Sets/src/mage/cards/d/DizzyingGaze.java | 142 +-- Mage.Sets/src/mage/cards/d/DreadWight.java | 466 ++++----- .../mage/cards/e/EnchantmentAlteration.java | 288 +++--- Mage.Sets/src/mage/cards/e/ErrantMinion.java | 200 ++-- Mage.Sets/src/mage/cards/f/FatalLore.java | 182 ++-- Mage.Sets/src/mage/cards/f/Fatigue.java | 72 +- Mage.Sets/src/mage/cards/f/FendOff.java | 82 +- .../src/mage/cards/f/FreyaliseSupplicant.java | 122 +-- .../src/mage/cards/f/FreyalisesWinds.java | 184 ++-- .../src/mage/cards/g/GarbageElementalD.java | 160 +-- Mage.Sets/src/mage/cards/g/GazeOfPain.java | 376 +++---- Mage.Sets/src/mage/cards/g/Grollub.java | 140 +-- .../src/mage/cards/h/HiddenPredators.java | 248 ++--- Mage.Sets/src/mage/cards/h/HiddenRetreat.java | 152 +-- Mage.Sets/src/mage/cards/h/HiddenStag.java | 146 +-- .../src/mage/cards/i/IllusionaryPresence.java | 222 ++--- .../src/mage/cards/i/IllusionaryTerrain.java | 394 ++++---- Mage.Sets/src/mage/cards/i/Incendiary.java | 130 +-- .../src/mage/cards/k/KeeperOfTheFlame.java | 158 +-- .../src/mage/cards/k/KeeperOfTheMind.java | 252 ++--- Mage.Sets/src/mage/cards/k/KithkinArmor.java | 348 +++---- .../src/mage/cards/k/KrovikanVampire.java | 480 ++++----- .../src/mage/cards/k/KrrikSonOfYawgmoth.java | 204 ++-- Mage.Sets/src/mage/cards/l/LimDulsCohort.java | 90 +- .../src/mage/cards/l/LimitedResources.java | 248 ++--- .../src/mage/cards/l/LurkingJackals.java | 252 ++--- Mage.Sets/src/mage/cards/l/LurkingSkirge.java | 140 +-- Mage.Sets/src/mage/cards/m/MercadianLift.java | 202 ++-- .../src/mage/cards/m/MetathranElite.java | 94 +- Mage.Sets/src/mage/cards/m/MindWhip.java | 198 ++-- Mage.Sets/src/mage/cards/m/Misfortune.java | 176 ++-- Mage.Sets/src/mage/cards/m/MoggBombers.java | 120 +-- .../src/mage/cards/m/MonstrousHound.java | 276 +++--- Mage.Sets/src/mage/cards/m/Musician.java | 160 +-- Mage.Sets/src/mage/cards/n/NullChamber.java | 318 +++--- Mage.Sets/src/mage/cards/o/OathOfLimDul.java | 286 +++--- Mage.Sets/src/mage/cards/o/OpalAcrolith.java | 152 +-- Mage.Sets/src/mage/cards/o/OpalAvenger.java | 244 ++--- Mage.Sets/src/mage/cards/o/OpalTitan.java | 282 +++--- Mage.Sets/src/mage/cards/o/Outmaneuver.java | 192 ++-- Mage.Sets/src/mage/cards/p/PeaceTalks.java | 352 +++---- .../src/mage/cards/p/PhantasmalMount.java | 312 +++--- .../src/mage/cards/p/PhantasmalSphere.java | 242 ++--- Mage.Sets/src/mage/cards/p/PowerTaint.java | 122 +-- .../src/mage/cards/p/PrivateResearch.java | 120 +-- Mage.Sets/src/mage/cards/r/Ransack.java | 174 ++-- Mage.Sets/src/mage/cards/r/Rebound.java | 154 +-- Mage.Sets/src/mage/cards/r/RetracedImage.java | 162 +-- .../src/mage/cards/r/RogueSkycaptain.java | 202 ++-- Mage.Sets/src/mage/cards/r/RunicArmasaur.java | 164 +-- .../src/mage/cards/s/SamiteBlessing.java | 116 +-- Mage.Sets/src/mage/cards/s/Seraph.java | 280 +++--- Mage.Sets/src/mage/cards/s/SerrasHymn.java | 110 +- .../src/mage/cards/s/ShelteringPrayers.java | 196 ++-- .../src/mage/cards/s/SkeletonScavengers.java | 260 ++--- Mage.Sets/src/mage/cards/s/SnowDevil.java | 194 ++-- Mage.Sets/src/mage/cards/s/SoulSculptor.java | 298 +++--- Mage.Sets/src/mage/cards/s/Soulshriek.java | 164 +-- Mage.Sets/src/mage/cards/s/SpinyStarfish.java | 282 +++--- Mage.Sets/src/mage/cards/s/StenchOfEvil.java | 160 +-- Mage.Sets/src/mage/cards/u/UnmooredEgo.java | 248 ++--- Mage.Sets/src/mage/cards/u/UrborgPanther.java | 162 +-- Mage.Sets/src/mage/cards/v/VeilOfBirds.java | 132 +-- .../src/mage/cards/v/VeiledApparition.java | 146 +-- .../src/mage/cards/v/VeiledCrocodile.java | 252 ++--- Mage.Sets/src/mage/cards/v/VeiledSentry.java | 230 ++--- Mage.Sets/src/mage/cards/v/VeiledSerpent.java | 150 +-- Mage.Sets/src/mage/cards/v/VenomousFangs.java | 96 +- Mage.Sets/src/mage/cards/v/ViashinoBey.java | 186 ++-- Mage.Sets/src/mage/cards/w/WalkingDream.java | 118 +-- Mage.Sets/src/mage/cards/w/Wiitigo.java | 246 ++--- Mage.Sets/src/mage/sets/Alliances.java | 440 ++++---- Mage.Sets/src/mage/sets/Chronicles.java | 308 +++--- Mage.Sets/src/mage/sets/Exodus.java | 350 +++---- Mage.Sets/src/mage/sets/FifthEdition.java | 936 +++++++++--------- Mage.Sets/src/mage/sets/Legends.java | 658 ++++++------ Mage.Sets/src/mage/sets/MastersEdition.java | 444 ++++----- Mage.Sets/src/mage/sets/MastersEditionII.java | 530 +++++----- .../src/mage/sets/MastersEditionIII.java | 502 +++++----- Mage.Sets/src/mage/sets/MastersEditionIV.java | 638 ++++++------ Mage.Sets/src/mage/sets/MercadianMasques.java | 734 +++++++------- Mage.Sets/src/mage/sets/Mirage.java | 696 ++++++------- Mage.Sets/src/mage/sets/Prophecy.java | 350 +++---- Mage.Sets/src/mage/sets/Starter1999.java | 402 ++++---- Mage.Sets/src/mage/sets/Stronghold.java | 348 +++---- Mage.Sets/src/mage/sets/Tempest.java | 738 +++++++------- Mage.Sets/src/mage/sets/Torment.java | 338 +++---- Mage.Sets/src/mage/sets/UrzasDestiny.java | 350 +++---- Mage.Sets/src/mage/sets/UrzasLegacy.java | 350 +++---- Mage.Sets/src/mage/sets/UrzasSaga.java | 758 +++++++------- Mage.Sets/src/mage/sets/Visions.java | 384 +++---- Mage.Sets/src/mage/sets/Weatherlight.java | 394 ++++---- .../abilities/keywords/AftermathTest.java | 62 +- .../cards/abilities/keywords/CrewTest.java | 164 +-- .../abilities/keywords/DeliriumTest.java | 334 +++---- .../cards/abilities/keywords/EmergeTest.java | 80 +- .../abilities/keywords/EscalateTest.java | 268 ++--- .../cards/abilities/keywords/MeldTest.java | 366 +++---- .../abilities/keywords/ScavengeTest.java | 244 ++--- .../cards/abilities/keywords/TributeTest.java | 96 +- .../oneshot/ConditionalOneShotEffectTest.java | 156 +-- .../oneshot/damage/IzzetStaticasterTest.java | 80 +- .../oneshot/damage/RuneflareTrapTest.java | 76 +- .../oneshot/damage/SoulBurnTest.java | 358 +++---- .../oneshot/library/PutToLibraryTest.java | 152 +-- .../optional/IdentityThiefTests.java | 78 +- .../abilities/other/AuratouchedMageTest.java | 180 ++-- .../cards/asthough/CastFromLibraryTest.java | 138 +-- .../continuous/EightAndAHalfTailsTest.java | 164 +-- .../cards/continuous/ErsatzGnomesTest.java | 272 ++--- .../test/cards/continuous/LayerTests.java | 392 ++++---- .../cards/control/BronzeBombshellTest.java | 88 +- .../GainControlOfOwnedCreaturesTest.java | 230 ++--- .../control/GontiLordOfLuxuryEffectTest.java | 404 ++++---- .../cards/control/VengefulPharaohTest.java | 96 +- .../cost/modification/FluctuatorTest.java | 190 ++-- .../enchantments/AuraTargetRemovedTest.java | 120 +-- .../test/cards/mana/RiverOfTearsTest.java | 122 +-- .../mage/test/cards/modal/ChooseOneTest.java | 158 +-- .../mage/test/cards/modal/OneOrMoreTest.java | 200 ++-- .../cards/modal/SameModeMoreThanOnceTest.java | 146 +-- .../planeswalker/NissaVastwoodSeerTest.java | 160 +-- .../test/cards/planeswalker/RalZarekTest.java | 84 +- .../test/cards/planeswalker/VivienTest.java | 298 +++--- .../cards/replacement/DamageEffectsTest.java | 236 ++--- .../cards/replacement/ManaReflectionTest.java | 114 +-- .../cards/replacement/PanharmoniconTest.java | 206 ++-- .../cards/replacement/ScorchingLavaTest.java | 74 +- .../EntersTheBattlefieldTappedTest.java | 132 +-- .../entersBattlefield/HardenedScaleTest.java | 232 ++--- .../UnbreathingHordeTest.java | 78 +- .../redirect/PalisadeGiantTest.java | 120 +-- .../CantUseActivatedAbilitiesTest.java | 114 +-- .../mage/test/cards/rules/CantDrawTest.java | 122 +-- .../cards/rules/MeliraSylvokOutcastTest.java | 94 +- .../test/cards/single/CullingScalesTest.java | 134 +-- .../cards/single/InfernalCaretakerTest.java | 112 +-- .../cards/single/JacesMindseekerTest.java | 106 +- .../cards/targets/TargetRestrictionsTest.java | 176 ++-- .../mage/test/cards/text/WrennAndSixTest.java | 34 +- .../triggers/BaralChiefOfComplianceTest.java | 120 +-- .../cards/triggers/DivineVisitationTest.java | 160 +-- .../cards/triggers/MasterOfCrueltiesTest.java | 108 +- .../triggers/delayed/GlimpseOfNatureTest.java | 98 +- .../cards/triggers/dies/BloodCultistTest.java | 280 +++--- .../dies/SupernaturalStaminaTest.java | 96 +- .../combat/CanBlockMultipleCreaturesTest.java | 398 ++++---- .../duel/MairsilThePretenderTest.java | 410 ++++---- .../game/ends/PhageTheUntouchableTest.java | 114 +-- .../mage/test/multiplayer/PlayerWinsTest.java | 320 +++--- .../BasicSaheekiSublimeArtificerTest.java | 136 +-- .../mage/test/rollback/DemonicPactTest.java | 254 ++--- .../rollback/NewCreaturesAreRemovedTest.java | 216 ++-- .../org/mage/test/rollback/TransformTest.java | 146 +-- .../base/CardTestOathbreaker3PlayersFFA.java | 74 +- .../java/mage/abilities/ActivationInfo.java | 124 +-- .../BecomesMonstrousTriggeredAbility.java | 110 +- ...veMoreThanAmountCountersSourceAbility.java | 208 ++-- .../ControllerPlaysLandTriggeredAbility.java | 98 +- ...sDamageToACreatureAllTriggeredAbility.java | 208 ++-- .../DiscardedByOpponentTriggeredAbility.java | 108 +- .../LeavesBattlefieldAllTriggeredAbility.java | 176 ++-- .../OpponentPlaysLandTriggeredAbility.java | 96 +- .../mage/abilities/condition/OrCondition.java | 76 +- .../AttackedThisTurnSourceCondition.java | 48 +- .../common/CitysBlessingCondition.java | 52 +- .../common/CreatureCountCondition.java | 176 ++-- .../condition/common/HateCondition.java | 58 +- .../common/LiveLostLastTurnCondition.java | 56 +- .../common/SourceRemainsInZoneCondition.java | 80 +- .../common/TargetHasCounterCondition.java | 144 +-- .../costs/common/CyclingDiscardCost.java | 126 +-- .../costs/common/ExertSourceCost.java | 108 +- .../PutCardFromHandOnTopOfLibraryCost.java | 120 +-- .../dynamicvalue/LockedInDynamicValue.java | 102 +- .../dynamicvalue/common/CountersCount.java | 116 +-- ...estPowerAmongControlledCreaturesValue.java | 88 +- ...oughnessAmongControlledCreaturesValue.java | 86 +- .../PreventDamageAndRemoveCountersEffect.java | 132 +-- .../CantBeTargetedCardsGraveyardsEffect.java | 112 +-- ...DiscardCardControllerTriggeredAbility.java | 104 +- .../DiscardCardPlayerTriggeredAbility.java | 100 +- .../common/ExchangeLifeTargetEffect.java | 130 +-- .../effects/common/ExileAttachedEffect.java | 94 +- .../common/ExileTargetIfDiesEffect.java | 82 +- .../common/ExileUntilSourceLeavesEffect.java | 94 +- .../effects/common/FlipCoinEffect.java | 184 ++-- .../common/LoseHalfLifeTargetEffect.java | 84 +- .../ReturnCreaturesFromExileEffect.java | 92 +- .../RevealCardsFromLibraryUntilEffect.java | 298 +++--- .../common/SetPlayerLifeTargetEffect.java | 108 +- .../ShuffleIntoLibraryTargetEffect.java | 124 +-- .../effects/common/SkipCombatStepEffect.java | 110 +- .../common/SkipNextDrawStepTargetEffect.java | 108 +- .../abilities/effects/common/WishEffect.java | 240 ++--- ...chedWithActivatedAbilityOrSpellEffect.java | 330 +++--- .../BecomesEnchantmentSourceEffect.java | 158 +-- .../GainAbilityAllOfChosenSubtypeEffect.java | 102 +- .../GainAbilityControlledSpellsEffect.java | 166 ++-- .../SetPowerToughnessEnchantedEffect.java | 114 +-- ...bilitiesCostReductionControllerEffect.java | 100 +- .../counter/MoveCountersTargetsEffect.java | 156 +-- .../EnterAttributeAddChosenSubtypeEffect.java | 92 +- .../CreateTwiceThatManyTokensEffect.java | 94 +- .../replacement/DiesReplacementEffect.java | 144 +-- ...raryGraveyardPutOntoBattlefieldEffect.java | 184 ++-- ...ibraryGraveyardWithLessCMCPutIntoPlay.java | 174 ++-- ...archLibraryWithLessCMCPutInPlayEffect.java | 130 +-- .../effects/keyword/ExploreTargetEffect.java | 76 +- ...itionalManaOfTwoDifferentColorsEffect.java | 122 +-- .../AddManaOfTwoDifferentColorsEffect.java | 92 +- .../mage/abilities/keyword/BountyAbility.java | 108 +- .../keyword/CanBlockSpaceflightAbility.java | 86 +- .../mage/abilities/keyword/EmbalmAbility.java | 204 ++-- .../abilities/keyword/EscalateAbility.java | 144 +-- .../abilities/keyword/FabricateAbility.java | 158 +-- .../abilities/keyword/MeditateAbility.java | 160 +-- .../mage/abilities/keyword/MeleeAbility.java | 208 ++-- .../mage/abilities/keyword/RepairAbility.java | 296 +++--- .../abilities/keyword/SpaceflightAbility.java | 156 +-- ...nalAddManaOfTwoDifferentColorsAbility.java | 74 +- .../main/java/mage/choices/ManaChoice.java | 108 +- .../java/mage/constants/EnterEventType.java | 24 +- .../FilterOpponentsCreaturePermanent.java | 80 +- .../common/FilterTeamCreaturePermanent.java | 80 +- .../filter/common/FilterTeamPermanent.java | 82 +- .../AuraCardCanAttachToLKIPermanentId.java | 82 +- .../other/TargetsOnlyOnePlayerPredicate.java | 96 +- .../other/TargetsPlayerPredicate.java | 96 +- .../permanent/AnotherEnchantedPredicate.java | 60 +- .../main/java/mage/game/events/CostEvent.java | 56 +- .../game/events/NumberOfTriggersEvent.java | 48 +- .../game/permanent/token/StarfishToken.java | 66 +- .../TargetCardInGraveyardOrBattlefield.java | 226 ++--- ...TargetCreaturePermanentSameController.java | 100 +- ...etCreaturePermanentWithDifferentTypes.java | 100 +- .../TargetOpponentsCreaturePermanent.java | 90 +- .../targetpointer/ThirdTargetPointer.java | 196 ++-- .../main/java/mage/watchers/WatcherUtils.java | 40 +- ...CardsCycledOrDiscardedThisTurnWatcher.java | 144 +-- .../CreatureAttackedWhichPlayerWatcher.java | 94 +- .../LifeLossOtherFromCombatWatcher.java | 100 +- ...rOfTimesPermanentTargetedATurnWatcher.java | 106 +- .../mage/watchers/common/PlayLandWatcher.java | 104 +- .../mage/watchers/common/RevoltWatcher.java | 98 +- Utils/release/startMage.sh | 10 +- 273 files changed, 26704 insertions(+), 26704 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/util/CardViewCardTypeComparator.java b/Mage.Client/src/main/java/mage/client/util/CardViewCardTypeComparator.java index ccec9247657..70b7bc1ae37 100644 --- a/Mage.Client/src/main/java/mage/client/util/CardViewCardTypeComparator.java +++ b/Mage.Client/src/main/java/mage/client/util/CardViewCardTypeComparator.java @@ -1,22 +1,22 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.client.util; - -import java.util.Comparator; -import mage.view.CardView; - -/** - * - * @author LevelX2 - */ -public class CardViewCardTypeComparator implements Comparator { - - @Override - public int compare(CardView o1, CardView o2) { - return o1.getCardTypes().toString().compareTo(o2.getCardTypes().toString()); - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.client.util; + +import java.util.Comparator; +import mage.view.CardView; + +/** + * + * @author LevelX2 + */ +public class CardViewCardTypeComparator implements Comparator { + + @Override + public int compare(CardView o1, CardView o2) { + return o1.getCardTypes().toString().compareTo(o2.getCardTypes().toString()); + } + +} diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/CardRendererUtils.java b/Mage.Client/src/main/java/org/mage/card/arcane/CardRendererUtils.java index 42caffce72b..632f9be42f9 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/CardRendererUtils.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/CardRendererUtils.java @@ -1,256 +1,256 @@ -package org.mage.card.arcane; - -import mage.MageInt; -import mage.view.CardView; -import mage.view.PermanentView; - -import java.awt.*; -import java.awt.image.BufferedImage; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.StringTokenizer; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * @author stravant@gmail.com, JayDi85 - *

- * Various static utilities for use in the card renderer - */ -public final class CardRendererUtils { - - // text colors for PT (mtgo and image render modes) - private static final Color CARD_TEXT_COLOR_GOOD_LIGHT = new Color(182, 235, 168); - private static final Color CARD_TEXT_COLOR_GOOD_DARK = new Color(52, 135, 88); - private static final Color CARD_TEXT_COLOR_BAD_LIGHT = new Color(234, 153, 153); - private static final Color CARD_TEXT_COLOR_BAD_DARK = new Color(200, 33, 33); - - /** - * Convert an abstract image, whose underlying implementation may or may not - * be a BufferedImage into a BufferedImage by creating one and coping the - * contents if it is not, and simply up-casting if it is. - * - * @param img The image to convert - * @return The converted image - */ - public static BufferedImage toBufferedImage(Image img) { - // Null? No conversion to do - if (img == null) { - return null; - } - - // Already a buffered image? - if (img instanceof BufferedImage) { - return (BufferedImage) img; - } - - // Create a buffered image with transparency - BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB); - - // Draw the image on to the buffered image - Graphics2D bGr = bimage.createGraphics(); - bGr.drawImage(img, 0, 0, null); - bGr.dispose(); - - // Return the buffered image - return bimage; - } - - public static Color abitbrighter(Color c) { - int r = c.getRed(); - int g = c.getGreen(); - int b = c.getBlue(); - int alpha = c.getAlpha(); - - int plus_r = (255 - r) / 2; - int plus_g = (255 - g) / 2; - int plus_b = (255 - b) / 2; - - return new Color(r + plus_r, - g + plus_g, - b + plus_b, - alpha); - } - - public static Color abitdarker(Color c) { - int r = c.getRed(); - int g = c.getGreen(); - int b = c.getBlue(); - int alpha = c.getAlpha(); - - int plus_r = Math.min(255 - r, r) / 2; - int plus_g = Math.min(255 - g, g) / 2; - int plus_b = Math.min(255 - b, b) / 2; - - return new Color(r - plus_r, - g - plus_g, - b - plus_b, - alpha); - } - - // Draw a rounded box with a 2-pixel border - // Used on various card parts. - public static void drawRoundedBox(Graphics2D g, int x, int y, int w, int h, int bevel, Paint border, Paint fill) { - g.setColor(new Color(0, 0, 0, 150)); - g.drawOval(x - 1, y - 1, bevel * 2, h); - g.setPaint(border); - g.drawOval(x, y, bevel * 2 - 1, h - 1); - g.drawOval(x + w - bevel * 2, y, bevel * 2 - 1, h - 1); - g.drawOval(x + 1, y + 1, bevel * 2 - 3, h - 3); - g.drawOval(x + 1 + w - bevel * 2, y + 1, bevel * 2 - 3, h - 3); - g.drawRect(x + bevel, y, w - 2 * bevel, h - 1); - g.drawRect(x + 1 + bevel, y + 1, w - 2 * bevel - 2, h - 3); - g.setPaint(fill); - g.fillOval(x + 2, y + 2, bevel * 2 - 4, h - 4); - g.fillOval(x + 2 + w - bevel * 2, y + 2, bevel * 2 - 4, h - 4); - g.fillRect(x + bevel, y + 2, w - 2 * bevel, h - 4); - g.setPaint(fill); - g.setColor(abitbrighter(g.getColor())); - g.drawLine(x + 1 + bevel, y + 1, x + 1 + bevel + w - 2 * bevel - 2, y + 1); - g.setPaint(fill); - g.setColor(abitdarker(g.getColor())); - g.drawLine(x + 1 + bevel, y + h - 2, x + 1 + bevel + w - 2 * bevel - 2, y + h - 2); - } - - public static void drawZendikarLandBox(Graphics2D g, int x, int y, int w, int h, int bevel, Paint border, Paint fill) { - g.setColor(new Color(0, 0, 0, 150)); - - g.drawOval(x - 1, y, bevel * 2, h); - g.setPaint(border); - g.drawOval(x, y, bevel * 2 - 1, h - 1); - g.drawOval(x + w - bevel * 2, y, bevel * 2 - 1, h - 1); - g.drawOval(x + 1, y + 1, bevel * 2 - 3, h - 3); - g.drawOval(x + 1 + w - bevel * 2, y + 1, bevel * 2 - 3, h - 3); - - // The big circle in the middle.. (diameter=2+1/4 of height) - 3/4 above line, 1/2 below 0.75 + .5 + 1= 2.25 = 9/4 - g.drawOval(x + w / 2 - h - h / 8, y - 3 * h / 4, 9 * h / 4, 9 * h / 4); - - g.drawRect(x + bevel, y, w - 2 * bevel, h - 1); - g.drawRect(x + 1 + bevel, y + 1, w - 2 * bevel - 2, h - 3); - g.setPaint(fill); - g.setColor(abitbrighter(g.getColor())); - g.drawLine(x + 1 + bevel, y + 1, x + 1 + bevel + w - 2 * bevel - 2, y + 1); - g.setPaint(fill); - g.setColor(abitdarker(g.getColor())); - g.drawLine(x + 1 + bevel, y + h - 2, x + 1 + bevel + w - 2 * bevel - 2, y + h - 2); - - g.fillOval(x + 2, y + 2, bevel * 2 - 4, h - 4); - g.fillOval(x + 2 + w - bevel * 2, y + 2, bevel * 2 - 4, h - 4); - g.fillRect(x + bevel, y + 2, w - 2 * bevel, h - 4); - - g.fillOval(x + w / 2 - h - h / 8, y - 3 * h / 4, 9 * h / 4, 9 * h / 4); - } - - // Get the width of a mana cost rendered with ManaSymbols.draw - public static int getManaCostWidth(String manaCost, int symbolSize) { - int width = 0; - manaCost = manaCost.replace("\\", ""); - StringTokenizer tok = new StringTokenizer(manaCost, " "); - while (tok.hasMoreTokens()) { - tok.nextToken(); - width += symbolSize; - } - return width; - } - - // Abbreviate a piece of rules text, making substitutions to decrease its - // length. Also abbreviate reminder text. - private static final Pattern abbreviationPattern; - private static final Map abbreviations = new HashMap<>(); - private static final Pattern killReminderTextPattern; - - static { - // Available abbreviations - abbreviations.put("enters the battlefield", "ETB"); - abbreviations.put("less than", "<"); - abbreviations.put("greater than", ">"); - - // Compile into regex - String patternString = "("; - Iterator it = abbreviations.keySet().iterator(); - while (it.hasNext()) { - patternString += it.next(); - if (it.hasNext()) { - patternString += "|"; - } - } - patternString += ")"; - abbreviationPattern = Pattern.compile(patternString); - - // Reminder text killing - killReminderTextPattern = Pattern.compile("\\([^\\)]*\\)"); - } - - public static String abbreviateRule(String rule) { - StringBuffer build = new StringBuffer(); - Matcher match = abbreviationPattern.matcher(rule); - while (match.find()) { - match.appendReplacement(build, abbreviations.get(match.group(1))); - } - match.appendTail(build); - return build.toString(); - } - - public static String killReminderText(String rule) { - return killReminderTextPattern.matcher(rule).replaceAll("") - .replaceAll("", "") - .replaceAll("", ""); - } - - public static Color copyColor(Color color) { - if (color != null) { - return new Color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()); - } else { - return null; - } - } - - public static String getCardLifeWithDamage(CardView cardView) { - // life with damage - String originLife = cardView.getToughness(); - if (cardView instanceof PermanentView) { - int damage = ((PermanentView) cardView).getDamage(); - int life; - try { - life = Integer.parseInt(originLife); - originLife = String.valueOf(Math.max(0, life - damage)); - } catch (NumberFormatException e) { - // - } - } - return originLife; - } - - public static boolean isCardWithDamage(CardView cardView) { - boolean haveDamage = false; - if (cardView instanceof PermanentView) { - haveDamage = ((PermanentView) cardView).getDamage() > 0; - } - return haveDamage; - } - - public static Color getCardTextColor(MageInt value, boolean drawAsDamaged, Color defaultColor, boolean textLight) { - if (drawAsDamaged) { - return textLight ? CARD_TEXT_COLOR_BAD_LIGHT : CARD_TEXT_COLOR_BAD_DARK; - } - - // boost colorizing - if (value != null) { - int current = value.getValue(); - int origin = value.getBaseValue(); - if (origin != 0) { - if (current < origin) { - return textLight ? CARD_TEXT_COLOR_BAD_LIGHT : CARD_TEXT_COLOR_BAD_DARK; - } else if (current > origin) { - return textLight ? CARD_TEXT_COLOR_GOOD_LIGHT : CARD_TEXT_COLOR_GOOD_DARK; - } else { - return defaultColor; - } - } - } - - return defaultColor; - } - -} +package org.mage.card.arcane; + +import mage.MageInt; +import mage.view.CardView; +import mage.view.PermanentView; + +import java.awt.*; +import java.awt.image.BufferedImage; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.StringTokenizer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * @author stravant@gmail.com, JayDi85 + *

+ * Various static utilities for use in the card renderer + */ +public final class CardRendererUtils { + + // text colors for PT (mtgo and image render modes) + private static final Color CARD_TEXT_COLOR_GOOD_LIGHT = new Color(182, 235, 168); + private static final Color CARD_TEXT_COLOR_GOOD_DARK = new Color(52, 135, 88); + private static final Color CARD_TEXT_COLOR_BAD_LIGHT = new Color(234, 153, 153); + private static final Color CARD_TEXT_COLOR_BAD_DARK = new Color(200, 33, 33); + + /** + * Convert an abstract image, whose underlying implementation may or may not + * be a BufferedImage into a BufferedImage by creating one and coping the + * contents if it is not, and simply up-casting if it is. + * + * @param img The image to convert + * @return The converted image + */ + public static BufferedImage toBufferedImage(Image img) { + // Null? No conversion to do + if (img == null) { + return null; + } + + // Already a buffered image? + if (img instanceof BufferedImage) { + return (BufferedImage) img; + } + + // Create a buffered image with transparency + BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB); + + // Draw the image on to the buffered image + Graphics2D bGr = bimage.createGraphics(); + bGr.drawImage(img, 0, 0, null); + bGr.dispose(); + + // Return the buffered image + return bimage; + } + + public static Color abitbrighter(Color c) { + int r = c.getRed(); + int g = c.getGreen(); + int b = c.getBlue(); + int alpha = c.getAlpha(); + + int plus_r = (255 - r) / 2; + int plus_g = (255 - g) / 2; + int plus_b = (255 - b) / 2; + + return new Color(r + plus_r, + g + plus_g, + b + plus_b, + alpha); + } + + public static Color abitdarker(Color c) { + int r = c.getRed(); + int g = c.getGreen(); + int b = c.getBlue(); + int alpha = c.getAlpha(); + + int plus_r = Math.min(255 - r, r) / 2; + int plus_g = Math.min(255 - g, g) / 2; + int plus_b = Math.min(255 - b, b) / 2; + + return new Color(r - plus_r, + g - plus_g, + b - plus_b, + alpha); + } + + // Draw a rounded box with a 2-pixel border + // Used on various card parts. + public static void drawRoundedBox(Graphics2D g, int x, int y, int w, int h, int bevel, Paint border, Paint fill) { + g.setColor(new Color(0, 0, 0, 150)); + g.drawOval(x - 1, y - 1, bevel * 2, h); + g.setPaint(border); + g.drawOval(x, y, bevel * 2 - 1, h - 1); + g.drawOval(x + w - bevel * 2, y, bevel * 2 - 1, h - 1); + g.drawOval(x + 1, y + 1, bevel * 2 - 3, h - 3); + g.drawOval(x + 1 + w - bevel * 2, y + 1, bevel * 2 - 3, h - 3); + g.drawRect(x + bevel, y, w - 2 * bevel, h - 1); + g.drawRect(x + 1 + bevel, y + 1, w - 2 * bevel - 2, h - 3); + g.setPaint(fill); + g.fillOval(x + 2, y + 2, bevel * 2 - 4, h - 4); + g.fillOval(x + 2 + w - bevel * 2, y + 2, bevel * 2 - 4, h - 4); + g.fillRect(x + bevel, y + 2, w - 2 * bevel, h - 4); + g.setPaint(fill); + g.setColor(abitbrighter(g.getColor())); + g.drawLine(x + 1 + bevel, y + 1, x + 1 + bevel + w - 2 * bevel - 2, y + 1); + g.setPaint(fill); + g.setColor(abitdarker(g.getColor())); + g.drawLine(x + 1 + bevel, y + h - 2, x + 1 + bevel + w - 2 * bevel - 2, y + h - 2); + } + + public static void drawZendikarLandBox(Graphics2D g, int x, int y, int w, int h, int bevel, Paint border, Paint fill) { + g.setColor(new Color(0, 0, 0, 150)); + + g.drawOval(x - 1, y, bevel * 2, h); + g.setPaint(border); + g.drawOval(x, y, bevel * 2 - 1, h - 1); + g.drawOval(x + w - bevel * 2, y, bevel * 2 - 1, h - 1); + g.drawOval(x + 1, y + 1, bevel * 2 - 3, h - 3); + g.drawOval(x + 1 + w - bevel * 2, y + 1, bevel * 2 - 3, h - 3); + + // The big circle in the middle.. (diameter=2+1/4 of height) - 3/4 above line, 1/2 below 0.75 + .5 + 1= 2.25 = 9/4 + g.drawOval(x + w / 2 - h - h / 8, y - 3 * h / 4, 9 * h / 4, 9 * h / 4); + + g.drawRect(x + bevel, y, w - 2 * bevel, h - 1); + g.drawRect(x + 1 + bevel, y + 1, w - 2 * bevel - 2, h - 3); + g.setPaint(fill); + g.setColor(abitbrighter(g.getColor())); + g.drawLine(x + 1 + bevel, y + 1, x + 1 + bevel + w - 2 * bevel - 2, y + 1); + g.setPaint(fill); + g.setColor(abitdarker(g.getColor())); + g.drawLine(x + 1 + bevel, y + h - 2, x + 1 + bevel + w - 2 * bevel - 2, y + h - 2); + + g.fillOval(x + 2, y + 2, bevel * 2 - 4, h - 4); + g.fillOval(x + 2 + w - bevel * 2, y + 2, bevel * 2 - 4, h - 4); + g.fillRect(x + bevel, y + 2, w - 2 * bevel, h - 4); + + g.fillOval(x + w / 2 - h - h / 8, y - 3 * h / 4, 9 * h / 4, 9 * h / 4); + } + + // Get the width of a mana cost rendered with ManaSymbols.draw + public static int getManaCostWidth(String manaCost, int symbolSize) { + int width = 0; + manaCost = manaCost.replace("\\", ""); + StringTokenizer tok = new StringTokenizer(manaCost, " "); + while (tok.hasMoreTokens()) { + tok.nextToken(); + width += symbolSize; + } + return width; + } + + // Abbreviate a piece of rules text, making substitutions to decrease its + // length. Also abbreviate reminder text. + private static final Pattern abbreviationPattern; + private static final Map abbreviations = new HashMap<>(); + private static final Pattern killReminderTextPattern; + + static { + // Available abbreviations + abbreviations.put("enters the battlefield", "ETB"); + abbreviations.put("less than", "<"); + abbreviations.put("greater than", ">"); + + // Compile into regex + String patternString = "("; + Iterator it = abbreviations.keySet().iterator(); + while (it.hasNext()) { + patternString += it.next(); + if (it.hasNext()) { + patternString += "|"; + } + } + patternString += ")"; + abbreviationPattern = Pattern.compile(patternString); + + // Reminder text killing + killReminderTextPattern = Pattern.compile("\\([^\\)]*\\)"); + } + + public static String abbreviateRule(String rule) { + StringBuffer build = new StringBuffer(); + Matcher match = abbreviationPattern.matcher(rule); + while (match.find()) { + match.appendReplacement(build, abbreviations.get(match.group(1))); + } + match.appendTail(build); + return build.toString(); + } + + public static String killReminderText(String rule) { + return killReminderTextPattern.matcher(rule).replaceAll("") + .replaceAll("", "") + .replaceAll("", ""); + } + + public static Color copyColor(Color color) { + if (color != null) { + return new Color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()); + } else { + return null; + } + } + + public static String getCardLifeWithDamage(CardView cardView) { + // life with damage + String originLife = cardView.getToughness(); + if (cardView instanceof PermanentView) { + int damage = ((PermanentView) cardView).getDamage(); + int life; + try { + life = Integer.parseInt(originLife); + originLife = String.valueOf(Math.max(0, life - damage)); + } catch (NumberFormatException e) { + // + } + } + return originLife; + } + + public static boolean isCardWithDamage(CardView cardView) { + boolean haveDamage = false; + if (cardView instanceof PermanentView) { + haveDamage = ((PermanentView) cardView).getDamage() > 0; + } + return haveDamage; + } + + public static Color getCardTextColor(MageInt value, boolean drawAsDamaged, Color defaultColor, boolean textLight) { + if (drawAsDamaged) { + return textLight ? CARD_TEXT_COLOR_BAD_LIGHT : CARD_TEXT_COLOR_BAD_DARK; + } + + // boost colorizing + if (value != null) { + int current = value.getValue(); + int origin = value.getBaseValue(); + if (origin != 0) { + if (current < origin) { + return textLight ? CARD_TEXT_COLOR_BAD_LIGHT : CARD_TEXT_COLOR_BAD_DARK; + } else if (current > origin) { + return textLight ? CARD_TEXT_COLOR_GOOD_LIGHT : CARD_TEXT_COLOR_GOOD_DARK; + } else { + return defaultColor; + } + } + } + + return defaultColor; + } + +} diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/TextboxKeywordRule.java b/Mage.Client/src/main/java/org/mage/card/arcane/TextboxKeywordRule.java index 50e15b04aac..30ce82323ae 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/TextboxKeywordRule.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/TextboxKeywordRule.java @@ -1,17 +1,17 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.card.arcane; - -import java.util.List; - -/** - * @author stravant@gmail.com - */ -public class TextboxKeywordRule extends TextboxRule { - public TextboxKeywordRule(String text, List regions) { - super(text, regions, TextboxRuleType.SIMPLE_KEYWORD); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.card.arcane; + +import java.util.List; + +/** + * @author stravant@gmail.com + */ +public class TextboxKeywordRule extends TextboxRule { + public TextboxKeywordRule(String text, List regions) { + super(text, regions, TextboxRuleType.SIMPLE_KEYWORD); + } +} diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/TextboxRuleType.java b/Mage.Client/src/main/java/org/mage/card/arcane/TextboxRuleType.java index 76538a86a9a..671fe25e702 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/TextboxRuleType.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/TextboxRuleType.java @@ -1,28 +1,28 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.card.arcane; - -/** - * @author stravant@gmail.com - */ -public enum TextboxRuleType { - /* Normal abilities, just rendered as lines of text with embedded symbols - * replaced to the relevant images. */ - NORMAL, - - /* Keyword ability. To be displayed in the comma separated list at the - * very top of the rules box */ - SIMPLE_KEYWORD, - - /* Loyalty abilities on planeswalkers */ - LOYALTY, - - /* Basic mana ability */ - BASIC_MANA, - - /* Levelup creature - static ability at a given level */ - LEVEL -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.card.arcane; + +/** + * @author stravant@gmail.com + */ +public enum TextboxRuleType { + /* Normal abilities, just rendered as lines of text with embedded symbols + * replaced to the relevant images. */ + NORMAL, + + /* Keyword ability. To be displayed in the comma separated list at the + * very top of the rules box */ + SIMPLE_KEYWORD, + + /* Loyalty abilities on planeswalkers */ + LOYALTY, + + /* Basic mana ability */ + BASIC_MANA, + + /* Levelup creature - static ability at a given level */ + LEVEL +} diff --git a/Mage.Common/src/main/java/mage/cards/CardBorder.java b/Mage.Common/src/main/java/mage/cards/CardBorder.java index 17f6cd8c27b..6ae348313a4 100644 --- a/Mage.Common/src/main/java/mage/cards/CardBorder.java +++ b/Mage.Common/src/main/java/mage/cards/CardBorder.java @@ -1,28 +1,28 @@ - -package mage.cards; - -/** - * @author stravant@gmail.com - * - * Enum listing the possible card faces for a card - * - * Because of Time Spiral block's shifted cards it is - * not sufficient to just look at a card's edition to - * determine what the card face should be. - */ -public enum CardBorder { - /* Old border card frames. ALPHA -> 8th ED */ - OLD, - - /* Future Sight frames. FUT futureshifted */ - FUT, - - /* Planar Chaos frames. PLC planeshifted */ - PLC, - - /* Modern card frames. 8th ED -> M15 */ - MOD, - - /* New border cards, M15 -> current */ - M15 -} + +package mage.cards; + +/** + * @author stravant@gmail.com + * + * Enum listing the possible card faces for a card + * + * Because of Time Spiral block's shifted cards it is + * not sufficient to just look at a card's edition to + * determine what the card face should be. + */ +public enum CardBorder { + /* Old border card frames. ALPHA -> 8th ED */ + OLD, + + /* Future Sight frames. FUT futureshifted */ + FUT, + + /* Planar Chaos frames. PLC planeshifted */ + PLC, + + /* Modern card frames. 8th ED -> M15 */ + MOD, + + /* New border cards, M15 -> current */ + M15 +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java index 51b5c74daf1..946d52ca6b1 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394CFB.java @@ -1,274 +1,274 @@ - -package mage.deck; - -import mage.cards.ExpansionSet; -import mage.cards.Sets; -import mage.cards.decks.Constructed; -import mage.constants.SetType; - -/** - * This class validates a deck for the Old School 93/94 format, specifically for - * the Channel Fireball Rules. - * - * This was originally made to follow the deck construction rules found at the - * Old School Mtg blog found at: - * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * - * There is no mana burn in this version of old school - * - * @author jmharmon - */ -public class OldSchool9394CFB extends Constructed { - - public OldSchool9394CFB() { - super("Constructed - Old School 93/94 - Channel Fireball Rules"); - - // use the set instances to make sure that we get the correct set codes - setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); - setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); - setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); - setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); - setCodes.add(mage.sets.Antiquities.getInstance().getCode()); - setCodes.add(mage.sets.Legends.getInstance().getCode()); - setCodes.add(mage.sets.TheDark.getInstance().getCode()); - setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); - setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); - - // ante cards and conspiracies banned, with specifically mentioned ones called out. - banned.add("Advantageous Proclamation"); - banned.add("Amulet of Quoz"); - banned.add("Backup Plan"); - banned.add("Brago's Favor"); - banned.add("Bronze Tablet"); /// - banned.add("Contract from Below"); /// - banned.add("Darkpact"); /// - banned.add("Demonic Attorney"); /// - banned.add("Double Stroke"); - banned.add("Immediate Action"); - banned.add("Iterative Analysis"); - banned.add("Jeweled Bird"); /// - banned.add("Muzzio's Preparations"); - banned.add("Power Play"); - banned.add("Rebirth"); /// - banned.add("Secret Summoning"); - banned.add("Secrets of Paradise"); - banned.add("Sentinel Dispatch"); - banned.add("Tempest Efreet"); /// - banned.add("Timmerian Fiends"); - banned.add("Unexpected Potential"); - banned.add("Worldknit"); - - //Let Media Inserts Arena and Sewers of Estark being only cards playable - banned.add("Acquire"); - banned.add("Aeronaut Tinkerer"); - banned.add("Ajani, Caller of the Pride"); - banned.add("Ajani Steadfast"); - banned.add("Alhammarret, High Arbiter"); - banned.add("Angelic Skirmisher"); - banned.add("Angel of Glory's Rise"); - banned.add("Ankle Shanker"); - banned.add("Arashin Sovereign"); - banned.add("Archfiend of Depravity"); - banned.add("Archfiend of Ifnir"); - banned.add("Arrest"); - banned.add("Assembled Alphas"); - banned.add("Avalanche Tusker"); - banned.add("Barrage Tyrant"); - banned.add("Bloodthrone Vampire"); - banned.add("Boltwing Marauder"); - banned.add("Bonescythe Sliver"); - banned.add("Breath of Malfegor"); - banned.add("Brion Stoutarm"); - banned.add("Broodmate Dragon"); - banned.add("Burning Sun's Avatar"); - banned.add("Canopy Vista"); - banned.add("Cathedral of War"); - banned.add("Celestial Colonnade"); - banned.add("Chandra, Fire of Kaladesh"); - banned.add("Chandra, Flamecaller"); - banned.add("Chandra, Pyromaster"); - banned.add("Chandra, Pyromaster"); - banned.add("Chandra, Roaring Flame"); - banned.add("Chandra, Torch of Defiance"); - banned.add("Chandra's Fury"); - banned.add("Chandra's Phoenix"); - banned.add("Cinder Glade"); - banned.add("Consume Spirit"); - banned.add("Corrupt"); - banned.add("Day of Judgment"); - banned.add("Deepfathom Skulker"); - banned.add("Defiant Bloodlord"); - banned.add("Devil's Play"); - banned.add("Dragon Fodder"); - banned.add("Dragonlord's Servant"); - banned.add("Dragonscale General"); - banned.add("Dread Defiler"); - banned.add("Dreg Mangler"); - banned.add("Drogskol Cavalry"); - banned.add("Dromoka, the Eternal"); - banned.add("Drowner of Hope"); - banned.add("Duress"); - banned.add("Dwynen, Gilt-Leaf Daen"); - banned.add("Eidolon of Blossoms"); - banned.add("Electrolyze"); - banned.add("Elusive Tormentor"); - banned.add("Emrakul, the Aeons Torn"); - banned.add("Evolving Wilds"); - banned.add("Faithless Looting"); - banned.add("Fated Conflagration"); - banned.add("Feast of Blood"); - banned.add("Flameblade Angel"); - banned.add("Flamerush Rider"); - banned.add("Foe-Razer Regent"); - banned.add("Frost Titan"); - banned.add("Garruk, Apex Predator"); - banned.add("Garruk, Caller of Beasts"); - banned.add("Garruk Wildspeaker"); - banned.add("Gaze of Granite"); - banned.add("Genesis Hydra"); - banned.add("Giant Badger"); - banned.add("Gideon of the Trials"); - banned.add("Gideon, Ally of Zendikar"); - banned.add("Gideon, Battle-Forged"); - banned.add("Gladehart Cavalry"); - banned.add("Goblin Dark-Dwellers"); - banned.add("Goblin Rabblemaster"); - banned.add("Gravecrawler"); - banned.add("Grave Titan"); - banned.add("Guul Draz Assassin"); - banned.add("Hamletback Goliath"); - banned.add("Harbinger of the Hunt"); - banned.add("Hero of Goma Fada"); - banned.add("Hixus, Prison Warden"); - banned.add("Honored Hierarch"); - banned.add("Honor of the Pure"); - banned.add("Inferno Titan"); - banned.add("Insidious Mist"); - banned.add("Ivorytusk Fortress"); - banned.add("Jace Beleren"); - banned.add("Jace, Memory Adept"); - banned.add("Jace, Telepath Unbound"); - banned.add("Jace, the Living Guildpact"); - banned.add("Jace, Unraveler of Secrets"); - banned.add("Jace, Unraveler of Secrets"); - banned.add("Jace, Vryn's Prodigy"); - banned.add("Jaya Ballard, Task Mage"); - banned.add("Karametra's Acolyte"); - banned.add("Knight Exemplar"); - banned.add("Kor Skyfisher"); - banned.add("Kothophed, Soul Hoarder"); - banned.add("Kytheon, Hero of Akros"); - banned.add("Lightning Hounds"); - banned.add("Liliana of the Dark Realms"); - banned.add("Liliana, Death's Majesty"); - banned.add("Liliana, Defiant Necromancer"); - banned.add("Liliana, the Last Hope"); - banned.add("Liliana Vess"); - banned.add("Liliana Vess"); - banned.add("Magister of Worth"); - banned.add("Mana Crypt"); - banned.add("Markov Dreadknight"); - banned.add("Memoricide"); - banned.add("Merfolk Mesmerist"); - banned.add("Mirran Crusader"); - banned.add("Munda's Vanguard"); - banned.add("Nalathni Dragon"); - banned.add("Necromaster Dragon"); - banned.add("Nephalia Moondrakes"); - banned.add("Niblis of Frost"); - banned.add("Nicol Bolas, God-Pharaoh"); - banned.add("Nightveil Specter"); - banned.add("Nissa Revane"); - banned.add("Nissa, Sage Animist"); - banned.add("Nissa, Steward of Elements"); - banned.add("Nissa, Vastwood Seer"); - banned.add("Nissa, Voice of Zendikar"); - banned.add("Nissa, Worldwaker"); - banned.add("Noosegraf Mob"); - banned.add("Ogre Arsonist"); - banned.add("Ogre Battledriver"); - banned.add("Ojutai's Command"); - banned.add("Oran-Rief Hydra"); - banned.add("Phyrexian Rager"); - banned.add("Pia and Kiran Nalaar"); - banned.add("Prairie Stream"); - banned.add("Primordial Hydra"); - banned.add("Pristine Skywise"); - banned.add("Rakshasa Vizier"); - banned.add("Ratchet Bomb"); - banned.add("Rattleclaw Mystic"); - banned.add("Ravenous Bloodseeker"); - banned.add("Relic Seeker"); - banned.add("Render Silent"); - banned.add("Retaliator Griffin"); - banned.add("Ruinous Path"); - banned.add("Sage-Eye Avengers"); - banned.add("Sage of the Inward Eye"); - banned.add("Sanctifier of Souls"); - banned.add("Sandsteppe Citadel"); - banned.add("Scavenging Ooze"); - banned.add("Scrap Trawler"); - banned.add("Scythe Leopard"); - banned.add("Seeker of the Way"); - banned.add("Serra Avatar"); - banned.add("Shamanic Revelation"); - banned.add("Siege Rhino"); - banned.add("Silverblade Paladin"); - banned.add("Silver Drake"); - banned.add("Skyship Stalker"); - banned.add("Smoldering Marsh"); - banned.add("Soul of Ravnica"); - banned.add("Soul of Zendikar"); - banned.add("Soul Swallower"); - banned.add("Spined Wurm"); - banned.add("Standstill"); - banned.add("Stealer of Secrets"); - banned.add("Steward of Valeron"); - banned.add("Sultai Charm"); - banned.add("Sunblast Angel"); - banned.add("Sunken Hollow"); - banned.add("Supreme Verdict"); - banned.add("Surgical Extraction"); - banned.add("Sylvan Caryatid"); - banned.add("Temur War Shaman"); - banned.add("Terastodon"); - banned.add("Thalia, Heretic Cathar"); - banned.add("Treasure Hunt"); - banned.add("Turnabout"); - banned.add("Tyrant of Valakut"); - banned.add("Ulvenwald Observer"); - banned.add("Valorous Stance"); - banned.add("Vampire Nocturnus"); - banned.add("Voidmage Husher"); - banned.add("Warmonger"); - banned.add("Wash Out"); - banned.add("Wildfire Eternal"); - banned.add("Windseeker Centaur"); - banned.add("Xathrid Necromancer"); - - restricted.add("Ancestral Recall"); - restricted.add("Balance"); - restricted.add("Black Lotus"); - restricted.add("Braingeyser"); - restricted.add("Channel"); - restricted.add("Chaos Orb"); - restricted.add("Demonic Tutor"); - restricted.add("Library of Alexandria"); - restricted.add("Mana Drain"); - restricted.add("Maze of Ith"); - restricted.add("Mind Twist"); - restricted.add("Mox Emerald"); - restricted.add("Mox Jet"); - restricted.add("Mox Pearl"); - restricted.add("Mox Ruby"); - restricted.add("Mox Sapphire"); - restricted.add("Recall"); - restricted.add("Regrowth"); - restricted.add("Sol Ring"); - restricted.add("Strip Mine"); - restricted.add("Time Vault"); - restricted.add("Time Walk"); - restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); - } -} + +package mage.deck; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.constants.SetType; + +/** + * This class validates a deck for the Old School 93/94 format, specifically for + * the Channel Fireball Rules. + * + * This was originally made to follow the deck construction rules found at the + * Old School Mtg blog found at: + * http://oldschool-mtg.blogspot.com/p/banrestriction.html + * + * There is no mana burn in this version of old school + * + * @author jmharmon + */ +public class OldSchool9394CFB extends Constructed { + + public OldSchool9394CFB() { + super("Constructed - Old School 93/94 - Channel Fireball Rules"); + + // use the set instances to make sure that we get the correct set codes + setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); + setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); + setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); + setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); + setCodes.add(mage.sets.Antiquities.getInstance().getCode()); + setCodes.add(mage.sets.Legends.getInstance().getCode()); + setCodes.add(mage.sets.TheDark.getInstance().getCode()); + setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); + setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); + + // ante cards and conspiracies banned, with specifically mentioned ones called out. + banned.add("Advantageous Proclamation"); + banned.add("Amulet of Quoz"); + banned.add("Backup Plan"); + banned.add("Brago's Favor"); + banned.add("Bronze Tablet"); /// + banned.add("Contract from Below"); /// + banned.add("Darkpact"); /// + banned.add("Demonic Attorney"); /// + banned.add("Double Stroke"); + banned.add("Immediate Action"); + banned.add("Iterative Analysis"); + banned.add("Jeweled Bird"); /// + banned.add("Muzzio's Preparations"); + banned.add("Power Play"); + banned.add("Rebirth"); /// + banned.add("Secret Summoning"); + banned.add("Secrets of Paradise"); + banned.add("Sentinel Dispatch"); + banned.add("Tempest Efreet"); /// + banned.add("Timmerian Fiends"); + banned.add("Unexpected Potential"); + banned.add("Worldknit"); + + //Let Media Inserts Arena and Sewers of Estark being only cards playable + banned.add("Acquire"); + banned.add("Aeronaut Tinkerer"); + banned.add("Ajani, Caller of the Pride"); + banned.add("Ajani Steadfast"); + banned.add("Alhammarret, High Arbiter"); + banned.add("Angelic Skirmisher"); + banned.add("Angel of Glory's Rise"); + banned.add("Ankle Shanker"); + banned.add("Arashin Sovereign"); + banned.add("Archfiend of Depravity"); + banned.add("Archfiend of Ifnir"); + banned.add("Arrest"); + banned.add("Assembled Alphas"); + banned.add("Avalanche Tusker"); + banned.add("Barrage Tyrant"); + banned.add("Bloodthrone Vampire"); + banned.add("Boltwing Marauder"); + banned.add("Bonescythe Sliver"); + banned.add("Breath of Malfegor"); + banned.add("Brion Stoutarm"); + banned.add("Broodmate Dragon"); + banned.add("Burning Sun's Avatar"); + banned.add("Canopy Vista"); + banned.add("Cathedral of War"); + banned.add("Celestial Colonnade"); + banned.add("Chandra, Fire of Kaladesh"); + banned.add("Chandra, Flamecaller"); + banned.add("Chandra, Pyromaster"); + banned.add("Chandra, Pyromaster"); + banned.add("Chandra, Roaring Flame"); + banned.add("Chandra, Torch of Defiance"); + banned.add("Chandra's Fury"); + banned.add("Chandra's Phoenix"); + banned.add("Cinder Glade"); + banned.add("Consume Spirit"); + banned.add("Corrupt"); + banned.add("Day of Judgment"); + banned.add("Deepfathom Skulker"); + banned.add("Defiant Bloodlord"); + banned.add("Devil's Play"); + banned.add("Dragon Fodder"); + banned.add("Dragonlord's Servant"); + banned.add("Dragonscale General"); + banned.add("Dread Defiler"); + banned.add("Dreg Mangler"); + banned.add("Drogskol Cavalry"); + banned.add("Dromoka, the Eternal"); + banned.add("Drowner of Hope"); + banned.add("Duress"); + banned.add("Dwynen, Gilt-Leaf Daen"); + banned.add("Eidolon of Blossoms"); + banned.add("Electrolyze"); + banned.add("Elusive Tormentor"); + banned.add("Emrakul, the Aeons Torn"); + banned.add("Evolving Wilds"); + banned.add("Faithless Looting"); + banned.add("Fated Conflagration"); + banned.add("Feast of Blood"); + banned.add("Flameblade Angel"); + banned.add("Flamerush Rider"); + banned.add("Foe-Razer Regent"); + banned.add("Frost Titan"); + banned.add("Garruk, Apex Predator"); + banned.add("Garruk, Caller of Beasts"); + banned.add("Garruk Wildspeaker"); + banned.add("Gaze of Granite"); + banned.add("Genesis Hydra"); + banned.add("Giant Badger"); + banned.add("Gideon of the Trials"); + banned.add("Gideon, Ally of Zendikar"); + banned.add("Gideon, Battle-Forged"); + banned.add("Gladehart Cavalry"); + banned.add("Goblin Dark-Dwellers"); + banned.add("Goblin Rabblemaster"); + banned.add("Gravecrawler"); + banned.add("Grave Titan"); + banned.add("Guul Draz Assassin"); + banned.add("Hamletback Goliath"); + banned.add("Harbinger of the Hunt"); + banned.add("Hero of Goma Fada"); + banned.add("Hixus, Prison Warden"); + banned.add("Honored Hierarch"); + banned.add("Honor of the Pure"); + banned.add("Inferno Titan"); + banned.add("Insidious Mist"); + banned.add("Ivorytusk Fortress"); + banned.add("Jace Beleren"); + banned.add("Jace, Memory Adept"); + banned.add("Jace, Telepath Unbound"); + banned.add("Jace, the Living Guildpact"); + banned.add("Jace, Unraveler of Secrets"); + banned.add("Jace, Unraveler of Secrets"); + banned.add("Jace, Vryn's Prodigy"); + banned.add("Jaya Ballard, Task Mage"); + banned.add("Karametra's Acolyte"); + banned.add("Knight Exemplar"); + banned.add("Kor Skyfisher"); + banned.add("Kothophed, Soul Hoarder"); + banned.add("Kytheon, Hero of Akros"); + banned.add("Lightning Hounds"); + banned.add("Liliana of the Dark Realms"); + banned.add("Liliana, Death's Majesty"); + banned.add("Liliana, Defiant Necromancer"); + banned.add("Liliana, the Last Hope"); + banned.add("Liliana Vess"); + banned.add("Liliana Vess"); + banned.add("Magister of Worth"); + banned.add("Mana Crypt"); + banned.add("Markov Dreadknight"); + banned.add("Memoricide"); + banned.add("Merfolk Mesmerist"); + banned.add("Mirran Crusader"); + banned.add("Munda's Vanguard"); + banned.add("Nalathni Dragon"); + banned.add("Necromaster Dragon"); + banned.add("Nephalia Moondrakes"); + banned.add("Niblis of Frost"); + banned.add("Nicol Bolas, God-Pharaoh"); + banned.add("Nightveil Specter"); + banned.add("Nissa Revane"); + banned.add("Nissa, Sage Animist"); + banned.add("Nissa, Steward of Elements"); + banned.add("Nissa, Vastwood Seer"); + banned.add("Nissa, Voice of Zendikar"); + banned.add("Nissa, Worldwaker"); + banned.add("Noosegraf Mob"); + banned.add("Ogre Arsonist"); + banned.add("Ogre Battledriver"); + banned.add("Ojutai's Command"); + banned.add("Oran-Rief Hydra"); + banned.add("Phyrexian Rager"); + banned.add("Pia and Kiran Nalaar"); + banned.add("Prairie Stream"); + banned.add("Primordial Hydra"); + banned.add("Pristine Skywise"); + banned.add("Rakshasa Vizier"); + banned.add("Ratchet Bomb"); + banned.add("Rattleclaw Mystic"); + banned.add("Ravenous Bloodseeker"); + banned.add("Relic Seeker"); + banned.add("Render Silent"); + banned.add("Retaliator Griffin"); + banned.add("Ruinous Path"); + banned.add("Sage-Eye Avengers"); + banned.add("Sage of the Inward Eye"); + banned.add("Sanctifier of Souls"); + banned.add("Sandsteppe Citadel"); + banned.add("Scavenging Ooze"); + banned.add("Scrap Trawler"); + banned.add("Scythe Leopard"); + banned.add("Seeker of the Way"); + banned.add("Serra Avatar"); + banned.add("Shamanic Revelation"); + banned.add("Siege Rhino"); + banned.add("Silverblade Paladin"); + banned.add("Silver Drake"); + banned.add("Skyship Stalker"); + banned.add("Smoldering Marsh"); + banned.add("Soul of Ravnica"); + banned.add("Soul of Zendikar"); + banned.add("Soul Swallower"); + banned.add("Spined Wurm"); + banned.add("Standstill"); + banned.add("Stealer of Secrets"); + banned.add("Steward of Valeron"); + banned.add("Sultai Charm"); + banned.add("Sunblast Angel"); + banned.add("Sunken Hollow"); + banned.add("Supreme Verdict"); + banned.add("Surgical Extraction"); + banned.add("Sylvan Caryatid"); + banned.add("Temur War Shaman"); + banned.add("Terastodon"); + banned.add("Thalia, Heretic Cathar"); + banned.add("Treasure Hunt"); + banned.add("Turnabout"); + banned.add("Tyrant of Valakut"); + banned.add("Ulvenwald Observer"); + banned.add("Valorous Stance"); + banned.add("Vampire Nocturnus"); + banned.add("Voidmage Husher"); + banned.add("Warmonger"); + banned.add("Wash Out"); + banned.add("Wildfire Eternal"); + banned.add("Windseeker Centaur"); + banned.add("Xathrid Necromancer"); + + restricted.add("Ancestral Recall"); + restricted.add("Balance"); + restricted.add("Black Lotus"); + restricted.add("Braingeyser"); + restricted.add("Channel"); + restricted.add("Chaos Orb"); + restricted.add("Demonic Tutor"); + restricted.add("Library of Alexandria"); + restricted.add("Mana Drain"); + restricted.add("Maze of Ith"); + restricted.add("Mind Twist"); + restricted.add("Mox Emerald"); + restricted.add("Mox Jet"); + restricted.add("Mox Pearl"); + restricted.add("Mox Ruby"); + restricted.add("Mox Sapphire"); + restricted.add("Recall"); + restricted.add("Regrowth"); + restricted.add("Sol Ring"); + restricted.add("Strip Mine"); + restricted.add("Time Vault"); + restricted.add("Time Walk"); + restricted.add("Timetwister"); + restricted.add("Wheel of Fortune"); + } +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java index 34b112c8e1b..589d8762d92 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EC.java @@ -1,275 +1,275 @@ - -package mage.deck; - -import mage.cards.ExpansionSet; -import mage.cards.Sets; -import mage.cards.decks.Constructed; -import mage.constants.SetType; - -/** - * This class validates a deck for the Old School 93/94 format, specifically for - * the EC Rules. - * - * This was originally made to follow the deck construction rules found at the - * Old School Mtg blog found at: - * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * - * There is no mana burn in this version of old school - * - * @author jmharmon - */ -public class OldSchool9394EC extends Constructed { - - public OldSchool9394EC() { - super("Constructed - Old School 93/94 - EC Rules"); - - // use the set instances to make sure that we get the correct set codes - setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); - setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); - setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); - setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); - setCodes.add(mage.sets.Antiquities.getInstance().getCode()); - setCodes.add(mage.sets.Legends.getInstance().getCode()); - setCodes.add(mage.sets.TheDark.getInstance().getCode()); - setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); - setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); - - // ante cards and conspiracies banned, with specifically mentioned ones called out. - banned.add("Advantageous Proclamation"); - banned.add("Amulet of Quoz"); - banned.add("Backup Plan"); - banned.add("Brago's Favor"); - banned.add("Bronze Tablet"); /// - banned.add("Contract from Below"); /// - banned.add("Darkpact"); /// - banned.add("Demonic Attorney"); /// - banned.add("Double Stroke"); - banned.add("Immediate Action"); - banned.add("Iterative Analysis"); - banned.add("Jeweled Bird"); /// - banned.add("Muzzio's Preparations"); - banned.add("Power Play"); - banned.add("Rebirth"); /// - banned.add("Secret Summoning"); - banned.add("Secrets of Paradise"); - banned.add("Sentinel Dispatch"); - banned.add("Shahrazad"); - banned.add("Tempest Efreet"); /// - banned.add("Timmerian Fiends"); - banned.add("Unexpected Potential"); - banned.add("Worldknit"); - - //Let Media Inserts Arena and Sewers of Estark being only cards playable - banned.add("Acquire"); - banned.add("Aeronaut Tinkerer"); - banned.add("Ajani, Caller of the Pride"); - banned.add("Ajani Steadfast"); - banned.add("Alhammarret, High Arbiter"); - banned.add("Angelic Skirmisher"); - banned.add("Angel of Glory's Rise"); - banned.add("Ankle Shanker"); - banned.add("Arashin Sovereign"); - banned.add("Archfiend of Depravity"); - banned.add("Archfiend of Ifnir"); - banned.add("Arrest"); - banned.add("Assembled Alphas"); - banned.add("Avalanche Tusker"); - banned.add("Barrage Tyrant"); - banned.add("Bloodthrone Vampire"); - banned.add("Boltwing Marauder"); - banned.add("Bonescythe Sliver"); - banned.add("Breath of Malfegor"); - banned.add("Brion Stoutarm"); - banned.add("Broodmate Dragon"); - banned.add("Burning Sun's Avatar"); - banned.add("Canopy Vista"); - banned.add("Cathedral of War"); - banned.add("Celestial Colonnade"); - banned.add("Chandra, Fire of Kaladesh"); - banned.add("Chandra, Flamecaller"); - banned.add("Chandra, Pyromaster"); - banned.add("Chandra, Pyromaster"); - banned.add("Chandra, Roaring Flame"); - banned.add("Chandra, Torch of Defiance"); - banned.add("Chandra's Fury"); - banned.add("Chandra's Phoenix"); - banned.add("Cinder Glade"); - banned.add("Consume Spirit"); - banned.add("Corrupt"); - banned.add("Day of Judgment"); - banned.add("Deepfathom Skulker"); - banned.add("Defiant Bloodlord"); - banned.add("Devil's Play"); - banned.add("Dragon Fodder"); - banned.add("Dragonlord's Servant"); - banned.add("Dragonscale General"); - banned.add("Dread Defiler"); - banned.add("Dreg Mangler"); - banned.add("Drogskol Cavalry"); - banned.add("Dromoka, the Eternal"); - banned.add("Drowner of Hope"); - banned.add("Duress"); - banned.add("Dwynen, Gilt-Leaf Daen"); - banned.add("Eidolon of Blossoms"); - banned.add("Electrolyze"); - banned.add("Elusive Tormentor"); - banned.add("Emrakul, the Aeons Torn"); - banned.add("Evolving Wilds"); - banned.add("Faithless Looting"); - banned.add("Fated Conflagration"); - banned.add("Feast of Blood"); - banned.add("Flameblade Angel"); - banned.add("Flamerush Rider"); - banned.add("Foe-Razer Regent"); - banned.add("Frost Titan"); - banned.add("Garruk, Apex Predator"); - banned.add("Garruk, Caller of Beasts"); - banned.add("Garruk Wildspeaker"); - banned.add("Gaze of Granite"); - banned.add("Genesis Hydra"); - banned.add("Giant Badger"); - banned.add("Gideon of the Trials"); - banned.add("Gideon, Ally of Zendikar"); - banned.add("Gideon, Battle-Forged"); - banned.add("Gladehart Cavalry"); - banned.add("Goblin Dark-Dwellers"); - banned.add("Goblin Rabblemaster"); - banned.add("Gravecrawler"); - banned.add("Grave Titan"); - banned.add("Guul Draz Assassin"); - banned.add("Hamletback Goliath"); - banned.add("Harbinger of the Hunt"); - banned.add("Hero of Goma Fada"); - banned.add("Hixus, Prison Warden"); - banned.add("Honored Hierarch"); - banned.add("Honor of the Pure"); - banned.add("Inferno Titan"); - banned.add("Insidious Mist"); - banned.add("Ivorytusk Fortress"); - banned.add("Jace Beleren"); - banned.add("Jace, Memory Adept"); - banned.add("Jace, Telepath Unbound"); - banned.add("Jace, the Living Guildpact"); - banned.add("Jace, Unraveler of Secrets"); - banned.add("Jace, Unraveler of Secrets"); - banned.add("Jace, Vryn's Prodigy"); - banned.add("Jaya Ballard, Task Mage"); - banned.add("Karametra's Acolyte"); - banned.add("Knight Exemplar"); - banned.add("Kor Skyfisher"); - banned.add("Kothophed, Soul Hoarder"); - banned.add("Kytheon, Hero of Akros"); - banned.add("Lightning Hounds"); - banned.add("Liliana of the Dark Realms"); - banned.add("Liliana, Death's Majesty"); - banned.add("Liliana, Defiant Necromancer"); - banned.add("Liliana, the Last Hope"); - banned.add("Liliana Vess"); - banned.add("Liliana Vess"); - banned.add("Magister of Worth"); - banned.add("Mana Crypt"); - banned.add("Markov Dreadknight"); - banned.add("Memoricide"); - banned.add("Merfolk Mesmerist"); - banned.add("Mirran Crusader"); - banned.add("Munda's Vanguard"); - banned.add("Nalathni Dragon"); - banned.add("Necromaster Dragon"); - banned.add("Nephalia Moondrakes"); - banned.add("Niblis of Frost"); - banned.add("Nicol Bolas, God-Pharaoh"); - banned.add("Nightveil Specter"); - banned.add("Nissa Revane"); - banned.add("Nissa, Sage Animist"); - banned.add("Nissa, Steward of Elements"); - banned.add("Nissa, Vastwood Seer"); - banned.add("Nissa, Voice of Zendikar"); - banned.add("Nissa, Worldwaker"); - banned.add("Noosegraf Mob"); - banned.add("Ogre Arsonist"); - banned.add("Ogre Battledriver"); - banned.add("Ojutai's Command"); - banned.add("Oran-Rief Hydra"); - banned.add("Phyrexian Rager"); - banned.add("Pia and Kiran Nalaar"); - banned.add("Prairie Stream"); - banned.add("Primordial Hydra"); - banned.add("Pristine Skywise"); - banned.add("Rakshasa Vizier"); - banned.add("Ratchet Bomb"); - banned.add("Rattleclaw Mystic"); - banned.add("Ravenous Bloodseeker"); - banned.add("Relic Seeker"); - banned.add("Render Silent"); - banned.add("Retaliator Griffin"); - banned.add("Ruinous Path"); - banned.add("Sage-Eye Avengers"); - banned.add("Sage of the Inward Eye"); - banned.add("Sanctifier of Souls"); - banned.add("Sandsteppe Citadel"); - banned.add("Scavenging Ooze"); - banned.add("Scrap Trawler"); - banned.add("Scythe Leopard"); - banned.add("Seeker of the Way"); - banned.add("Serra Avatar"); - banned.add("Shamanic Revelation"); - banned.add("Siege Rhino"); - banned.add("Silverblade Paladin"); - banned.add("Silver Drake"); - banned.add("Skyship Stalker"); - banned.add("Smoldering Marsh"); - banned.add("Soul of Ravnica"); - banned.add("Soul of Zendikar"); - banned.add("Soul Swallower"); - banned.add("Spined Wurm"); - banned.add("Standstill"); - banned.add("Stealer of Secrets"); - banned.add("Steward of Valeron"); - banned.add("Sultai Charm"); - banned.add("Sunblast Angel"); - banned.add("Sunken Hollow"); - banned.add("Supreme Verdict"); - banned.add("Surgical Extraction"); - banned.add("Sylvan Caryatid"); - banned.add("Temur War Shaman"); - banned.add("Terastodon"); - banned.add("Thalia, Heretic Cathar"); - banned.add("Treasure Hunt"); - banned.add("Turnabout"); - banned.add("Tyrant of Valakut"); - banned.add("Ulvenwald Observer"); - banned.add("Valorous Stance"); - banned.add("Vampire Nocturnus"); - banned.add("Voidmage Husher"); - banned.add("Warmonger"); - banned.add("Wash Out"); - banned.add("Wildfire Eternal"); - banned.add("Windseeker Centaur"); - banned.add("Xathrid Necromancer"); - - restricted.add("Ancestral Recall"); - restricted.add("Balance"); - restricted.add("Black Lotus"); - restricted.add("Braingeyser"); - restricted.add("Channel"); - restricted.add("Chaos Orb"); - restricted.add("Demonic Tutor"); - restricted.add("Library of Alexandria"); - restricted.add("Mana Drain"); - restricted.add("Maze of Ith"); - restricted.add("Mind Twist"); - restricted.add("Mox Emerald"); - restricted.add("Mox Jet"); - restricted.add("Mox Pearl"); - restricted.add("Mox Ruby"); - restricted.add("Mox Sapphire"); - restricted.add("Recall"); - restricted.add("Regrowth"); - restricted.add("Sol Ring"); - restricted.add("Time Vault"); - restricted.add("Time Walk"); - restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); - } - -} + +package mage.deck; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.constants.SetType; + +/** + * This class validates a deck for the Old School 93/94 format, specifically for + * the EC Rules. + * + * This was originally made to follow the deck construction rules found at the + * Old School Mtg blog found at: + * http://oldschool-mtg.blogspot.com/p/banrestriction.html + * + * There is no mana burn in this version of old school + * + * @author jmharmon + */ +public class OldSchool9394EC extends Constructed { + + public OldSchool9394EC() { + super("Constructed - Old School 93/94 - EC Rules"); + + // use the set instances to make sure that we get the correct set codes + setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); + setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); + setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); + setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); + setCodes.add(mage.sets.Antiquities.getInstance().getCode()); + setCodes.add(mage.sets.Legends.getInstance().getCode()); + setCodes.add(mage.sets.TheDark.getInstance().getCode()); + setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); + setCodes.add(mage.sets.MediaInserts.getInstance().getCode()); + + // ante cards and conspiracies banned, with specifically mentioned ones called out. + banned.add("Advantageous Proclamation"); + banned.add("Amulet of Quoz"); + banned.add("Backup Plan"); + banned.add("Brago's Favor"); + banned.add("Bronze Tablet"); /// + banned.add("Contract from Below"); /// + banned.add("Darkpact"); /// + banned.add("Demonic Attorney"); /// + banned.add("Double Stroke"); + banned.add("Immediate Action"); + banned.add("Iterative Analysis"); + banned.add("Jeweled Bird"); /// + banned.add("Muzzio's Preparations"); + banned.add("Power Play"); + banned.add("Rebirth"); /// + banned.add("Secret Summoning"); + banned.add("Secrets of Paradise"); + banned.add("Sentinel Dispatch"); + banned.add("Shahrazad"); + banned.add("Tempest Efreet"); /// + banned.add("Timmerian Fiends"); + banned.add("Unexpected Potential"); + banned.add("Worldknit"); + + //Let Media Inserts Arena and Sewers of Estark being only cards playable + banned.add("Acquire"); + banned.add("Aeronaut Tinkerer"); + banned.add("Ajani, Caller of the Pride"); + banned.add("Ajani Steadfast"); + banned.add("Alhammarret, High Arbiter"); + banned.add("Angelic Skirmisher"); + banned.add("Angel of Glory's Rise"); + banned.add("Ankle Shanker"); + banned.add("Arashin Sovereign"); + banned.add("Archfiend of Depravity"); + banned.add("Archfiend of Ifnir"); + banned.add("Arrest"); + banned.add("Assembled Alphas"); + banned.add("Avalanche Tusker"); + banned.add("Barrage Tyrant"); + banned.add("Bloodthrone Vampire"); + banned.add("Boltwing Marauder"); + banned.add("Bonescythe Sliver"); + banned.add("Breath of Malfegor"); + banned.add("Brion Stoutarm"); + banned.add("Broodmate Dragon"); + banned.add("Burning Sun's Avatar"); + banned.add("Canopy Vista"); + banned.add("Cathedral of War"); + banned.add("Celestial Colonnade"); + banned.add("Chandra, Fire of Kaladesh"); + banned.add("Chandra, Flamecaller"); + banned.add("Chandra, Pyromaster"); + banned.add("Chandra, Pyromaster"); + banned.add("Chandra, Roaring Flame"); + banned.add("Chandra, Torch of Defiance"); + banned.add("Chandra's Fury"); + banned.add("Chandra's Phoenix"); + banned.add("Cinder Glade"); + banned.add("Consume Spirit"); + banned.add("Corrupt"); + banned.add("Day of Judgment"); + banned.add("Deepfathom Skulker"); + banned.add("Defiant Bloodlord"); + banned.add("Devil's Play"); + banned.add("Dragon Fodder"); + banned.add("Dragonlord's Servant"); + banned.add("Dragonscale General"); + banned.add("Dread Defiler"); + banned.add("Dreg Mangler"); + banned.add("Drogskol Cavalry"); + banned.add("Dromoka, the Eternal"); + banned.add("Drowner of Hope"); + banned.add("Duress"); + banned.add("Dwynen, Gilt-Leaf Daen"); + banned.add("Eidolon of Blossoms"); + banned.add("Electrolyze"); + banned.add("Elusive Tormentor"); + banned.add("Emrakul, the Aeons Torn"); + banned.add("Evolving Wilds"); + banned.add("Faithless Looting"); + banned.add("Fated Conflagration"); + banned.add("Feast of Blood"); + banned.add("Flameblade Angel"); + banned.add("Flamerush Rider"); + banned.add("Foe-Razer Regent"); + banned.add("Frost Titan"); + banned.add("Garruk, Apex Predator"); + banned.add("Garruk, Caller of Beasts"); + banned.add("Garruk Wildspeaker"); + banned.add("Gaze of Granite"); + banned.add("Genesis Hydra"); + banned.add("Giant Badger"); + banned.add("Gideon of the Trials"); + banned.add("Gideon, Ally of Zendikar"); + banned.add("Gideon, Battle-Forged"); + banned.add("Gladehart Cavalry"); + banned.add("Goblin Dark-Dwellers"); + banned.add("Goblin Rabblemaster"); + banned.add("Gravecrawler"); + banned.add("Grave Titan"); + banned.add("Guul Draz Assassin"); + banned.add("Hamletback Goliath"); + banned.add("Harbinger of the Hunt"); + banned.add("Hero of Goma Fada"); + banned.add("Hixus, Prison Warden"); + banned.add("Honored Hierarch"); + banned.add("Honor of the Pure"); + banned.add("Inferno Titan"); + banned.add("Insidious Mist"); + banned.add("Ivorytusk Fortress"); + banned.add("Jace Beleren"); + banned.add("Jace, Memory Adept"); + banned.add("Jace, Telepath Unbound"); + banned.add("Jace, the Living Guildpact"); + banned.add("Jace, Unraveler of Secrets"); + banned.add("Jace, Unraveler of Secrets"); + banned.add("Jace, Vryn's Prodigy"); + banned.add("Jaya Ballard, Task Mage"); + banned.add("Karametra's Acolyte"); + banned.add("Knight Exemplar"); + banned.add("Kor Skyfisher"); + banned.add("Kothophed, Soul Hoarder"); + banned.add("Kytheon, Hero of Akros"); + banned.add("Lightning Hounds"); + banned.add("Liliana of the Dark Realms"); + banned.add("Liliana, Death's Majesty"); + banned.add("Liliana, Defiant Necromancer"); + banned.add("Liliana, the Last Hope"); + banned.add("Liliana Vess"); + banned.add("Liliana Vess"); + banned.add("Magister of Worth"); + banned.add("Mana Crypt"); + banned.add("Markov Dreadknight"); + banned.add("Memoricide"); + banned.add("Merfolk Mesmerist"); + banned.add("Mirran Crusader"); + banned.add("Munda's Vanguard"); + banned.add("Nalathni Dragon"); + banned.add("Necromaster Dragon"); + banned.add("Nephalia Moondrakes"); + banned.add("Niblis of Frost"); + banned.add("Nicol Bolas, God-Pharaoh"); + banned.add("Nightveil Specter"); + banned.add("Nissa Revane"); + banned.add("Nissa, Sage Animist"); + banned.add("Nissa, Steward of Elements"); + banned.add("Nissa, Vastwood Seer"); + banned.add("Nissa, Voice of Zendikar"); + banned.add("Nissa, Worldwaker"); + banned.add("Noosegraf Mob"); + banned.add("Ogre Arsonist"); + banned.add("Ogre Battledriver"); + banned.add("Ojutai's Command"); + banned.add("Oran-Rief Hydra"); + banned.add("Phyrexian Rager"); + banned.add("Pia and Kiran Nalaar"); + banned.add("Prairie Stream"); + banned.add("Primordial Hydra"); + banned.add("Pristine Skywise"); + banned.add("Rakshasa Vizier"); + banned.add("Ratchet Bomb"); + banned.add("Rattleclaw Mystic"); + banned.add("Ravenous Bloodseeker"); + banned.add("Relic Seeker"); + banned.add("Render Silent"); + banned.add("Retaliator Griffin"); + banned.add("Ruinous Path"); + banned.add("Sage-Eye Avengers"); + banned.add("Sage of the Inward Eye"); + banned.add("Sanctifier of Souls"); + banned.add("Sandsteppe Citadel"); + banned.add("Scavenging Ooze"); + banned.add("Scrap Trawler"); + banned.add("Scythe Leopard"); + banned.add("Seeker of the Way"); + banned.add("Serra Avatar"); + banned.add("Shamanic Revelation"); + banned.add("Siege Rhino"); + banned.add("Silverblade Paladin"); + banned.add("Silver Drake"); + banned.add("Skyship Stalker"); + banned.add("Smoldering Marsh"); + banned.add("Soul of Ravnica"); + banned.add("Soul of Zendikar"); + banned.add("Soul Swallower"); + banned.add("Spined Wurm"); + banned.add("Standstill"); + banned.add("Stealer of Secrets"); + banned.add("Steward of Valeron"); + banned.add("Sultai Charm"); + banned.add("Sunblast Angel"); + banned.add("Sunken Hollow"); + banned.add("Supreme Verdict"); + banned.add("Surgical Extraction"); + banned.add("Sylvan Caryatid"); + banned.add("Temur War Shaman"); + banned.add("Terastodon"); + banned.add("Thalia, Heretic Cathar"); + banned.add("Treasure Hunt"); + banned.add("Turnabout"); + banned.add("Tyrant of Valakut"); + banned.add("Ulvenwald Observer"); + banned.add("Valorous Stance"); + banned.add("Vampire Nocturnus"); + banned.add("Voidmage Husher"); + banned.add("Warmonger"); + banned.add("Wash Out"); + banned.add("Wildfire Eternal"); + banned.add("Windseeker Centaur"); + banned.add("Xathrid Necromancer"); + + restricted.add("Ancestral Recall"); + restricted.add("Balance"); + restricted.add("Black Lotus"); + restricted.add("Braingeyser"); + restricted.add("Channel"); + restricted.add("Chaos Orb"); + restricted.add("Demonic Tutor"); + restricted.add("Library of Alexandria"); + restricted.add("Mana Drain"); + restricted.add("Maze of Ith"); + restricted.add("Mind Twist"); + restricted.add("Mox Emerald"); + restricted.add("Mox Jet"); + restricted.add("Mox Pearl"); + restricted.add("Mox Ruby"); + restricted.add("Mox Sapphire"); + restricted.add("Recall"); + restricted.add("Regrowth"); + restricted.add("Sol Ring"); + restricted.add("Time Vault"); + restricted.add("Time Walk"); + restricted.add("Timetwister"); + restricted.add("Wheel of Fortune"); + } + +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EG.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EG.java index e11aabb7715..3ce11e196af 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EG.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394EG.java @@ -1,92 +1,92 @@ - -package mage.deck; - -import mage.cards.ExpansionSet; -import mage.cards.Sets; -import mage.cards.decks.Constructed; -import mage.constants.SetType; - -/** - * This class validates a deck for the Old School 93/94 format, specifically the - * EudoGames Rules. - * - * This was originally made to follow the deck construction rules found at the - * Old School Mtg blog found at: - * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * - * There is no mana burn in this version of old school. - * - * @author jmharmon - */ -public class OldSchool9394EG extends Constructed { - - public OldSchool9394EG() { - super("Constructed - Old School 93/94 - EudoGames Rules"); - - // use the set instances to make sure that we get the correct set codes - setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); - setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); - setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); - setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); - setCodes.add(mage.sets.Antiquities.getInstance().getCode()); - setCodes.add(mage.sets.Legends.getInstance().getCode()); - setCodes.add(mage.sets.TheDark.getInstance().getCode()); - setCodes.add(mage.sets.RevisedEdition.getInstance().getCode()); - setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); - setCodes.add(mage.sets.Chronicles.getInstance().getCode()); - - // ante cards and conspiracies banned, with specifically mentioned ones called out. - banned.add("Advantageous Proclamation"); - banned.add("Amulet of Quoz"); - banned.add("Backup Plan"); - banned.add("Brago's Favor"); - banned.add("Bronze Tablet"); /// - banned.add("Contract from Below"); /// - banned.add("Darkpact"); /// - banned.add("Demonic Attorney"); /// - banned.add("Double Stroke"); - banned.add("Immediate Action"); - banned.add("Iterative Analysis"); - banned.add("Jeweled Bird"); /// - banned.add("Muzzio's Preparations"); - banned.add("Power Play"); - banned.add("Rebirth"); /// - banned.add("Secret Summoning"); - banned.add("Secrets of Paradise"); - banned.add("Sentinel Dispatch"); - banned.add("Shahrazad"); - banned.add("Tempest Efreet"); /// - banned.add("Timmerian Fiends"); - banned.add("Unexpected Potential"); - banned.add("Worldknit"); - - restricted.add("Ancestral Recall"); - restricted.add("Balance"); - restricted.add("Black Lotus"); - restricted.add("Braingeyser"); - restricted.add("Channel"); - restricted.add("Chaos Orb"); - restricted.add("Demonic Tutor"); - restricted.add("Library of Alexandria"); - restricted.add("Mana Drain"); - restricted.add("Mana Vault"); - restricted.add("Maze of Ith"); - restricted.add("Mind Twist"); - restricted.add("Mishra's Workshop"); - restricted.add("Mox Emerald"); - restricted.add("Mox Jet"); - restricted.add("Mox Pearl"); - restricted.add("Mox Ruby"); - restricted.add("Mox Sapphire"); - restricted.add("Regrowth"); - restricted.add("Recall"); - restricted.add("Shahrazad"); - restricted.add("Sol Ring"); - restricted.add("Strip Mine"); - restricted.add("Time Vault"); - restricted.add("Time Walk"); - restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); - } - -} + +package mage.deck; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.constants.SetType; + +/** + * This class validates a deck for the Old School 93/94 format, specifically the + * EudoGames Rules. + * + * This was originally made to follow the deck construction rules found at the + * Old School Mtg blog found at: + * http://oldschool-mtg.blogspot.com/p/banrestriction.html + * + * There is no mana burn in this version of old school. + * + * @author jmharmon + */ +public class OldSchool9394EG extends Constructed { + + public OldSchool9394EG() { + super("Constructed - Old School 93/94 - EudoGames Rules"); + + // use the set instances to make sure that we get the correct set codes + setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); + setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); + setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); + setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); + setCodes.add(mage.sets.Antiquities.getInstance().getCode()); + setCodes.add(mage.sets.Legends.getInstance().getCode()); + setCodes.add(mage.sets.TheDark.getInstance().getCode()); + setCodes.add(mage.sets.RevisedEdition.getInstance().getCode()); + setCodes.add(mage.sets.FallenEmpires.getInstance().getCode()); + setCodes.add(mage.sets.Chronicles.getInstance().getCode()); + + // ante cards and conspiracies banned, with specifically mentioned ones called out. + banned.add("Advantageous Proclamation"); + banned.add("Amulet of Quoz"); + banned.add("Backup Plan"); + banned.add("Brago's Favor"); + banned.add("Bronze Tablet"); /// + banned.add("Contract from Below"); /// + banned.add("Darkpact"); /// + banned.add("Demonic Attorney"); /// + banned.add("Double Stroke"); + banned.add("Immediate Action"); + banned.add("Iterative Analysis"); + banned.add("Jeweled Bird"); /// + banned.add("Muzzio's Preparations"); + banned.add("Power Play"); + banned.add("Rebirth"); /// + banned.add("Secret Summoning"); + banned.add("Secrets of Paradise"); + banned.add("Sentinel Dispatch"); + banned.add("Shahrazad"); + banned.add("Tempest Efreet"); /// + banned.add("Timmerian Fiends"); + banned.add("Unexpected Potential"); + banned.add("Worldknit"); + + restricted.add("Ancestral Recall"); + restricted.add("Balance"); + restricted.add("Black Lotus"); + restricted.add("Braingeyser"); + restricted.add("Channel"); + restricted.add("Chaos Orb"); + restricted.add("Demonic Tutor"); + restricted.add("Library of Alexandria"); + restricted.add("Mana Drain"); + restricted.add("Mana Vault"); + restricted.add("Maze of Ith"); + restricted.add("Mind Twist"); + restricted.add("Mishra's Workshop"); + restricted.add("Mox Emerald"); + restricted.add("Mox Jet"); + restricted.add("Mox Pearl"); + restricted.add("Mox Ruby"); + restricted.add("Mox Sapphire"); + restricted.add("Regrowth"); + restricted.add("Recall"); + restricted.add("Shahrazad"); + restricted.add("Sol Ring"); + restricted.add("Strip Mine"); + restricted.add("Time Vault"); + restricted.add("Time Walk"); + restricted.add("Timetwister"); + restricted.add("Wheel of Fortune"); + } + +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394Italian.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394Italian.java index 271283e1c73..c5e97d44b19 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394Italian.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/OldSchool9394Italian.java @@ -1,87 +1,87 @@ - -package mage.deck; - -import mage.cards.ExpansionSet; -import mage.cards.Sets; -import mage.cards.decks.Constructed; -import mage.constants.SetType; - -/** - * This class validates a deck for the Old School 93/94 format, specifically for - * the Italian Rules. - * - * This was originally made to follow the deck construction rules found at the - * Old School Mtg blog found at: - * http://oldschool-mtg.blogspot.com/p/banrestriction.html - * - * There is no mana burn in this version of old school - * - * @author jmharmon - */ -public class OldSchool9394Italian extends Constructed{ - - public OldSchool9394Italian() { - super("Constructed - Old School 93/94 - Italian Rules"); - - // use the set instances to make sure that we get the correct set codes - setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); - setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); - setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); - setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); - setCodes.add(mage.sets.Antiquities.getInstance().getCode()); - setCodes.add(mage.sets.Legends.getInstance().getCode()); - setCodes.add(mage.sets.TheDark.getInstance().getCode()); - setCodes.add(mage.sets.RevisedEdition.getInstance().getCode()); - - // ante cards and conspiracies banned, with specifically mentioned ones called out. - banned.add("Advantageous Proclamation"); - banned.add("Amulet of Quoz"); - banned.add("Backup Plan"); - banned.add("Brago's Favor"); - banned.add("Bronze Tablet"); /// - banned.add("Contract from Below"); /// - banned.add("Darkpact"); /// - banned.add("Demonic Attorney"); /// - banned.add("Double Stroke"); - banned.add("Immediate Action"); - banned.add("Iterative Analysis"); - banned.add("Jeweled Bird"); /// - banned.add("Muzzio's Preparations"); - banned.add("Power Play"); - banned.add("Rebirth"); /// - banned.add("Secret Summoning"); - banned.add("Secrets of Paradise"); - banned.add("Sentinel Dispatch"); - banned.add("Shahrazad"); - banned.add("Tempest Efreet"); /// - banned.add("Timmerian Fiends"); - banned.add("Unexpected Potential"); - banned.add("Worldknit"); - - restricted.add("Ancestral Recall"); - restricted.add("Balance"); - restricted.add("Black Lotus"); - restricted.add("Braingeyser"); - restricted.add("Channel"); - restricted.add("Chaos Orb"); - restricted.add("Demonic Tutor"); - restricted.add("Library of Alexandria"); - restricted.add("Mana Drain"); - restricted.add("Mind Twist"); - restricted.add("Mishra's Workshop"); - restricted.add("Mox Emerald"); - restricted.add("Mox Jet"); - restricted.add("Mox Pearl"); - restricted.add("Mox Ruby"); - restricted.add("Mox Sapphire"); - restricted.add("Regrowth"); - restricted.add("Shahrazad"); - restricted.add("Sol Ring"); - restricted.add("Strip Mine"); - restricted.add("Time Vault"); - restricted.add("Time Walk"); - restricted.add("Timetwister"); - restricted.add("Wheel of Fortune"); - - } -} + +package mage.deck; + +import mage.cards.ExpansionSet; +import mage.cards.Sets; +import mage.cards.decks.Constructed; +import mage.constants.SetType; + +/** + * This class validates a deck for the Old School 93/94 format, specifically for + * the Italian Rules. + * + * This was originally made to follow the deck construction rules found at the + * Old School Mtg blog found at: + * http://oldschool-mtg.blogspot.com/p/banrestriction.html + * + * There is no mana burn in this version of old school + * + * @author jmharmon + */ +public class OldSchool9394Italian extends Constructed{ + + public OldSchool9394Italian() { + super("Constructed - Old School 93/94 - Italian Rules"); + + // use the set instances to make sure that we get the correct set codes + setCodes.add(mage.sets.LimitedEditionAlpha.getInstance().getCode()); + setCodes.add(mage.sets.LimitedEditionBeta.getInstance().getCode()); + setCodes.add(mage.sets.UnlimitedEdition.getInstance().getCode()); + setCodes.add(mage.sets.ArabianNights.getInstance().getCode()); + setCodes.add(mage.sets.Antiquities.getInstance().getCode()); + setCodes.add(mage.sets.Legends.getInstance().getCode()); + setCodes.add(mage.sets.TheDark.getInstance().getCode()); + setCodes.add(mage.sets.RevisedEdition.getInstance().getCode()); + + // ante cards and conspiracies banned, with specifically mentioned ones called out. + banned.add("Advantageous Proclamation"); + banned.add("Amulet of Quoz"); + banned.add("Backup Plan"); + banned.add("Brago's Favor"); + banned.add("Bronze Tablet"); /// + banned.add("Contract from Below"); /// + banned.add("Darkpact"); /// + banned.add("Demonic Attorney"); /// + banned.add("Double Stroke"); + banned.add("Immediate Action"); + banned.add("Iterative Analysis"); + banned.add("Jeweled Bird"); /// + banned.add("Muzzio's Preparations"); + banned.add("Power Play"); + banned.add("Rebirth"); /// + banned.add("Secret Summoning"); + banned.add("Secrets of Paradise"); + banned.add("Sentinel Dispatch"); + banned.add("Shahrazad"); + banned.add("Tempest Efreet"); /// + banned.add("Timmerian Fiends"); + banned.add("Unexpected Potential"); + banned.add("Worldknit"); + + restricted.add("Ancestral Recall"); + restricted.add("Balance"); + restricted.add("Black Lotus"); + restricted.add("Braingeyser"); + restricted.add("Channel"); + restricted.add("Chaos Orb"); + restricted.add("Demonic Tutor"); + restricted.add("Library of Alexandria"); + restricted.add("Mana Drain"); + restricted.add("Mind Twist"); + restricted.add("Mishra's Workshop"); + restricted.add("Mox Emerald"); + restricted.add("Mox Jet"); + restricted.add("Mox Pearl"); + restricted.add("Mox Ruby"); + restricted.add("Mox Sapphire"); + restricted.add("Regrowth"); + restricted.add("Shahrazad"); + restricted.add("Sol Ring"); + restricted.add("Strip Mine"); + restricted.add("Time Vault"); + restricted.add("Time Walk"); + restricted.add("Timetwister"); + restricted.add("Wheel of Fortune"); + + } +} diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/StarWarsBlock.java b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/StarWarsBlock.java index a65dafcd6f7..37d129c61c3 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/StarWarsBlock.java +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/src/mage/deck/StarWarsBlock.java @@ -1,21 +1,21 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.deck; - -import mage.cards.decks.Constructed; - -/** - * - * @author LevelX2 - */ -public class StarWarsBlock extends Constructed { - - public StarWarsBlock() { - super("Constructed Custom - Star Wars Block"); - setCodes.add(mage.sets.StarWars.getInstance().getCode()); - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.deck; + +import mage.cards.decks.Constructed; + +/** + * + * @author LevelX2 + */ +public class StarWarsBlock extends Constructed { + + public StarWarsBlock() { + super("Constructed Custom - Star Wars Block"); + setCodes.add(mage.sets.StarWars.getInstance().getCode()); + } + +} diff --git a/Mage.Sets/src/mage/cards/a/AetherTide.java b/Mage.Sets/src/mage/cards/a/AetherTide.java index f368a6ff020..835aebf549a 100644 --- a/Mage.Sets/src/mage/cards/a/AetherTide.java +++ b/Mage.Sets/src/mage/cards/a/AetherTide.java @@ -1,76 +1,76 @@ -package mage.cards.a; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.CostAdjuster; -import mage.abilities.costs.common.DiscardTargetCost; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.InfoEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; -import mage.filter.common.FilterCreatureCard; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.target.common.TargetCardInHand; -import mage.target.common.TargetCreaturePermanent; -import mage.target.targetadjustment.TargetAdjuster; - -/** - * - * @author jeffwadsworth - */ -public final class AetherTide extends CardImpl { - - public AetherTide(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{U}"); - - // As an additional cost to cast Aether Tide, discard X creature cards. - Ability ability = new SimpleStaticAbility(Zone.ALL, new InfoEffect("As an additional cost to cast {this}, discard X creature cards")); - ability.setRuleAtTheTop(true); - this.addAbility(ability); - - // Return X target creatures to their owners' hands. - Effect effect = new ReturnToHandTargetEffect(true); - effect.setText("Return X target creatures to their owners' hands"); - this.getSpellAbility().addEffect(effect); - this.getSpellAbility().setTargetAdjuster(AetherTideTargetAdjuster.instance); - this.getSpellAbility().setCostAdjuster(AetherTideCostAdjuster.instance); - - } - - public AetherTide(final AetherTide card) { - super(card); - } - - @Override - public AetherTide copy() { - return new AetherTide(this); - } -} - -enum AetherTideTargetAdjuster implements TargetAdjuster { - instance; - - @Override - public void adjustTargets(Ability ability, Game game) { - ability.getTargets().clear(); - int xValue = ability.getManaCostsToPay().getX(); - ability.addTarget(new TargetCreaturePermanent(xValue, xValue, new FilterCreaturePermanent(), false)); - } -} - -enum AetherTideCostAdjuster implements CostAdjuster { - instance; - - @Override - public void adjustCosts(Ability ability, Game game) { - int xValue = ability.getManaCostsToPay().getX(); - if (xValue > 0) { - ability.addCost(new DiscardTargetCost(new TargetCardInHand(xValue, xValue, new FilterCreatureCard("creature cards")))); - } - } -} +package mage.cards.a; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.CostAdjuster; +import mage.abilities.costs.common.DiscardTargetCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.InfoEffect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.target.common.TargetCardInHand; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetadjustment.TargetAdjuster; + +/** + * + * @author jeffwadsworth + */ +public final class AetherTide extends CardImpl { + + public AetherTide(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{X}{U}"); + + // As an additional cost to cast Aether Tide, discard X creature cards. + Ability ability = new SimpleStaticAbility(Zone.ALL, new InfoEffect("As an additional cost to cast {this}, discard X creature cards")); + ability.setRuleAtTheTop(true); + this.addAbility(ability); + + // Return X target creatures to their owners' hands. + Effect effect = new ReturnToHandTargetEffect(true); + effect.setText("Return X target creatures to their owners' hands"); + this.getSpellAbility().addEffect(effect); + this.getSpellAbility().setTargetAdjuster(AetherTideTargetAdjuster.instance); + this.getSpellAbility().setCostAdjuster(AetherTideCostAdjuster.instance); + + } + + public AetherTide(final AetherTide card) { + super(card); + } + + @Override + public AetherTide copy() { + return new AetherTide(this); + } +} + +enum AetherTideTargetAdjuster implements TargetAdjuster { + instance; + + @Override + public void adjustTargets(Ability ability, Game game) { + ability.getTargets().clear(); + int xValue = ability.getManaCostsToPay().getX(); + ability.addTarget(new TargetCreaturePermanent(xValue, xValue, new FilterCreaturePermanent(), false)); + } +} + +enum AetherTideCostAdjuster implements CostAdjuster { + instance; + + @Override + public void adjustCosts(Ability ability, Game game) { + int xValue = ability.getManaCostsToPay().getX(); + if (xValue > 0) { + ability.addCost(new DiscardTargetCost(new TargetCardInHand(xValue, xValue, new FilterCreatureCard("creature cards")))); + } + } +} diff --git a/Mage.Sets/src/mage/cards/a/Aggression.java b/Mage.Sets/src/mage/cards/a/Aggression.java index 3f2aedd7a2b..6da304a221d 100644 --- a/Mage.Sets/src/mage/cards/a/Aggression.java +++ b/Mage.Sets/src/mage/cards/a/Aggression.java @@ -1,103 +1,103 @@ -package mage.cards.a; - -import java.util.UUID; -import mage.MageObjectReference; -import mage.constants.SubType; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; -import mage.abilities.condition.Condition; -import mage.abilities.decorator.ConditionalTriggeredAbility; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedToEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.TrampleAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.Predicates; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.watchers.common.AttackedThisTurnWatcher; - -/** - * - * @author jeffwadsworth - */ -public final class Aggression extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - - static { - filter.add(Predicates.not(SubType.WALL.getPredicate())); - } - - public Aggression(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); - - this.subtype.add(SubType.AURA); - - // Enchant non-Wall creature - TargetPermanent auraTarget = new TargetPermanent(filter); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Enchanted creature has first strike and trample. - Ability ability2 = new SimpleStaticAbility( - Zone.BATTLEFIELD, - new GainAbilityAttachedEffect( - FirstStrikeAbility.getInstance(), - AttachmentType.AURA)); - ability2.addEffect(new GainAbilityAttachedEffect( - TrampleAbility.getInstance(), - AttachmentType.AURA)); - this.addAbility(ability2); - - // At the beginning of the end step of enchanted creature's controller, destroy that creature if it didn't attack this turn. - this.addAbility(new ConditionalTriggeredAbility( - new AtTheBeginOfNextEndStepDelayedTriggeredAbility( - new DestroyAttachedToEffect("enchanted"), - TargetController.CONTROLLER_ATTACHED_TO), - DidNotAttackedThisTurnEnchantedCondition.instance, - "At the beginning of the end step of enchanted creature's controller, destroy that creature if it didn't attack this turn."), - new AttackedThisTurnWatcher()); - - } - - private Aggression(final Aggression card) { - super(card); - } - - @Override - public Aggression copy() { - return new Aggression(this); - } -} - -enum DidNotAttackedThisTurnEnchantedCondition implements Condition { - instance; - - @Override - public boolean apply(Game game, Ability source) { - Permanent auraPermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (auraPermanent != null) { - Permanent enchantedPermanent = game.getPermanent(auraPermanent.getAttachedTo()); - AttackedThisTurnWatcher watcher = game.getState().getWatcher(AttackedThisTurnWatcher.class); - return enchantedPermanent != null - && watcher != null - && !watcher.getAttackedThisTurnCreatures().contains( - new MageObjectReference(enchantedPermanent, game)); - } - return false; - } -} +package mage.cards.a; + +import java.util.UUID; +import mage.MageObjectReference; +import mage.constants.SubType; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalTriggeredAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.TrampleAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.watchers.common.AttackedThisTurnWatcher; + +/** + * + * @author jeffwadsworth + */ +public final class Aggression extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(Predicates.not(SubType.WALL.getPredicate())); + } + + public Aggression(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{R}"); + + this.subtype.add(SubType.AURA); + + // Enchant non-Wall creature + TargetPermanent auraTarget = new TargetPermanent(filter); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature has first strike and trample. + Ability ability2 = new SimpleStaticAbility( + Zone.BATTLEFIELD, + new GainAbilityAttachedEffect( + FirstStrikeAbility.getInstance(), + AttachmentType.AURA)); + ability2.addEffect(new GainAbilityAttachedEffect( + TrampleAbility.getInstance(), + AttachmentType.AURA)); + this.addAbility(ability2); + + // At the beginning of the end step of enchanted creature's controller, destroy that creature if it didn't attack this turn. + this.addAbility(new ConditionalTriggeredAbility( + new AtTheBeginOfNextEndStepDelayedTriggeredAbility( + new DestroyAttachedToEffect("enchanted"), + TargetController.CONTROLLER_ATTACHED_TO), + DidNotAttackedThisTurnEnchantedCondition.instance, + "At the beginning of the end step of enchanted creature's controller, destroy that creature if it didn't attack this turn."), + new AttackedThisTurnWatcher()); + + } + + private Aggression(final Aggression card) { + super(card); + } + + @Override + public Aggression copy() { + return new Aggression(this); + } +} + +enum DidNotAttackedThisTurnEnchantedCondition implements Condition { + instance; + + @Override + public boolean apply(Game game, Ability source) { + Permanent auraPermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (auraPermanent != null) { + Permanent enchantedPermanent = game.getPermanent(auraPermanent.getAttachedTo()); + AttackedThisTurnWatcher watcher = game.getState().getWatcher(AttackedThisTurnWatcher.class); + return enchantedPermanent != null + && watcher != null + && !watcher.getAttackedThisTurnCreatures().contains( + new MageObjectReference(enchantedPermanent, game)); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/a/Antagonism.java b/Mage.Sets/src/mage/cards/a/Antagonism.java index 0ad3603e87a..fa1b534afd5 100644 --- a/Mage.Sets/src/mage/cards/a/Antagonism.java +++ b/Mage.Sets/src/mage/cards/a/Antagonism.java @@ -1,64 +1,64 @@ -package mage.cards.a; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfEndStepTriggeredAbility; -import mage.abilities.condition.Condition; -import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.TargetController; -import mage.game.Game; -import mage.watchers.common.BloodthirstWatcher; - -/** - * - * @author jeffwadsworth - */ -public final class Antagonism extends CardImpl { - - private static final String rule = "{this} deals 2 damage to that player unless one of their opponents was dealt damage this turn"; - - public Antagonism(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}"); - - // At the beginning of each player's end step, Antagonism deals 2 damage to that player unless one of their opponents was dealt damage this turn. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new ConditionalOneShotEffect(new DamageTargetEffect(2), - new OpponentWasNotDealtDamageCondition(), rule), TargetController.ANY, false)); - - } - - public Antagonism(final Antagonism card) { - super(card); - } - - @Override - public Antagonism copy() { - return new Antagonism(this); - } -} - -class OpponentWasNotDealtDamageCondition implements Condition { - - public OpponentWasNotDealtDamageCondition() { - } - - @Override - public boolean apply(Game game, Ability source) { - UUID activePlayer = game.getState().getActivePlayerId(); - if (activePlayer != null) { - BloodthirstWatcher watcher = game.getState().getWatcher(BloodthirstWatcher.class, activePlayer); - if (watcher != null) { - return !watcher.conditionMet(); - } - } - return false; - } - - @Override - public String toString() { - return "if an opponent was dealt damage this turn"; - } -} +package mage.cards.a; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.game.Game; +import mage.watchers.common.BloodthirstWatcher; + +/** + * + * @author jeffwadsworth + */ +public final class Antagonism extends CardImpl { + + private static final String rule = "{this} deals 2 damage to that player unless one of their opponents was dealt damage this turn"; + + public Antagonism(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{R}"); + + // At the beginning of each player's end step, Antagonism deals 2 damage to that player unless one of their opponents was dealt damage this turn. + this.addAbility(new BeginningOfEndStepTriggeredAbility(new ConditionalOneShotEffect(new DamageTargetEffect(2), + new OpponentWasNotDealtDamageCondition(), rule), TargetController.ANY, false)); + + } + + public Antagonism(final Antagonism card) { + super(card); + } + + @Override + public Antagonism copy() { + return new Antagonism(this); + } +} + +class OpponentWasNotDealtDamageCondition implements Condition { + + public OpponentWasNotDealtDamageCondition() { + } + + @Override + public boolean apply(Game game, Ability source) { + UUID activePlayer = game.getState().getActivePlayerId(); + if (activePlayer != null) { + BloodthirstWatcher watcher = game.getState().getWatcher(BloodthirstWatcher.class, activePlayer); + if (watcher != null) { + return !watcher.conditionMet(); + } + } + return false; + } + + @Override + public String toString() { + return "if an opponent was dealt damage this turn"; + } +} diff --git a/Mage.Sets/src/mage/cards/a/ArcheryTraining.java b/Mage.Sets/src/mage/cards/a/ArcheryTraining.java index f70caaa22c9..6fad28fe0f2 100644 --- a/Mage.Sets/src/mage/cards/a/ArcheryTraining.java +++ b/Mage.Sets/src/mage/cards/a/ArcheryTraining.java @@ -1,67 +1,67 @@ -package mage.cards.a; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.dynamicvalue.common.CountersSourceCount; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.target.common.TargetAttackingOrBlockingCreature; - -/** - * - * @author jeffwadsworth - */ -public final class ArcheryTraining extends CardImpl { - - private static final String rule = "This creature deals X damage to target attacking or blocking creature, where X is the number of arrow counters on {this}."; - - public ArcheryTraining(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // At the beginning of your upkeep, you may put an arrow counter on Archery Training. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, - new AddCountersSourceEffect(CounterType.ARROW.createInstance(), true), TargetController.YOU, true)); - - // Enchanted creature has "{tap}: This creature deals X damage to target attacking or blocking creature, where X is the number of arrow counters on Archery Training." - Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new CountersSourceCount(CounterType.ARROW)).setText(rule), new TapSourceCost()); - gainedAbility.addTarget(new TargetAttackingOrBlockingCreature()); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA))); - - } - - public ArcheryTraining(final ArcheryTraining card) { - super(card); - } - - @Override - public ArcheryTraining copy() { - return new ArcheryTraining(this); - } -} +package mage.cards.a; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetAttackingOrBlockingCreature; + +/** + * + * @author jeffwadsworth + */ +public final class ArcheryTraining extends CardImpl { + + private static final String rule = "This creature deals X damage to target attacking or blocking creature, where X is the number of arrow counters on {this}."; + + public ArcheryTraining(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // At the beginning of your upkeep, you may put an arrow counter on Archery Training. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, + new AddCountersSourceEffect(CounterType.ARROW.createInstance(), true), TargetController.YOU, true)); + + // Enchanted creature has "{tap}: This creature deals X damage to target attacking or blocking creature, where X is the number of arrow counters on Archery Training." + Ability gainedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new CountersSourceCount(CounterType.ARROW)).setText(rule), new TapSourceCost()); + gainedAbility.addTarget(new TargetAttackingOrBlockingCreature()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(gainedAbility, AttachmentType.AURA))); + + } + + public ArcheryTraining(final ArcheryTraining card) { + super(card); + } + + @Override + public ArcheryTraining copy() { + return new ArcheryTraining(this); + } +} diff --git a/Mage.Sets/src/mage/cards/a/AwesomePresence.java b/Mage.Sets/src/mage/cards/a/AwesomePresence.java index 2d45ef5aeda..732939c93cf 100644 --- a/Mage.Sets/src/mage/cards/a/AwesomePresence.java +++ b/Mage.Sets/src/mage/cards/a/AwesomePresence.java @@ -1,94 +1,94 @@ -package mage.cards.a; - -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.mana.ManaCosts; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.PayCostToAttackBlockEffectImpl; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class AwesomePresence extends CardImpl { - - public AwesomePresence(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Enchanted creature can't be blocked unless defending player pays {3} for each creature they control that's blocking it. - this.addAbility(new SimpleStaticAbility(new AwesomePresenceRestrictionEffect(new ManaCostsImpl("{3}")))); - - } - - private AwesomePresence(final AwesomePresence card) { - super(card); - } - - @Override - public AwesomePresence copy() { - return new AwesomePresence(this); - } -} - -class AwesomePresenceRestrictionEffect extends PayCostToAttackBlockEffectImpl { - - public AwesomePresenceRestrictionEffect(ManaCosts manaCosts) { - super(Duration.WhileOnBattlefield, Outcome.Neutral, RestrictType.BLOCK, manaCosts); - staticText = "Enchanted creature" - + " can't be blocked " - + "unless defending player pays " - + (manaCosts == null ? "" : manaCosts.getText() - + " for each creature they control that's blocking it"); - } - - public AwesomePresenceRestrictionEffect(AwesomePresenceRestrictionEffect effect) { - super(effect); - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - Permanent blockingCreature = game.getPermanent(event.getSourceId()); - Permanent enchantedAttackingCreature = game.getPermanent(event.getTargetId()); - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (blockingCreature != null - && enchantedAttackingCreature != null - && enchantment != null - && enchantment.isAttachedTo(enchantedAttackingCreature.getId())) { - Player defendingPlayer = game.getPlayer(blockingCreature.getControllerId()); - if (defendingPlayer != null) { - return !manaCosts.canPay(source, source.getSourceId(), defendingPlayer.getId(), game) - || !manaCosts.pay(source, game, source.getSourceId(), defendingPlayer.getId(), false); - } - } - return true; - } - - @Override - public AwesomePresenceRestrictionEffect copy() { - return new AwesomePresenceRestrictionEffect(this); - } -} +package mage.cards.a; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCosts; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.PayCostToAttackBlockEffectImpl; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class AwesomePresence extends CardImpl { + + public AwesomePresence(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature can't be blocked unless defending player pays {3} for each creature they control that's blocking it. + this.addAbility(new SimpleStaticAbility(new AwesomePresenceRestrictionEffect(new ManaCostsImpl("{3}")))); + + } + + private AwesomePresence(final AwesomePresence card) { + super(card); + } + + @Override + public AwesomePresence copy() { + return new AwesomePresence(this); + } +} + +class AwesomePresenceRestrictionEffect extends PayCostToAttackBlockEffectImpl { + + public AwesomePresenceRestrictionEffect(ManaCosts manaCosts) { + super(Duration.WhileOnBattlefield, Outcome.Neutral, RestrictType.BLOCK, manaCosts); + staticText = "Enchanted creature" + + " can't be blocked " + + "unless defending player pays " + + (manaCosts == null ? "" : manaCosts.getText() + + " for each creature they control that's blocking it"); + } + + public AwesomePresenceRestrictionEffect(AwesomePresenceRestrictionEffect effect) { + super(effect); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Permanent blockingCreature = game.getPermanent(event.getSourceId()); + Permanent enchantedAttackingCreature = game.getPermanent(event.getTargetId()); + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (blockingCreature != null + && enchantedAttackingCreature != null + && enchantment != null + && enchantment.isAttachedTo(enchantedAttackingCreature.getId())) { + Player defendingPlayer = game.getPlayer(blockingCreature.getControllerId()); + if (defendingPlayer != null) { + return !manaCosts.canPay(source, source.getSourceId(), defendingPlayer.getId(), game) + || !manaCosts.pay(source, game, source.getSourceId(), defendingPlayer.getId(), false); + } + } + return true; + } + + @Override + public AwesomePresenceRestrictionEffect copy() { + return new AwesomePresenceRestrictionEffect(this); + } +} diff --git a/Mage.Sets/src/mage/cards/b/BarbedWire.java b/Mage.Sets/src/mage/cards/b/BarbedWire.java index 4e820c3114c..0726332bbcb 100644 --- a/Mage.Sets/src/mage/cards/b/BarbedWire.java +++ b/Mage.Sets/src/mage/cards/b/BarbedWire.java @@ -1,105 +1,105 @@ -package mage.cards.b; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.PreventionEffectImpl; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.players.Player; - -/** - * - * @author jeffwadsworth - */ -public final class BarbedWire extends CardImpl { - - private final String rule = "At the beginning of each player's upkeep, " - + "Barbed Wire deals 1 damage to that player."; - - public BarbedWire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); - - // At the beginning of each player's upkeep, Barbed Wire deals 1 damage to that player. - this.addAbility(new BeginningOfUpkeepTriggeredAbility( - Zone.BATTLEFIELD, - new BarbwireDamageEffect(), - TargetController.ACTIVE, - false, true, rule)); - - // {2}: Prevent the next 1 damage that would be dealt by Barbed Wire this turn. - this.addAbility(new SimpleActivatedAbility( - new BarbedWirePreventionEffect(), new ManaCostsImpl("{2}"))); - - } - - private BarbedWire(final BarbedWire card) { - super(card); - } - - @Override - public BarbedWire copy() { - return new BarbedWire(this); - } -} - -class BarbwireDamageEffect extends OneShotEffect { - - public BarbwireDamageEffect() { - super(Outcome.Damage); - this.staticText = ""; - } - - public BarbwireDamageEffect(final BarbwireDamageEffect effect) { - super(effect); - } - - @Override - public BarbwireDamageEffect copy() { - return new BarbwireDamageEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player activePlayer = game.getPlayer(targetPointer.getFirst(game, source)); - if (activePlayer != null) { - activePlayer.damage(1, source.getSourceId(), game); - return true; - } - - return false; - } -} - -class BarbedWirePreventionEffect extends PreventionEffectImpl { - - public BarbedWirePreventionEffect() { - super(Duration.EndOfTurn, 1, false); - staticText = "Prevent the next 1 damage that would be dealt by {this} this turn"; - } - - public BarbedWirePreventionEffect(final BarbedWirePreventionEffect effect) { - super(effect); - } - - @Override - public BarbedWirePreventionEffect copy() { - return new BarbedWirePreventionEffect(this); - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - return super.applies(event, source, game) - && event.getSourceId().equals(source.getSourceId()); - } -} +package mage.cards.b; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.PreventionEffectImpl; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; + +/** + * + * @author jeffwadsworth + */ +public final class BarbedWire extends CardImpl { + + private final String rule = "At the beginning of each player's upkeep, " + + "Barbed Wire deals 1 damage to that player."; + + public BarbedWire(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); + + // At the beginning of each player's upkeep, Barbed Wire deals 1 damage to that player. + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + Zone.BATTLEFIELD, + new BarbwireDamageEffect(), + TargetController.ACTIVE, + false, true, rule)); + + // {2}: Prevent the next 1 damage that would be dealt by Barbed Wire this turn. + this.addAbility(new SimpleActivatedAbility( + new BarbedWirePreventionEffect(), new ManaCostsImpl("{2}"))); + + } + + private BarbedWire(final BarbedWire card) { + super(card); + } + + @Override + public BarbedWire copy() { + return new BarbedWire(this); + } +} + +class BarbwireDamageEffect extends OneShotEffect { + + public BarbwireDamageEffect() { + super(Outcome.Damage); + this.staticText = ""; + } + + public BarbwireDamageEffect(final BarbwireDamageEffect effect) { + super(effect); + } + + @Override + public BarbwireDamageEffect copy() { + return new BarbwireDamageEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player activePlayer = game.getPlayer(targetPointer.getFirst(game, source)); + if (activePlayer != null) { + activePlayer.damage(1, source.getSourceId(), game); + return true; + } + + return false; + } +} + +class BarbedWirePreventionEffect extends PreventionEffectImpl { + + public BarbedWirePreventionEffect() { + super(Duration.EndOfTurn, 1, false); + staticText = "Prevent the next 1 damage that would be dealt by {this} this turn"; + } + + public BarbedWirePreventionEffect(final BarbedWirePreventionEffect effect) { + super(effect); + } + + @Override + public BarbedWirePreventionEffect copy() { + return new BarbedWirePreventionEffect(this); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return super.applies(event, source, game) + && event.getSourceId().equals(source.getSourceId()); + } +} diff --git a/Mage.Sets/src/mage/cards/b/BenthicExplorers.java b/Mage.Sets/src/mage/cards/b/BenthicExplorers.java index 070e69caf54..89dd8b6202d 100644 --- a/Mage.Sets/src/mage/cards/b/BenthicExplorers.java +++ b/Mage.Sets/src/mage/cards/b/BenthicExplorers.java @@ -1,277 +1,277 @@ -package mage.cards.b; - -import mage.MageInt; -import mage.Mana; -import mage.abilities.Abilities; -import mage.abilities.Ability; -import mage.abilities.costs.Cost; -import mage.abilities.costs.CostImpl; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.ManaEffect; -import mage.abilities.mana.ActivatedManaAbilityImpl; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.choices.Choice; -import mage.choices.ChoiceColor; -import mage.constants.*; -import mage.filter.common.FilterLandPermanent; -import mage.filter.predicate.permanent.TappedPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetLandPermanent; -import mage.util.CardUtil; - -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class BenthicExplorers extends CardImpl { - - private static final FilterLandPermanent filter = new FilterLandPermanent("tapped land an opponent controls"); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - filter.add(TappedPredicate.instance); - } - - public BenthicExplorers(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); - - this.subtype.add(SubType.MERFOLK); - this.subtype.add(SubType.SCOUT); - this.power = new MageInt(2); - this.toughness = new MageInt(4); - - // {T}, Untap a tapped land an opponent controls: Add one mana of any type that land could produce. - Ability ability = new BenthicExplorersManaAbility(); - ability.addCost(new BenthicExplorersCost( - new TargetLandPermanent(1, 1, filter, true) - )); - this.addAbility(ability); - } - - private BenthicExplorers(final BenthicExplorers card) { - super(card); - } - - @Override - public BenthicExplorers copy() { - return new BenthicExplorers(this); - } -} - -class BenthicExplorersCost extends CostImpl { - - TargetLandPermanent target; - - public BenthicExplorersCost(TargetLandPermanent target) { - this.target = target; - this.text = "Untap " + CardUtil.numberToText(target.getMaxNumberOfTargets(), "") + ' ' + target.getTargetName(); - } - - public BenthicExplorersCost(final BenthicExplorersCost cost) { - super(cost); - this.target = cost.target.copy(); - } - - @Override - public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { - if (target.choose(Outcome.Untap, controllerId, sourceId, game)) { - for (UUID targetId : target.getTargets()) { - Permanent permanent = game.getPermanent(targetId); - if (permanent == null) { - return false; - } - paid |= permanent.untap(game); - if (paid) { - game.getState().setValue("UntapTargetCost" + ability.getSourceId().toString(), permanent); // remember the untapped permanent - } - } - } - return paid; - } - - @Override - public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { - return target.canChoose(controllerId, game); - } - - @Override - public BenthicExplorersCost copy() { - return new BenthicExplorersCost(this); - } - -} - -class BenthicExplorersManaAbility extends ActivatedManaAbilityImpl { - - BenthicExplorersManaAbility() { - super(Zone.BATTLEFIELD, new BenthicExplorersManaEffect(), new TapSourceCost()); - } - - private BenthicExplorersManaAbility(BenthicExplorersManaAbility ability) { - super(ability); - } - - @Override - public BenthicExplorersManaAbility copy() { - return new BenthicExplorersManaAbility(this); - } -} - -class BenthicExplorersManaEffect extends ManaEffect { - - public BenthicExplorersManaEffect() { - staticText = "Add one mana of any type that land could produce"; - } - - private BenthicExplorersManaEffect(final BenthicExplorersManaEffect effect) { - super(effect); - } - - @Override - public List getNetMana(Game game, Ability source) { - List netManas = new ArrayList<>(); - if (game == null) { - return netManas; - } - - Mana types = new Mana(); - for (UUID opponentId : game.getOpponents(source.getControllerId())) { - for (Permanent permanent : game.getBattlefield().getAllActivePermanents(opponentId)) { - if (permanent.isLand() && permanent.isTapped()) { - for (ActivatedManaAbilityImpl ability : permanent.getAbilities(game).getActivatedManaAbilities(Zone.BATTLEFIELD)) { - for (Mana mana : ability.getNetMana(game)) { - types.add(mana); - } - } - } - } - } - - if (types.getBlack() > 0) { - netManas.add(new Mana(ColoredManaSymbol.B)); - } - if (types.getRed() > 0) { - netManas.add(new Mana(ColoredManaSymbol.R)); - } - if (types.getBlue() > 0) { - netManas.add(new Mana(ColoredManaSymbol.U)); - } - if (types.getGreen() > 0) { - netManas.add(new Mana(ColoredManaSymbol.G)); - } - if (types.getWhite() > 0) { - netManas.add(new Mana(ColoredManaSymbol.W)); - } - if (types.getColorless() > 0) { - netManas.add(Mana.ColorlessMana(1)); - } - if (types.getAny() > 0) { - netManas.add(Mana.AnyMana(1)); - } - return netManas; - } - - @Override - public Mana produceMana(Game game, Ability source) { - Mana mana = new Mana(); - if (game == null) { - return mana; - } - Mana types = getManaTypes(game, source); - Choice choice = new ChoiceColor(true); - choice.getChoices().clear(); - choice.setMessage("Pick a mana color"); - if (types.getBlack() > 0) { - choice.getChoices().add("Black"); - } - if (types.getRed() > 0) { - choice.getChoices().add("Red"); - } - if (types.getBlue() > 0) { - choice.getChoices().add("Blue"); - } - if (types.getGreen() > 0) { - choice.getChoices().add("Green"); - } - if (types.getWhite() > 0) { - choice.getChoices().add("White"); - } - if (types.getColorless() > 0) { - choice.getChoices().add("Colorless"); - } - if (types.getAny() > 0) { - choice.getChoices().add("Black"); - choice.getChoices().add("Red"); - choice.getChoices().add("Blue"); - choice.getChoices().add("Green"); - choice.getChoices().add("White"); - choice.getChoices().add("Colorless"); - - } - if (!choice.getChoices().isEmpty()) { - Player player = game.getPlayer(source.getControllerId()); - if (choice.getChoices().size() == 1) { - choice.setChoice(choice.getChoices().iterator().next()); - } else { - if (player == null - || !player.choose(Outcome.Neutral, choice, game)) { - return mana; - } - } - if (choice.getChoice() != null) { - switch (choice.getChoice()) { - case "Black": - mana.setBlack(1); - break; - case "Blue": - mana.setBlue(1); - break; - case "Red": - mana.setRed(1); - break; - case "Green": - mana.setGreen(1); - break; - case "White": - mana.setWhite(1); - break; - case "Colorless": - mana.setColorless(1); - break; - } - } - } - return mana; - } - - private Mana getManaTypes(Game game, Ability source) { - Mana types = new Mana(); - if (game == null - || game.getPhase() == null) { - return types; - } - Permanent land = (Permanent) game.getState().getValue("UntapTargetCost" + source.getSourceId().toString()); - if (land != null) { - Abilities mana = land.getAbilities().getActivatedManaAbilities(Zone.BATTLEFIELD); - for (ActivatedManaAbilityImpl ability : mana) { - if (ability.definesMana(game)) { - for (Mana netMana : ability.getNetMana(game)) { - types.add(netMana); - } - } - } - } - return types; - } - - @Override - public BenthicExplorersManaEffect copy() { - return new BenthicExplorersManaEffect(this); - } -} +package mage.cards.b; + +import mage.MageInt; +import mage.Mana; +import mage.abilities.Abilities; +import mage.abilities.Ability; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.ManaEffect; +import mage.abilities.mana.ActivatedManaAbilityImpl; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.choices.Choice; +import mage.choices.ChoiceColor; +import mage.constants.*; +import mage.filter.common.FilterLandPermanent; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetLandPermanent; +import mage.util.CardUtil; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class BenthicExplorers extends CardImpl { + + private static final FilterLandPermanent filter = new FilterLandPermanent("tapped land an opponent controls"); + + static { + filter.add(TargetController.OPPONENT.getControllerPredicate()); + filter.add(TappedPredicate.instance); + } + + public BenthicExplorers(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); + + this.subtype.add(SubType.MERFOLK); + this.subtype.add(SubType.SCOUT); + this.power = new MageInt(2); + this.toughness = new MageInt(4); + + // {T}, Untap a tapped land an opponent controls: Add one mana of any type that land could produce. + Ability ability = new BenthicExplorersManaAbility(); + ability.addCost(new BenthicExplorersCost( + new TargetLandPermanent(1, 1, filter, true) + )); + this.addAbility(ability); + } + + private BenthicExplorers(final BenthicExplorers card) { + super(card); + } + + @Override + public BenthicExplorers copy() { + return new BenthicExplorers(this); + } +} + +class BenthicExplorersCost extends CostImpl { + + TargetLandPermanent target; + + public BenthicExplorersCost(TargetLandPermanent target) { + this.target = target; + this.text = "Untap " + CardUtil.numberToText(target.getMaxNumberOfTargets(), "") + ' ' + target.getTargetName(); + } + + public BenthicExplorersCost(final BenthicExplorersCost cost) { + super(cost); + this.target = cost.target.copy(); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { + if (target.choose(Outcome.Untap, controllerId, sourceId, game)) { + for (UUID targetId : target.getTargets()) { + Permanent permanent = game.getPermanent(targetId); + if (permanent == null) { + return false; + } + paid |= permanent.untap(game); + if (paid) { + game.getState().setValue("UntapTargetCost" + ability.getSourceId().toString(), permanent); // remember the untapped permanent + } + } + } + return paid; + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + return target.canChoose(controllerId, game); + } + + @Override + public BenthicExplorersCost copy() { + return new BenthicExplorersCost(this); + } + +} + +class BenthicExplorersManaAbility extends ActivatedManaAbilityImpl { + + BenthicExplorersManaAbility() { + super(Zone.BATTLEFIELD, new BenthicExplorersManaEffect(), new TapSourceCost()); + } + + private BenthicExplorersManaAbility(BenthicExplorersManaAbility ability) { + super(ability); + } + + @Override + public BenthicExplorersManaAbility copy() { + return new BenthicExplorersManaAbility(this); + } +} + +class BenthicExplorersManaEffect extends ManaEffect { + + public BenthicExplorersManaEffect() { + staticText = "Add one mana of any type that land could produce"; + } + + private BenthicExplorersManaEffect(final BenthicExplorersManaEffect effect) { + super(effect); + } + + @Override + public List getNetMana(Game game, Ability source) { + List netManas = new ArrayList<>(); + if (game == null) { + return netManas; + } + + Mana types = new Mana(); + for (UUID opponentId : game.getOpponents(source.getControllerId())) { + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(opponentId)) { + if (permanent.isLand() && permanent.isTapped()) { + for (ActivatedManaAbilityImpl ability : permanent.getAbilities(game).getActivatedManaAbilities(Zone.BATTLEFIELD)) { + for (Mana mana : ability.getNetMana(game)) { + types.add(mana); + } + } + } + } + } + + if (types.getBlack() > 0) { + netManas.add(new Mana(ColoredManaSymbol.B)); + } + if (types.getRed() > 0) { + netManas.add(new Mana(ColoredManaSymbol.R)); + } + if (types.getBlue() > 0) { + netManas.add(new Mana(ColoredManaSymbol.U)); + } + if (types.getGreen() > 0) { + netManas.add(new Mana(ColoredManaSymbol.G)); + } + if (types.getWhite() > 0) { + netManas.add(new Mana(ColoredManaSymbol.W)); + } + if (types.getColorless() > 0) { + netManas.add(Mana.ColorlessMana(1)); + } + if (types.getAny() > 0) { + netManas.add(Mana.AnyMana(1)); + } + return netManas; + } + + @Override + public Mana produceMana(Game game, Ability source) { + Mana mana = new Mana(); + if (game == null) { + return mana; + } + Mana types = getManaTypes(game, source); + Choice choice = new ChoiceColor(true); + choice.getChoices().clear(); + choice.setMessage("Pick a mana color"); + if (types.getBlack() > 0) { + choice.getChoices().add("Black"); + } + if (types.getRed() > 0) { + choice.getChoices().add("Red"); + } + if (types.getBlue() > 0) { + choice.getChoices().add("Blue"); + } + if (types.getGreen() > 0) { + choice.getChoices().add("Green"); + } + if (types.getWhite() > 0) { + choice.getChoices().add("White"); + } + if (types.getColorless() > 0) { + choice.getChoices().add("Colorless"); + } + if (types.getAny() > 0) { + choice.getChoices().add("Black"); + choice.getChoices().add("Red"); + choice.getChoices().add("Blue"); + choice.getChoices().add("Green"); + choice.getChoices().add("White"); + choice.getChoices().add("Colorless"); + + } + if (!choice.getChoices().isEmpty()) { + Player player = game.getPlayer(source.getControllerId()); + if (choice.getChoices().size() == 1) { + choice.setChoice(choice.getChoices().iterator().next()); + } else { + if (player == null + || !player.choose(Outcome.Neutral, choice, game)) { + return mana; + } + } + if (choice.getChoice() != null) { + switch (choice.getChoice()) { + case "Black": + mana.setBlack(1); + break; + case "Blue": + mana.setBlue(1); + break; + case "Red": + mana.setRed(1); + break; + case "Green": + mana.setGreen(1); + break; + case "White": + mana.setWhite(1); + break; + case "Colorless": + mana.setColorless(1); + break; + } + } + } + return mana; + } + + private Mana getManaTypes(Game game, Ability source) { + Mana types = new Mana(); + if (game == null + || game.getPhase() == null) { + return types; + } + Permanent land = (Permanent) game.getState().getValue("UntapTargetCost" + source.getSourceId().toString()); + if (land != null) { + Abilities mana = land.getAbilities().getActivatedManaAbilities(Zone.BATTLEFIELD); + for (ActivatedManaAbilityImpl ability : mana) { + if (ability.definesMana(game)) { + for (Mana netMana : ability.getNetMana(game)) { + types.add(netMana); + } + } + } + } + return types; + } + + @Override + public BenthicExplorersManaEffect copy() { + return new BenthicExplorersManaEffect(this); + } +} diff --git a/Mage.Sets/src/mage/cards/b/BloodOperative.java b/Mage.Sets/src/mage/cards/b/BloodOperative.java index b3cde09e0f0..d6358c900cb 100644 --- a/Mage.Sets/src/mage/cards/b/BloodOperative.java +++ b/Mage.Sets/src/mage/cards/b/BloodOperative.java @@ -1,97 +1,97 @@ -package mage.cards.b; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.costs.common.PayLifeCost; -import mage.abilities.effects.common.DoIfCostPaid; -import mage.abilities.effects.common.ExileTargetEffect; -import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; -import mage.abilities.keyword.LifelinkAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.players.Player; -import mage.target.common.TargetCardInGraveyard; - -/** - * - * @author LevelX2 - */ -public final class BloodOperative extends CardImpl { - - public BloodOperative(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); - - this.subtype.add(SubType.VAMPIRE); - this.subtype.add(SubType.ASSASSIN); - this.power = new MageInt(3); - this.toughness = new MageInt(1); - - // Lifelink - this.addAbility(LifelinkAbility.getInstance()); - - // When Blood Operative enters the battlefield, you may exile target card from a graveyard. - Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect(), true); - ability.addTarget(new TargetCardInGraveyard()); - this.addAbility(ability); - - // Whenever you surveil, if Blood Operative is in your graveyard, you may pay 3 life. If you do, return Blood Operative to your hand. - this.addAbility(new BloodOperativeTriggeredAbility()); - } - - public BloodOperative(final BloodOperative card) { - super(card); - } - - @Override - public BloodOperative copy() { - return new BloodOperative(this); - } -} - -class BloodOperativeTriggeredAbility extends TriggeredAbilityImpl { - - public BloodOperativeTriggeredAbility() { - super(Zone.GRAVEYARD, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new PayLifeCost(3)), false); - } - - public BloodOperativeTriggeredAbility(final BloodOperativeTriggeredAbility ability) { - super(ability); - } - - @Override - public BloodOperativeTriggeredAbility copy() { - return new BloodOperativeTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.SURVEILED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - return event.getPlayerId().equals(getControllerId()); - } - - @Override - public boolean checkInterveningIfClause(Game game) { - Player controller = game.getPlayer(getControllerId()); - if (controller != null && controller.getGraveyard().contains(getSourceId())) { - return super.checkInterveningIfClause(game); - } - return false; - } - - @Override - public String getRule() { - return "Whenever you surveil, if {this} is in your graveyard, you may pay 3 life. If you do, return {this} to your hand."; - } -} +package mage.cards.b; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.common.TargetCardInGraveyard; + +/** + * + * @author LevelX2 + */ +public final class BloodOperative extends CardImpl { + + public BloodOperative(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); + + this.subtype.add(SubType.VAMPIRE); + this.subtype.add(SubType.ASSASSIN); + this.power = new MageInt(3); + this.toughness = new MageInt(1); + + // Lifelink + this.addAbility(LifelinkAbility.getInstance()); + + // When Blood Operative enters the battlefield, you may exile target card from a graveyard. + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect(), true); + ability.addTarget(new TargetCardInGraveyard()); + this.addAbility(ability); + + // Whenever you surveil, if Blood Operative is in your graveyard, you may pay 3 life. If you do, return Blood Operative to your hand. + this.addAbility(new BloodOperativeTriggeredAbility()); + } + + public BloodOperative(final BloodOperative card) { + super(card); + } + + @Override + public BloodOperative copy() { + return new BloodOperative(this); + } +} + +class BloodOperativeTriggeredAbility extends TriggeredAbilityImpl { + + public BloodOperativeTriggeredAbility() { + super(Zone.GRAVEYARD, new DoIfCostPaid(new ReturnSourceFromGraveyardToHandEffect(), new PayLifeCost(3)), false); + } + + public BloodOperativeTriggeredAbility(final BloodOperativeTriggeredAbility ability) { + super(ability); + } + + @Override + public BloodOperativeTriggeredAbility copy() { + return new BloodOperativeTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.SURVEILED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return event.getPlayerId().equals(getControllerId()); + } + + @Override + public boolean checkInterveningIfClause(Game game) { + Player controller = game.getPlayer(getControllerId()); + if (controller != null && controller.getGraveyard().contains(getSourceId())) { + return super.checkInterveningIfClause(game); + } + return false; + } + + @Override + public String getRule() { + return "Whenever you surveil, if {this} is in your graveyard, you may pay 3 life. If you do, return {this} to your hand."; + } +} diff --git a/Mage.Sets/src/mage/cards/b/BoneMask.java b/Mage.Sets/src/mage/cards/b/BoneMask.java index 77707ff083d..43804bef48e 100644 --- a/Mage.Sets/src/mage/cards/b/BoneMask.java +++ b/Mage.Sets/src/mage/cards/b/BoneMask.java @@ -1,94 +1,94 @@ -package mage.cards.b; - -import java.util.Set; -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.PreventionEffectData; -import mage.abilities.effects.PreventionEffectImpl; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.players.Player; -import mage.target.TargetSource; - -/** - * - * @author jeffwadsworth - */ -public final class BoneMask extends CardImpl { - - public BoneMask(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); - - // {2}, {tap}: The next time a source of your choice would deal damage to you this turn, prevent that damage. Exile cards from the top of your library equal to the damage prevented this way. - Ability ability = new SimpleActivatedAbility(new BoneMaskEffect(), new ManaCostsImpl("{2}")); - ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetSource()); - this.addAbility(ability); - - } - - private BoneMask(final BoneMask card) { - super(card); - } - - @Override - public BoneMask copy() { - return new BoneMask(this); - } -} - -class BoneMaskEffect extends PreventionEffectImpl { - - public BoneMaskEffect() { - super(Duration.EndOfTurn, Integer.MAX_VALUE, false, false); - this.staticText = "The next time a source of your choice would deal damage to you this turn, prevent that damage. " - + "Exile cards from the top of your library equal to the damage prevented this way."; - } - - public BoneMaskEffect(final BoneMaskEffect effect) { - super(effect); - } - - @Override - public BoneMaskEffect copy() { - return new BoneMaskEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (!this.used - && super.applies(event, source, game)) { - if (event.getTargetId().equals(source.getControllerId()) - && event.getSourceId().equals(source.getFirstTarget())) { - PreventionEffectData preventionData = preventDamageAction(event, source, game); - this.used = true; - this.discard(); - if (preventionData.getPreventedDamage() > 0) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Set cardsToMoveToExileFromTopOfLibrary = controller.getLibrary().getTopCards( - game, - preventionData.getPreventedDamage()); - controller.moveCards(cardsToMoveToExileFromTopOfLibrary, Zone.EXILED, source, game); - } - } - } - return true; - } - return false; - } -} +package mage.cards.b; + +import java.util.Set; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.PreventionEffectData; +import mage.abilities.effects.PreventionEffectImpl; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.TargetSource; + +/** + * + * @author jeffwadsworth + */ +public final class BoneMask extends CardImpl { + + public BoneMask(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); + + // {2}, {tap}: The next time a source of your choice would deal damage to you this turn, prevent that damage. Exile cards from the top of your library equal to the damage prevented this way. + Ability ability = new SimpleActivatedAbility(new BoneMaskEffect(), new ManaCostsImpl("{2}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetSource()); + this.addAbility(ability); + + } + + private BoneMask(final BoneMask card) { + super(card); + } + + @Override + public BoneMask copy() { + return new BoneMask(this); + } +} + +class BoneMaskEffect extends PreventionEffectImpl { + + public BoneMaskEffect() { + super(Duration.EndOfTurn, Integer.MAX_VALUE, false, false); + this.staticText = "The next time a source of your choice would deal damage to you this turn, prevent that damage. " + + "Exile cards from the top of your library equal to the damage prevented this way."; + } + + public BoneMaskEffect(final BoneMaskEffect effect) { + super(effect); + } + + @Override + public BoneMaskEffect copy() { + return new BoneMaskEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (!this.used + && super.applies(event, source, game)) { + if (event.getTargetId().equals(source.getControllerId()) + && event.getSourceId().equals(source.getFirstTarget())) { + PreventionEffectData preventionData = preventDamageAction(event, source, game); + this.used = true; + this.discard(); + if (preventionData.getPreventedDamage() > 0) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Set cardsToMoveToExileFromTopOfLibrary = controller.getLibrary().getTopCards( + game, + preventionData.getPreventedDamage()); + controller.moveCards(cardsToMoveToExileFromTopOfLibrary, Zone.EXILED, source, game); + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/c/ChaosLord.java b/Mage.Sets/src/mage/cards/c/ChaosLord.java index b7f2cca6ba3..71736f0bd49 100644 --- a/Mage.Sets/src/mage/cards/c/ChaosLord.java +++ b/Mage.Sets/src/mage/cards/c/ChaosLord.java @@ -1,163 +1,163 @@ -package mage.cards.c; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.condition.common.ControlsPermanentsComparedToOpponentsCondition; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.constants.SubType; -import mage.abilities.keyword.FirstStrikeAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AsThoughEffectType; -import mage.constants.CardType; -import mage.constants.ComparisonType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetOpponent; - -/** - * - * @author jeffwadsworth - */ -public final class ChaosLord extends CardImpl { - - public ChaosLord(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}{R}"); - - this.subtype.add(SubType.HUMAN); - this.power = new MageInt(7); - this.toughness = new MageInt(7); - - // First strike - this.addAbility(FirstStrikeAbility.getInstance()); - - // At the beginning of your upkeep, target opponent gains control of Chaos Lord if the number of permanents is even. - Ability ability = new ChaosLordTriggeredAbility(); - ability.addTarget(new TargetOpponent()); - this.addAbility(ability); - - // Chaos Lord can attack as though it had haste unless it entered the battlefield this turn. - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ChaosLordEffect())); - - } - - private ChaosLord(final ChaosLord card) { - super(card); - } - - @Override - public ChaosLord copy() { - return new ChaosLord(this); - } -} - -class ChaosLordTriggeredAbility extends BeginningOfUpkeepTriggeredAbility { - - public ChaosLordTriggeredAbility() { - super(Zone.BATTLEFIELD, - new GainControlSourceEffect(), - TargetController.YOU, - false); - } - - public ChaosLordTriggeredAbility(ChaosLordTriggeredAbility ability) { - super(ability); - } - - @Override - public BeginningOfUpkeepTriggeredAbility copy() { - return new ChaosLordTriggeredAbility(this); - } - - @Override - public boolean checkInterveningIfClause(Game game) { - Condition condition = new ControlsPermanentsComparedToOpponentsCondition( - ComparisonType.EQUAL_TO, - new FilterPermanent()); - Player controller = game.getPlayer(controllerId); - if (controller != null - && condition.apply(game, this)) { - return super.checkInterveningIfClause(game); - } - return false; - } - - @Override - public String getRule() { - return "At the beginning of your upkeep, target opponent gains control of {this} if the number of permanents is even."; - } - -} - -class GainControlSourceEffect extends ContinuousEffectImpl { - - public GainControlSourceEffect() { - super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); - staticText = "target opponent gains control of {this}"; - } - - public GainControlSourceEffect(final GainControlSourceEffect effect) { - super(effect); - } - - @Override - public GainControlSourceEffect copy() { - return new GainControlSourceEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); - if (permanent != null) { - return permanent.changeControllerId(source.getFirstTarget(), game); - } else { - discard(); - } - return false; - } -} - -class ChaosLordEffect extends AsThoughEffectImpl { - - public ChaosLordEffect() { - super(AsThoughEffectType.ATTACK_AS_HASTE, Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "Chaos Lord can attack as though it had haste unless it entered the battlefield this turn"; - } - - public ChaosLordEffect(final ChaosLordEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public ChaosLordEffect copy() { - return new ChaosLordEffect(this); - } - - @Override - public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - Permanent chaosLord = game.getPermanent(objectId); - return chaosLord != null - && objectId == source.getSourceId() - && chaosLord.getTurnsOnBattlefield() > 0; - } -} +package mage.cards.c; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.ControlsPermanentsComparedToOpponentsCondition; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.SubType; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author jeffwadsworth + */ +public final class ChaosLord extends CardImpl { + + public ChaosLord(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}{R}{R}"); + + this.subtype.add(SubType.HUMAN); + this.power = new MageInt(7); + this.toughness = new MageInt(7); + + // First strike + this.addAbility(FirstStrikeAbility.getInstance()); + + // At the beginning of your upkeep, target opponent gains control of Chaos Lord if the number of permanents is even. + Ability ability = new ChaosLordTriggeredAbility(); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + + // Chaos Lord can attack as though it had haste unless it entered the battlefield this turn. + this.addAbility(new SimpleStaticAbility( + Zone.BATTLEFIELD, + new ChaosLordEffect())); + + } + + private ChaosLord(final ChaosLord card) { + super(card); + } + + @Override + public ChaosLord copy() { + return new ChaosLord(this); + } +} + +class ChaosLordTriggeredAbility extends BeginningOfUpkeepTriggeredAbility { + + public ChaosLordTriggeredAbility() { + super(Zone.BATTLEFIELD, + new GainControlSourceEffect(), + TargetController.YOU, + false); + } + + public ChaosLordTriggeredAbility(ChaosLordTriggeredAbility ability) { + super(ability); + } + + @Override + public BeginningOfUpkeepTriggeredAbility copy() { + return new ChaosLordTriggeredAbility(this); + } + + @Override + public boolean checkInterveningIfClause(Game game) { + Condition condition = new ControlsPermanentsComparedToOpponentsCondition( + ComparisonType.EQUAL_TO, + new FilterPermanent()); + Player controller = game.getPlayer(controllerId); + if (controller != null + && condition.apply(game, this)) { + return super.checkInterveningIfClause(game); + } + return false; + } + + @Override + public String getRule() { + return "At the beginning of your upkeep, target opponent gains control of {this} if the number of permanents is even."; + } + +} + +class GainControlSourceEffect extends ContinuousEffectImpl { + + public GainControlSourceEffect() { + super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); + staticText = "target opponent gains control of {this}"; + } + + public GainControlSourceEffect(final GainControlSourceEffect effect) { + super(effect); + } + + @Override + public GainControlSourceEffect copy() { + return new GainControlSourceEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = (Permanent) source.getSourceObjectIfItStillExists(game); + if (permanent != null) { + return permanent.changeControllerId(source.getFirstTarget(), game); + } else { + discard(); + } + return false; + } +} + +class ChaosLordEffect extends AsThoughEffectImpl { + + public ChaosLordEffect() { + super(AsThoughEffectType.ATTACK_AS_HASTE, Duration.WhileOnBattlefield, Outcome.Benefit); + staticText = "Chaos Lord can attack as though it had haste unless it entered the battlefield this turn"; + } + + public ChaosLordEffect(final ChaosLordEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public ChaosLordEffect copy() { + return new ChaosLordEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + Permanent chaosLord = game.getPermanent(objectId); + return chaosLord != null + && objectId == source.getSourceId() + && chaosLord.getTurnsOnBattlefield() > 0; + } +} diff --git a/Mage.Sets/src/mage/cards/c/CloakOfConfusion.java b/Mage.Sets/src/mage/cards/c/CloakOfConfusion.java index 477ddbbc723..6a438c75734 100644 --- a/Mage.Sets/src/mage/cards/c/CloakOfConfusion.java +++ b/Mage.Sets/src/mage/cards/c/CloakOfConfusion.java @@ -1,186 +1,186 @@ -package mage.cards.c; - -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.ReplacementEffectImpl; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.game.Game; -import mage.game.combat.CombatGroup; -import mage.game.events.DamageEvent; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.TargetPermanent; -import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.targetpointer.FixedTarget; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class CloakOfConfusion extends CardImpl { - - public CloakOfConfusion(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature you control - TargetPermanent auraTarget = new TargetControlledCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Whenever enchanted creature attacks and isn't blocked, you may have it assign no combat damage this turn. - // If you do, defending player discards a card at random. - this.addAbility(new CloakOfConfusionTriggeredAbility()); - - } - - public CloakOfConfusion(final CloakOfConfusion card) { - super(card); - } - - @Override - public CloakOfConfusion copy() { - return new CloakOfConfusion(this); - } -} - -class CloakOfConfusionTriggeredAbility extends TriggeredAbilityImpl { - - public CloakOfConfusionTriggeredAbility() { - super(Zone.BATTLEFIELD, new CloakOfConfusionEffect(), true); - } - - public CloakOfConfusionTriggeredAbility(final CloakOfConfusionTriggeredAbility ability) { - super(ability); - } - - @Override - public CloakOfConfusionTriggeredAbility copy() { - return new CloakOfConfusionTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.DECLARE_BLOCKERS_STEP; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent aura = game.getPermanentOrLKIBattlefield(getSourceId()); - if (aura != null) { - Permanent enchantedCreature = game.getPermanent(aura.getAttachedTo()); - if (enchantedCreature != null - && enchantedCreature.isAttacking()) { - for (CombatGroup combatGroup : game.getCombat().getGroups()) { - if (combatGroup.getBlockers().isEmpty() - && combatGroup.getAttackers().contains(enchantedCreature.getId())) { - this.getEffects().setTargetPointer( - new FixedTarget(game.getCombat().getDefendingPlayerId( - enchantedCreature.getId(), game))); - return true; - } - } - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever enchanted creature attacks and isn't blocked, " + super.getRule(); - } -} - -class CloakOfConfusionEffect extends OneShotEffect { - - public CloakOfConfusionEffect() { - super(Outcome.Neutral); - this.staticText = "you may have it assign no combat damage this turn. " - + "If you do, defending player discards a card at random"; - } - - public CloakOfConfusionEffect(final CloakOfConfusionEffect effect) { - super(effect); - } - - @Override - public CloakOfConfusionEffect copy() { - return new CloakOfConfusionEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent enchantedCreature = game.getPermanent(game.getPermanent(source.getSourceId()).getAttachedTo()); - if (controller != null && controller.chooseUse(outcome, "Do you wish to not assign combat damage from " - + enchantedCreature.getName() + " and have the defending player discard a card at random?", source, game)) { - ContinuousEffect effect = new AssignNoCombatDamageTargetEffect(); - effect.setTargetPointer(new FixedTarget(enchantedCreature.getId())); - game.addEffect(effect, source); - Player defendingPlayer = game.getPlayer(targetPointer.getFirst(game, source)); - if (defendingPlayer != null) { - defendingPlayer.discard(1, true, source, game); - } - return true; - } - - return false; - } -} - -class AssignNoCombatDamageTargetEffect extends ReplacementEffectImpl { - - public AssignNoCombatDamageTargetEffect() { - super(Duration.EndOfTurn, Outcome.Neutral); - } - - public AssignNoCombatDamageTargetEffect(final AssignNoCombatDamageTargetEffect effect) { - super(effect); - } - - @Override - public AssignNoCombatDamageTargetEffect copy() { - return new AssignNoCombatDamageTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - switch (event.getType()) { - case DAMAGE_CREATURE: - case DAMAGE_PLAYER: - case DAMAGE_PLANESWALKER: - return true; - default: - return false; - } - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - DamageEvent damageEvent = (DamageEvent) event; - return event.getSourceId().equals(targetPointer.getFirst(game, source)) - && damageEvent.isCombatDamage(); - } -} +package mage.cards.c; + +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.game.Game; +import mage.game.combat.CombatGroup; +import mage.game.events.DamageEvent; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class CloakOfConfusion extends CardImpl { + + public CloakOfConfusion(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature you control + TargetPermanent auraTarget = new TargetControlledCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Whenever enchanted creature attacks and isn't blocked, you may have it assign no combat damage this turn. + // If you do, defending player discards a card at random. + this.addAbility(new CloakOfConfusionTriggeredAbility()); + + } + + public CloakOfConfusion(final CloakOfConfusion card) { + super(card); + } + + @Override + public CloakOfConfusion copy() { + return new CloakOfConfusion(this); + } +} + +class CloakOfConfusionTriggeredAbility extends TriggeredAbilityImpl { + + public CloakOfConfusionTriggeredAbility() { + super(Zone.BATTLEFIELD, new CloakOfConfusionEffect(), true); + } + + public CloakOfConfusionTriggeredAbility(final CloakOfConfusionTriggeredAbility ability) { + super(ability); + } + + @Override + public CloakOfConfusionTriggeredAbility copy() { + return new CloakOfConfusionTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.DECLARE_BLOCKERS_STEP; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent aura = game.getPermanentOrLKIBattlefield(getSourceId()); + if (aura != null) { + Permanent enchantedCreature = game.getPermanent(aura.getAttachedTo()); + if (enchantedCreature != null + && enchantedCreature.isAttacking()) { + for (CombatGroup combatGroup : game.getCombat().getGroups()) { + if (combatGroup.getBlockers().isEmpty() + && combatGroup.getAttackers().contains(enchantedCreature.getId())) { + this.getEffects().setTargetPointer( + new FixedTarget(game.getCombat().getDefendingPlayerId( + enchantedCreature.getId(), game))); + return true; + } + } + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever enchanted creature attacks and isn't blocked, " + super.getRule(); + } +} + +class CloakOfConfusionEffect extends OneShotEffect { + + public CloakOfConfusionEffect() { + super(Outcome.Neutral); + this.staticText = "you may have it assign no combat damage this turn. " + + "If you do, defending player discards a card at random"; + } + + public CloakOfConfusionEffect(final CloakOfConfusionEffect effect) { + super(effect); + } + + @Override + public CloakOfConfusionEffect copy() { + return new CloakOfConfusionEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent enchantedCreature = game.getPermanent(game.getPermanent(source.getSourceId()).getAttachedTo()); + if (controller != null && controller.chooseUse(outcome, "Do you wish to not assign combat damage from " + + enchantedCreature.getName() + " and have the defending player discard a card at random?", source, game)) { + ContinuousEffect effect = new AssignNoCombatDamageTargetEffect(); + effect.setTargetPointer(new FixedTarget(enchantedCreature.getId())); + game.addEffect(effect, source); + Player defendingPlayer = game.getPlayer(targetPointer.getFirst(game, source)); + if (defendingPlayer != null) { + defendingPlayer.discard(1, true, source, game); + } + return true; + } + + return false; + } +} + +class AssignNoCombatDamageTargetEffect extends ReplacementEffectImpl { + + public AssignNoCombatDamageTargetEffect() { + super(Duration.EndOfTurn, Outcome.Neutral); + } + + public AssignNoCombatDamageTargetEffect(final AssignNoCombatDamageTargetEffect effect) { + super(effect); + } + + @Override + public AssignNoCombatDamageTargetEffect copy() { + return new AssignNoCombatDamageTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + switch (event.getType()) { + case DAMAGE_CREATURE: + case DAMAGE_PLAYER: + case DAMAGE_PLANESWALKER: + return true; + default: + return false; + } + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + DamageEvent damageEvent = (DamageEvent) event; + return event.getSourceId().equals(targetPointer.getFirst(game, source)) + && damageEvent.isCombatDamage(); + } +} diff --git a/Mage.Sets/src/mage/cards/c/Contempt.java b/Mage.Sets/src/mage/cards/c/Contempt.java index 1aa4800d05e..be865d5c1e0 100644 --- a/Mage.Sets/src/mage/cards/c/Contempt.java +++ b/Mage.Sets/src/mage/cards/c/Contempt.java @@ -1,93 +1,93 @@ -package mage.cards.c; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.common.AttacksAttachedTriggeredAbility; -import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.ReturnToHandSourceEffect; -import mage.abilities.effects.common.ReturnToHandTargetEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author jeffwadsworth - */ -public final class Contempt extends CardImpl { - - public Contempt(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Whenever enchanted creature attacks, return it and Contempt to their owners' hands at end of combat. - this.addAbility(new AttacksAttachedTriggeredAbility(new ContemptEffect())); - - } - - public Contempt(final Contempt card) { - super(card); - } - - @Override - public Contempt copy() { - return new Contempt(this); - } -} - -class ContemptEffect extends OneShotEffect { - - ContemptEffect() { - super(Outcome.Detriment); - this.staticText = "return it and {this} to their owners' hands at end of combat."; - } - - ContemptEffect(final ContemptEffect effect) { - super(effect); - } - - @Override - public ContemptEffect copy() { - return new ContemptEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent contempt = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (contempt != null) { - Permanent attachedToPermanent = game.getPermanent(contempt.getAttachedTo()); - if (attachedToPermanent != null) { - Effect effect = new ReturnToHandTargetEffect(); - effect.setTargetPointer(new FixedTarget( - attachedToPermanent.getId())).setText("return " - + attachedToPermanent.getName() + " to owner's hand."); - AtTheEndOfCombatDelayedTriggeredAbility ability = new AtTheEndOfCombatDelayedTriggeredAbility(effect); - game.addDelayedTriggeredAbility(ability, source); - } - Effect effect = new ReturnToHandSourceEffect(); - AtTheEndOfCombatDelayedTriggeredAbility ability = new AtTheEndOfCombatDelayedTriggeredAbility(effect); - game.addDelayedTriggeredAbility(ability, source); - return true; - } - return false; - } -} +package mage.cards.c; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.common.AttacksAttachedTriggeredAbility; +import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.effects.common.ReturnToHandTargetEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public final class Contempt extends CardImpl { + + public Contempt(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Whenever enchanted creature attacks, return it and Contempt to their owners' hands at end of combat. + this.addAbility(new AttacksAttachedTriggeredAbility(new ContemptEffect())); + + } + + public Contempt(final Contempt card) { + super(card); + } + + @Override + public Contempt copy() { + return new Contempt(this); + } +} + +class ContemptEffect extends OneShotEffect { + + ContemptEffect() { + super(Outcome.Detriment); + this.staticText = "return it and {this} to their owners' hands at end of combat."; + } + + ContemptEffect(final ContemptEffect effect) { + super(effect); + } + + @Override + public ContemptEffect copy() { + return new ContemptEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent contempt = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (contempt != null) { + Permanent attachedToPermanent = game.getPermanent(contempt.getAttachedTo()); + if (attachedToPermanent != null) { + Effect effect = new ReturnToHandTargetEffect(); + effect.setTargetPointer(new FixedTarget( + attachedToPermanent.getId())).setText("return " + + attachedToPermanent.getName() + " to owner's hand."); + AtTheEndOfCombatDelayedTriggeredAbility ability = new AtTheEndOfCombatDelayedTriggeredAbility(effect); + game.addDelayedTriggeredAbility(ability, source); + } + Effect effect = new ReturnToHandSourceEffect(); + AtTheEndOfCombatDelayedTriggeredAbility ability = new AtTheEndOfCombatDelayedTriggeredAbility(effect); + game.addDelayedTriggeredAbility(ability, source); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/c/Cunning.java b/Mage.Sets/src/mage/cards/c/Cunning.java index 505c10898ac..3cace5396bd 100644 --- a/Mage.Sets/src/mage/cards/c/Cunning.java +++ b/Mage.Sets/src/mage/cards/c/Cunning.java @@ -1,89 +1,89 @@ -package mage.cards.c; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; -import mage.abilities.common.AttacksOrBlocksEnchantedTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextCleanupDelayedTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.SacrificeSourceEffect; -import mage.abilities.effects.common.continuous.BoostEnchantedEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author jeffwadsworth - */ -public final class Cunning extends CardImpl { - - public Cunning(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Enchanted creature gets +3/+3. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3))); - - // When enchanted creature attacks or blocks, sacrifice Cunning at the beginning of the next cleanup step. - this.addAbility(new AttacksOrBlocksEnchantedTriggeredAbility(Zone.BATTLEFIELD, - new SacrificeSourceBeginningCleanupStepEffect())); - } - - public Cunning(final Cunning card) { - super(card); - } - - @Override - public Cunning copy() { - return new Cunning(this); - } -} - -class SacrificeSourceBeginningCleanupStepEffect extends OneShotEffect { - - public SacrificeSourceBeginningCleanupStepEffect() { - super(Outcome.Sacrifice); - this.staticText = "sacrifice {this} at the beginning of the next cleanup step"; - } - - public SacrificeSourceBeginningCleanupStepEffect(final SacrificeSourceBeginningCleanupStepEffect effect) { - super(effect); - } - - @Override - public SacrificeSourceBeginningCleanupStepEffect copy() { - return new SacrificeSourceBeginningCleanupStepEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent cunning = game.getPermanent(source.getSourceId()); - if (cunning != null) { - DelayedTriggeredAbility delayedAbility - = new AtTheBeginOfNextCleanupDelayedTriggeredAbility( - new SacrificeSourceEffect()); - game.addDelayedTriggeredAbility(delayedAbility, source); - return true; - } - return false; - } -} +package mage.cards.c; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.AttacksOrBlocksEnchantedTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextCleanupDelayedTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.abilities.effects.common.continuous.BoostEnchantedEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author jeffwadsworth + */ +public final class Cunning extends CardImpl { + + public Cunning(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature gets +3/+3. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 3))); + + // When enchanted creature attacks or blocks, sacrifice Cunning at the beginning of the next cleanup step. + this.addAbility(new AttacksOrBlocksEnchantedTriggeredAbility(Zone.BATTLEFIELD, + new SacrificeSourceBeginningCleanupStepEffect())); + } + + public Cunning(final Cunning card) { + super(card); + } + + @Override + public Cunning copy() { + return new Cunning(this); + } +} + +class SacrificeSourceBeginningCleanupStepEffect extends OneShotEffect { + + public SacrificeSourceBeginningCleanupStepEffect() { + super(Outcome.Sacrifice); + this.staticText = "sacrifice {this} at the beginning of the next cleanup step"; + } + + public SacrificeSourceBeginningCleanupStepEffect(final SacrificeSourceBeginningCleanupStepEffect effect) { + super(effect); + } + + @Override + public SacrificeSourceBeginningCleanupStepEffect copy() { + return new SacrificeSourceBeginningCleanupStepEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent cunning = game.getPermanent(source.getSourceId()); + if (cunning != null) { + DelayedTriggeredAbility delayedAbility + = new AtTheBeginOfNextCleanupDelayedTriggeredAbility( + new SacrificeSourceEffect()); + game.addDelayedTriggeredAbility(delayedAbility, source); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/d/DampingEngine.java b/Mage.Sets/src/mage/cards/d/DampingEngine.java index 573f507d551..18546501f4a 100644 --- a/Mage.Sets/src/mage/cards/d/DampingEngine.java +++ b/Mage.Sets/src/mage/cards/d/DampingEngine.java @@ -1,207 +1,207 @@ -/* - * 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.d; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.SpecialAction; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.Condition; -import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetControlledPermanent; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public class DampingEngine extends CardImpl { - - public DampingEngine(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); - - // A player who controls more permanents than each other player can't play lands or cast artifact, creature, or enchantment spells. That player may sacrifice a permanent for that player to ignore this effect until end of turn. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DampingEngineEffect())); - this.addAbility(new DampingEngineSpecialAction()); - - } - - public DampingEngine(final DampingEngine card) { - super(card); - } - - @Override - public DampingEngine copy() { - return new DampingEngine(this); - } -} - -class DampingEngineEffect extends ContinuousRuleModifyingEffectImpl { - - public DampingEngineEffect() { - super(Duration.WhileOnBattlefield, Outcome.AIDontUseIt); - staticText = "A player who controls more permanents than each other player can't play lands or cast artifact, creature, or enchantment spells" - + "That player may sacrifice a permanent for that player to ignore this effect until end of turn.

"; - } - - public DampingEngineEffect(final DampingEngineEffect effect) { - super(effect); - } - - @Override - public DampingEngineEffect copy() { - return new DampingEngineEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public String getInfoMessage(Ability source, GameEvent event, Game game) { - MageObject mageObject = game.getObject(source.getSourceId()); - if (mageObject != null) { - return "You can't play the land or cast the spell (" + mageObject.getName() + " in play)."; - } - return null; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.PLAY_LAND - || event.getType() == GameEvent.EventType.CAST_SPELL; - - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - Player player = game.getPlayer(event.getPlayerId()); - Permanent dampingEngine = game.getPermanent(source.getSourceId()); - final Card card = game.getCard(event.getSourceId()); - if (player != null || card != null) { - // check type of spell - if (card.isCreature() - || card.isArtifact() - || card.isEnchantment() - || card.isLand()) { - // check to see if the player has more permanents - if (new ControlsMorePermanentsThanEachOtherPlayer(player).apply(game, source)) { - // check to see if the player choose to ignore the effect - return game.getState().getValue("ignoreEffect") == null - || dampingEngine == null - || !game.getState().getValue("ignoreEffect").equals - (dampingEngine.getId() + "ignoreEffect" + game.getState().getPriorityPlayerId() + game.getState().getTurnNum()); - } - } - } - return false; - } -} - -class DampingEngineSpecialAction extends SpecialAction { - - public DampingEngineSpecialAction() { - super(Zone.BATTLEFIELD); - this.addCost(new SacrificeTargetCost(new TargetControlledPermanent(), true)); - this.addEffect(new DampingEngineIgnoreEffect()); - this.setMayActivate(TargetController.ANY); - } - - public DampingEngineSpecialAction(final DampingEngineSpecialAction ability) { - super(ability); - } - - @Override - public DampingEngineSpecialAction copy() { - return new DampingEngineSpecialAction(this); - } -} - -class DampingEngineIgnoreEffect extends OneShotEffect { - - public DampingEngineIgnoreEffect() { - super(Outcome.AIDontUseIt); - this.staticText = "That player may sacrifice a permanent for that player to ignore this effect until end of turn"; - } - - public DampingEngineIgnoreEffect(final DampingEngineIgnoreEffect effect) { - super(effect); - } - - @Override - public DampingEngineIgnoreEffect copy() { - return new DampingEngineIgnoreEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); - String key = permanent.getId() + "ignoreEffect" + game.getState().getPriorityPlayerId() + game.getState().getTurnNum(); - if (key != null) { - game.getState().setValue("ignoreEffect", key); - } - return true; - } -} - -class ControlsMorePermanentsThanEachOtherPlayer implements Condition { - - Player player; - - public ControlsMorePermanentsThanEachOtherPlayer(Player player) { - this.player = player; - } - - @Override - public boolean apply(Game game, Ability source) { - int numPermanents = game.getBattlefield().countAll(new FilterPermanent(), player.getId(), game); - for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { - if (numPermanents > game.getBattlefield().countAll(new FilterPermanent(), playerId, game)) { - return true; - } - } - return false; - } - - @Override - public String toString() { - return "a player controls less permanents than you"; - } -} +/* + * 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.d; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.SpecialAction; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetControlledPermanent; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public class DampingEngine extends CardImpl { + + public DampingEngine(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); + + // A player who controls more permanents than each other player can't play lands or cast artifact, creature, or enchantment spells. That player may sacrifice a permanent for that player to ignore this effect until end of turn. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DampingEngineEffect())); + this.addAbility(new DampingEngineSpecialAction()); + + } + + public DampingEngine(final DampingEngine card) { + super(card); + } + + @Override + public DampingEngine copy() { + return new DampingEngine(this); + } +} + +class DampingEngineEffect extends ContinuousRuleModifyingEffectImpl { + + public DampingEngineEffect() { + super(Duration.WhileOnBattlefield, Outcome.AIDontUseIt); + staticText = "A player who controls more permanents than each other player can't play lands or cast artifact, creature, or enchantment spells" + + "That player may sacrifice a permanent for that player to ignore this effect until end of turn.

"; + } + + public DampingEngineEffect(final DampingEngineEffect effect) { + super(effect); + } + + @Override + public DampingEngineEffect copy() { + return new DampingEngineEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public String getInfoMessage(Ability source, GameEvent event, Game game) { + MageObject mageObject = game.getObject(source.getSourceId()); + if (mageObject != null) { + return "You can't play the land or cast the spell (" + mageObject.getName() + " in play)."; + } + return null; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.PLAY_LAND + || event.getType() == GameEvent.EventType.CAST_SPELL; + + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Player player = game.getPlayer(event.getPlayerId()); + Permanent dampingEngine = game.getPermanent(source.getSourceId()); + final Card card = game.getCard(event.getSourceId()); + if (player != null || card != null) { + // check type of spell + if (card.isCreature() + || card.isArtifact() + || card.isEnchantment() + || card.isLand()) { + // check to see if the player has more permanents + if (new ControlsMorePermanentsThanEachOtherPlayer(player).apply(game, source)) { + // check to see if the player choose to ignore the effect + return game.getState().getValue("ignoreEffect") == null + || dampingEngine == null + || !game.getState().getValue("ignoreEffect").equals + (dampingEngine.getId() + "ignoreEffect" + game.getState().getPriorityPlayerId() + game.getState().getTurnNum()); + } + } + } + return false; + } +} + +class DampingEngineSpecialAction extends SpecialAction { + + public DampingEngineSpecialAction() { + super(Zone.BATTLEFIELD); + this.addCost(new SacrificeTargetCost(new TargetControlledPermanent(), true)); + this.addEffect(new DampingEngineIgnoreEffect()); + this.setMayActivate(TargetController.ANY); + } + + public DampingEngineSpecialAction(final DampingEngineSpecialAction ability) { + super(ability); + } + + @Override + public DampingEngineSpecialAction copy() { + return new DampingEngineSpecialAction(this); + } +} + +class DampingEngineIgnoreEffect extends OneShotEffect { + + public DampingEngineIgnoreEffect() { + super(Outcome.AIDontUseIt); + this.staticText = "That player may sacrifice a permanent for that player to ignore this effect until end of turn"; + } + + public DampingEngineIgnoreEffect(final DampingEngineIgnoreEffect effect) { + super(effect); + } + + @Override + public DampingEngineIgnoreEffect copy() { + return new DampingEngineIgnoreEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getSourceId()); + String key = permanent.getId() + "ignoreEffect" + game.getState().getPriorityPlayerId() + game.getState().getTurnNum(); + if (key != null) { + game.getState().setValue("ignoreEffect", key); + } + return true; + } +} + +class ControlsMorePermanentsThanEachOtherPlayer implements Condition { + + Player player; + + public ControlsMorePermanentsThanEachOtherPlayer(Player player) { + this.player = player; + } + + @Override + public boolean apply(Game game, Ability source) { + int numPermanents = game.getBattlefield().countAll(new FilterPermanent(), player.getId(), game); + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { + if (numPermanents > game.getBattlefield().countAll(new FilterPermanent(), playerId, game)) { + return true; + } + } + return false; + } + + @Override + public String toString() { + return "a player controls less permanents than you"; + } +} diff --git a/Mage.Sets/src/mage/cards/d/Disappear.java b/Mage.Sets/src/mage/cards/d/Disappear.java index a02d0bf1289..4ce17915e6a 100644 --- a/Mage.Sets/src/mage/cards/d/Disappear.java +++ b/Mage.Sets/src/mage/cards/d/Disappear.java @@ -1,87 +1,87 @@ -package mage.cards.d; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.AttachEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * - * @author jeffwadsworth - */ -public final class Disappear extends CardImpl { - - public Disappear(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}{U}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // {U}: Return enchanted creature and Disappear to their owners' hands. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DisappearEffect(), new ManaCostsImpl("{U}"))); - - } - - public Disappear(final Disappear card) { - super(card); - } - - @Override - public Disappear copy() { - return new Disappear(this); - } -} - -class DisappearEffect extends OneShotEffect { - - public DisappearEffect() { - super(Outcome.ReturnToHand); - staticText = "Return enchanted creature and {this} to their owners' hands"; - } - - public DisappearEffect(final DisappearEffect effect) { - super(effect); - } - - @Override - public DisappearEffect copy() { - return new DisappearEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent aura = game.getPermanentOrLKIBattlefield(source.getSourceId()); - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null - && aura != null - && aura.getAttachedTo() != null) { - Permanent enchantedCreature = game.getPermanent(aura.getAttachedTo()); - controller.moveCards(aura, Zone.HAND, source, game); - if (enchantedCreature != null) { - controller.moveCards(enchantedCreature, Zone.HAND, source, game); - } - return true; - } - return false; - } -} +package mage.cards.d; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author jeffwadsworth + */ +public final class Disappear extends CardImpl { + + public Disappear(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // {U}: Return enchanted creature and Disappear to their owners' hands. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DisappearEffect(), new ManaCostsImpl("{U}"))); + + } + + public Disappear(final Disappear card) { + super(card); + } + + @Override + public Disappear copy() { + return new Disappear(this); + } +} + +class DisappearEffect extends OneShotEffect { + + public DisappearEffect() { + super(Outcome.ReturnToHand); + staticText = "Return enchanted creature and {this} to their owners' hands"; + } + + public DisappearEffect(final DisappearEffect effect) { + super(effect); + } + + @Override + public DisappearEffect copy() { + return new DisappearEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent aura = game.getPermanentOrLKIBattlefield(source.getSourceId()); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null + && aura != null + && aura.getAttachedTo() != null) { + Permanent enchantedCreature = game.getPermanent(aura.getAttachedTo()); + controller.moveCards(aura, Zone.HAND, source, game); + if (enchantedCreature != null) { + controller.moveCards(enchantedCreature, Zone.HAND, source, game); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/d/DiscordantDirge.java b/Mage.Sets/src/mage/cards/d/DiscordantDirge.java index f81f8fa141b..cc5d30ea2a0 100644 --- a/Mage.Sets/src/mage/cards/d/DiscordantDirge.java +++ b/Mage.Sets/src/mage/cards/d/DiscordantDirge.java @@ -1,97 +1,97 @@ -package mage.cards.d; - -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.CardsImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.TargetCard; -import mage.target.common.TargetOpponent; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class DiscordantDirge extends CardImpl { - - public DiscordantDirge(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}"); - - // At the beginning of your upkeep, you may put a verse counter on Discordant Dirge. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, - new AddCountersSourceEffect(CounterType.VERSE.createInstance(), true), TargetController.YOU, true)); - - // {B}, Sacrifice Discordant Dirge: Look at target opponent's hand and choose up to X cards from it, where X is the number of verse counters on Discordant Dirge. That player discards those cards. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new DiscordantDirgeEffect(), - new ManaCostsImpl("{B}")); - ability.addCost(new SacrificeSourceCost()); - ability.addTarget(new TargetOpponent()); - this.addAbility(ability); - } - - private DiscordantDirge(final DiscordantDirge card) { - super(card); - } - - @Override - public DiscordantDirge copy() { - return new DiscordantDirge(this); - } -} - -class DiscordantDirgeEffect extends OneShotEffect { - - DiscordantDirgeEffect() { - super(Outcome.Benefit); - staticText = "Look at target opponent's hand and choose up to X cards from it, " + - "where X is the number of verse counters on {this}. That player discards those cards"; - } - - private DiscordantDirgeEffect(final DiscordantDirgeEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent discordantDirge = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (discordantDirge == null) { - return false; - } - int verseCounters = discordantDirge.getCounters(game).getCount(CounterType.VERSE); - Player targetOpponent = game.getPlayer(source.getFirstTarget()); - Player controller = game.getPlayer(source.getControllerId()); - if (targetOpponent == null - || controller == null) { - return false; - } - controller.lookAtCards(targetOpponent.getName() + " hand", targetOpponent.getHand(), game); - TargetCard target = new TargetCard(0, verseCounters, Zone.HAND, new FilterCard()); - target.setNotTarget(true); - if (!controller.choose(Outcome.Benefit, targetOpponent.getHand(), target, game)) { - return false; - } - targetOpponent.discard(new CardsImpl(target.getTargets()), source, game); - return true; - } - - @Override - public DiscordantDirgeEffect copy() { - return new DiscordantDirgeEffect(this); - } -} +package mage.cards.d; + +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetOpponent; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class DiscordantDirge extends CardImpl { + + public DiscordantDirge(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}"); + + // At the beginning of your upkeep, you may put a verse counter on Discordant Dirge. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, + new AddCountersSourceEffect(CounterType.VERSE.createInstance(), true), TargetController.YOU, true)); + + // {B}, Sacrifice Discordant Dirge: Look at target opponent's hand and choose up to X cards from it, where X is the number of verse counters on Discordant Dirge. That player discards those cards. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + new DiscordantDirgeEffect(), + new ManaCostsImpl("{B}")); + ability.addCost(new SacrificeSourceCost()); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + } + + private DiscordantDirge(final DiscordantDirge card) { + super(card); + } + + @Override + public DiscordantDirge copy() { + return new DiscordantDirge(this); + } +} + +class DiscordantDirgeEffect extends OneShotEffect { + + DiscordantDirgeEffect() { + super(Outcome.Benefit); + staticText = "Look at target opponent's hand and choose up to X cards from it, " + + "where X is the number of verse counters on {this}. That player discards those cards"; + } + + private DiscordantDirgeEffect(final DiscordantDirgeEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent discordantDirge = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (discordantDirge == null) { + return false; + } + int verseCounters = discordantDirge.getCounters(game).getCount(CounterType.VERSE); + Player targetOpponent = game.getPlayer(source.getFirstTarget()); + Player controller = game.getPlayer(source.getControllerId()); + if (targetOpponent == null + || controller == null) { + return false; + } + controller.lookAtCards(targetOpponent.getName() + " hand", targetOpponent.getHand(), game); + TargetCard target = new TargetCard(0, verseCounters, Zone.HAND, new FilterCard()); + target.setNotTarget(true); + if (!controller.choose(Outcome.Benefit, targetOpponent.getHand(), target, game)) { + return false; + } + targetOpponent.discard(new CardsImpl(target.getTargets()), source, game); + return true; + } + + @Override + public DiscordantDirgeEffect copy() { + return new DiscordantDirgeEffect(this); + } +} diff --git a/Mage.Sets/src/mage/cards/d/DiseasedVermin.java b/Mage.Sets/src/mage/cards/d/DiseasedVermin.java index 8cb88d9f1bb..b9d61ec3ffa 100644 --- a/Mage.Sets/src/mage/cards/d/DiseasedVermin.java +++ b/Mage.Sets/src/mage/cards/d/DiseasedVermin.java @@ -1,155 +1,155 @@ -package mage.cards.d; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.WatcherScope; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.filter.FilterOpponent; -import mage.filter.predicate.ObjectSourcePlayer; -import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.TargetPlayer; -import mage.watchers.Watcher; - -/** - * - * @author jeffwadsworth - */ -public final class DiseasedVermin extends CardImpl { - - public DiseasedVermin(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); - - this.subtype.add(SubType.RAT); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - - // Whenever Diseased Vermin deals combat damage to a player, put an infection counter on it. - this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( - new AddCountersSourceEffect( - CounterType.INFECTION.createInstance()), - false)); - - // At the beginning of your upkeep, Diseased Vermin deals X damage to target opponent previously dealt damage by it, where X is the number of infection counters on it. - Ability ability = new BeginningOfUpkeepTriggeredAbility( - Zone.BATTLEFIELD, - new DiseasedVerminEffect(), - TargetController.YOU, - false); - ability.addWatcher(new DiseasedVerminWatcher()); - this.addAbility(ability); - - } - - private DiseasedVermin(final DiseasedVermin card) { - super(card); - } - - @Override - public DiseasedVermin copy() { - return new DiseasedVermin(this); - } -} - -class DiseasedVerminEffect extends OneShotEffect { - - static final FilterOpponent filter = new FilterOpponent("player previously dealt damage by {this}"); - - static { - filter.add(new DiseasedVerminPredicate()); - } - - public DiseasedVerminEffect() { - super(Outcome.Benefit); - this.staticText = "{this} deals X damage to target opponent previously dealt damage by it, where X is the number of infection counters on it"; - } - - public DiseasedVerminEffect(final DiseasedVerminEffect effect) { - super(effect); - } - - @Override - public DiseasedVerminEffect copy() { - return new DiseasedVerminEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent sourcePermanent = game.getPermanent(source.getSourceId()); - if (sourcePermanent != null - && controller != null) { - TargetPlayer targetOpponent = new TargetPlayer(1, 1, false, filter); - if (targetOpponent.canChoose(controller.getId(), game) - && controller.choose(Outcome.Damage, targetOpponent, source.getSourceId(), game)) { - Player opponent = game.getPlayer(targetOpponent.getFirstTarget()); - if (opponent != null - && sourcePermanent.getCounters(game).getCount(CounterType.INFECTION) > 0) { - opponent.damage( - sourcePermanent.getCounters(game).getCount(CounterType.INFECTION), - source.getSourceId(), game, false, true); - return true; - } - } - } - return false; - } -} - -class DiseasedVerminPredicate implements ObjectSourcePlayerPredicate> { - - @Override - public boolean apply(ObjectSourcePlayer input, Game game) { - DiseasedVerminWatcher watcher = game.getState().getWatcher(DiseasedVerminWatcher.class); - if (watcher != null) { - return watcher.hasSourceDoneDamage(input.getObject().getId(), game); - } - return false; - } - - @Override - public String toString() { - return "(Player previously dealt damage by {source})"; - } -} - -class DiseasedVerminWatcher extends Watcher { - - // does not reset!! - private final Set damagedPlayers; - - public DiseasedVerminWatcher() { - super(WatcherScope.GAME); - damagedPlayers = new HashSet<>(); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == EventType.DAMAGED_PLAYER - && event.getSourceId() == sourceId) { - damagedPlayers.add(event.getTargetId()); - } - } - - public boolean hasSourceDoneDamage(UUID playerId, Game game) { - return damagedPlayers.contains(playerId); - } -} +package mage.cards.d; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.WatcherScope; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.FilterOpponent; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPlayer; +import mage.watchers.Watcher; + +/** + * + * @author jeffwadsworth + */ +public final class DiseasedVermin extends CardImpl { + + public DiseasedVermin(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + + this.subtype.add(SubType.RAT); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Whenever Diseased Vermin deals combat damage to a player, put an infection counter on it. + this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility( + new AddCountersSourceEffect( + CounterType.INFECTION.createInstance()), + false)); + + // At the beginning of your upkeep, Diseased Vermin deals X damage to target opponent previously dealt damage by it, where X is the number of infection counters on it. + Ability ability = new BeginningOfUpkeepTriggeredAbility( + Zone.BATTLEFIELD, + new DiseasedVerminEffect(), + TargetController.YOU, + false); + ability.addWatcher(new DiseasedVerminWatcher()); + this.addAbility(ability); + + } + + private DiseasedVermin(final DiseasedVermin card) { + super(card); + } + + @Override + public DiseasedVermin copy() { + return new DiseasedVermin(this); + } +} + +class DiseasedVerminEffect extends OneShotEffect { + + static final FilterOpponent filter = new FilterOpponent("player previously dealt damage by {this}"); + + static { + filter.add(new DiseasedVerminPredicate()); + } + + public DiseasedVerminEffect() { + super(Outcome.Benefit); + this.staticText = "{this} deals X damage to target opponent previously dealt damage by it, where X is the number of infection counters on it"; + } + + public DiseasedVerminEffect(final DiseasedVerminEffect effect) { + super(effect); + } + + @Override + public DiseasedVerminEffect copy() { + return new DiseasedVerminEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent sourcePermanent = game.getPermanent(source.getSourceId()); + if (sourcePermanent != null + && controller != null) { + TargetPlayer targetOpponent = new TargetPlayer(1, 1, false, filter); + if (targetOpponent.canChoose(controller.getId(), game) + && controller.choose(Outcome.Damage, targetOpponent, source.getSourceId(), game)) { + Player opponent = game.getPlayer(targetOpponent.getFirstTarget()); + if (opponent != null + && sourcePermanent.getCounters(game).getCount(CounterType.INFECTION) > 0) { + opponent.damage( + sourcePermanent.getCounters(game).getCount(CounterType.INFECTION), + source.getSourceId(), game, false, true); + return true; + } + } + } + return false; + } +} + +class DiseasedVerminPredicate implements ObjectSourcePlayerPredicate> { + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + DiseasedVerminWatcher watcher = game.getState().getWatcher(DiseasedVerminWatcher.class); + if (watcher != null) { + return watcher.hasSourceDoneDamage(input.getObject().getId(), game); + } + return false; + } + + @Override + public String toString() { + return "(Player previously dealt damage by {source})"; + } +} + +class DiseasedVerminWatcher extends Watcher { + + // does not reset!! + private final Set damagedPlayers; + + public DiseasedVerminWatcher() { + super(WatcherScope.GAME); + damagedPlayers = new HashSet<>(); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == EventType.DAMAGED_PLAYER + && event.getSourceId() == sourceId) { + damagedPlayers.add(event.getTargetId()); + } + } + + public boolean hasSourceDoneDamage(UUID playerId, Game game) { + return damagedPlayers.contains(playerId); + } +} diff --git a/Mage.Sets/src/mage/cards/d/DizzyingGaze.java b/Mage.Sets/src/mage/cards/d/DizzyingGaze.java index 83f24c04ec2..38ab4fa84e7 100644 --- a/Mage.Sets/src/mage/cards/d/DizzyingGaze.java +++ b/Mage.Sets/src/mage/cards/d/DizzyingGaze.java @@ -1,71 +1,71 @@ -package mage.cards.d; - -import java.util.UUID; -import mage.constants.SubType; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.constants.Outcome; -import mage.abilities.keyword.EnchantAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.AbilityPredicate; -import mage.target.TargetPermanent; -import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; - -/** - * - * @author jeffwadsworth - */ -public final class DizzyingGaze extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("with flying"); - - static { - filter.add(new AbilityPredicate(FlyingAbility.class)); - } - - public DizzyingGaze(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature you control - TargetPermanent auraTarget = new TargetControlledCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // {R}: Enchanted creature deals 1 damage to target creature with flying. - Ability ability2 = new SimpleActivatedAbility(new DamageTargetEffect(1), new ManaCostsImpl("{R}")); - ability2.addTarget(new TargetCreaturePermanent(filter)); - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, - new GainAbilityAttachedEffect( - ability2, - AttachmentType.AURA, - Duration.WhileOnBattlefield))); - - } - - public DizzyingGaze(final DizzyingGaze card) { - super(card); - } - - @Override - public DizzyingGaze copy() { - return new DizzyingGaze(this); - } -} +package mage.cards.d; + +import java.util.UUID; +import mage.constants.SubType; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.constants.Outcome; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.target.TargetPermanent; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public final class DizzyingGaze extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("with flying"); + + static { + filter.add(new AbilityPredicate(FlyingAbility.class)); + } + + public DizzyingGaze(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature you control + TargetPermanent auraTarget = new TargetControlledCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // {R}: Enchanted creature deals 1 damage to target creature with flying. + Ability ability2 = new SimpleActivatedAbility(new DamageTargetEffect(1), new ManaCostsImpl("{R}")); + ability2.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(new SimpleStaticAbility( + Zone.BATTLEFIELD, + new GainAbilityAttachedEffect( + ability2, + AttachmentType.AURA, + Duration.WhileOnBattlefield))); + + } + + public DizzyingGaze(final DizzyingGaze card) { + super(card); + } + + @Override + public DizzyingGaze copy() { + return new DizzyingGaze(this); + } +} diff --git a/Mage.Sets/src/mage/cards/d/DreadWight.java b/Mage.Sets/src/mage/cards/d/DreadWight.java index e3225c405f5..9d7ace6d788 100644 --- a/Mage.Sets/src/mage/cards/d/DreadWight.java +++ b/Mage.Sets/src/mage/cards/d/DreadWight.java @@ -1,233 +1,233 @@ -package mage.cards.d; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; -import mage.abilities.condition.Condition; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.ContinuousRuleModifyingEffect; -import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; -import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; -import mage.abilities.effects.common.counter.AddCountersTargetEffect; -import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author jeffwadsworth - */ -public final class DreadWight extends CardImpl { - - public DreadWight(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); - - this.subtype.add(SubType.ZOMBIE); - this.power = new MageInt(3); - this.toughness = new MageInt(4); - - // At end of combat, put a paralyzation counter on each creature blocking or blocked by Dread Wight and tap those creatures. Each of those creatures doesn't untap during its controller's untap step for as long as it has a paralyzation counter on it. Each of those creatures gains "{4}: Remove a paralyzation counter from this creature." - this.addAbility(new DreadWightTriggeredAbility( - new CreateDelayedTriggeredAbilityEffect( - new AtTheEndOfCombatDelayedTriggeredAbility( - new DreadWightEffect())))); - - } - - public DreadWight(final DreadWight card) { - super(card); - } - - @Override - public DreadWight copy() { - return new DreadWight(this); - } -} - -class DreadWightTriggeredAbility extends TriggeredAbilityImpl { - - DreadWightTriggeredAbility(Effect effect) { - super(Zone.BATTLEFIELD, effect); - this.usesStack = false; - } - - DreadWightTriggeredAbility(final DreadWightTriggeredAbility ability) { - super(ability); - } - - @Override - public DreadWightTriggeredAbility copy() { - return new DreadWightTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return (event.getType() == EventType.BLOCKER_DECLARED); - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getSourceId().equals(getSourceId())) { // Dread Wight is the blocker - getAllEffects().setTargetPointer(new FixedTarget(event.getTargetId())); - return true; - } - if (event.getTargetId().equals(getSourceId())) { // Dread Wight is the attacker - getAllEffects().setTargetPointer(new FixedTarget(event.getSourceId())); - return true; - } - return false; - } - -} - -class DreadWightEffect extends OneShotEffect { - - String rule = "doesn't untap during its controller's untap step for as long as it has a paralyzation counter on it."; - - public DreadWightEffect() { - super(Outcome.Detriment); - this.staticText = "put a paralyzation counter on each creature blocking or blocked by {this} and tap those creatures. " - + "Each of those creatures doesn't untap during its controller's untap step for as long as it has a paralyzation counter on it. " - + "Each of those creatures gains \"{4}: Remove a paralyzation counter from this creature.\""; - } - - public DreadWightEffect(final DreadWightEffect effect) { - super(effect); - } - - @Override - public DreadWightEffect copy() { - return new DreadWightEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); - if (permanent != null) { - // add paralyzation counter - Effect effect = new AddCountersTargetEffect(CounterType.PARALYZATION.createInstance()); - effect.setTargetPointer(new FixedTarget(permanent.getId())); - effect.apply(game, source); - // tap permanent - permanent.tap(game); - // does not untap while paralyzation counter is on it - ContinuousRuleModifyingEffect effect2 = new DreadWightDoNotUntapEffect( - Duration.WhileOnBattlefield, - permanent.getId()); - effect2.setText("This creature doesn't untap during its controller's untap step for as long as it has a paralyzation counter on it"); - Condition condition = new DreadWightCounterCondition(permanent.getId()); - ConditionalContinuousRuleModifyingEffect conditionalEffect = new ConditionalContinuousRuleModifyingEffect( - effect2, - condition); - Ability ability = new SimpleStaticAbility( - Zone.BATTLEFIELD, - conditionalEffect); - ContinuousEffect effect3 = new GainAbilityTargetEffect( - ability, - Duration.WhileOnBattlefield); - ability.setRuleVisible(true); - effect3.setTargetPointer(new FixedTarget(permanent.getId())); - game.addEffect(effect3, source); - // each gains 4: remove paralyzation counter - Ability activatedAbility = new SimpleActivatedAbility( - Zone.BATTLEFIELD, - new RemoveCounterSourceEffect(CounterType.PARALYZATION.createInstance()), - new ManaCostsImpl("{4}")); - ContinuousEffect effect4 = new GainAbilityTargetEffect( - activatedAbility, - Duration.WhileOnBattlefield); - effect4.setTargetPointer(new FixedTarget(permanent.getId())); - game.addEffect(effect4, source); - return true; - } - return false; - } -} - -class DreadWightDoNotUntapEffect extends ContinuousRuleModifyingEffectImpl { - - UUID permanentId; - - public DreadWightDoNotUntapEffect(Duration duration, UUID permanentId) { - super(duration, Outcome.Detriment); - this.permanentId = permanentId; - } - - public DreadWightDoNotUntapEffect(final DreadWightDoNotUntapEffect effect) { - super(effect); - this.permanentId = effect.permanentId; - } - - @Override - public DreadWightDoNotUntapEffect copy() { - return new DreadWightDoNotUntapEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public String getInfoMessage(Ability source, GameEvent event, Game game) { - Permanent permanentToUntap = game.getPermanent((event.getTargetId())); - if (permanentToUntap != null) { - return permanentToUntap.getLogName() + " doesn't untap."; - } - return null; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.UNTAP; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - return event.getTargetId() == permanentId - && game.isActivePlayer(game.getPermanent(permanentId).getControllerId()); - } -} - -class DreadWightCounterCondition implements Condition { - - UUID permanentId; - - public DreadWightCounterCondition(UUID permanentId) { - this.permanentId = permanentId; - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(permanentId); - if (permanent != null) { - return permanent.getCounters(game).getCount(CounterType.PARALYZATION) > 0; - } - return false; - } - - @Override - public String toString() { - return "has counter on it"; - } -} +package mage.cards.d; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.ContinuousRuleModifyingEffect; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public final class DreadWight extends CardImpl { + + public DreadWight(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + + this.subtype.add(SubType.ZOMBIE); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // At end of combat, put a paralyzation counter on each creature blocking or blocked by Dread Wight and tap those creatures. Each of those creatures doesn't untap during its controller's untap step for as long as it has a paralyzation counter on it. Each of those creatures gains "{4}: Remove a paralyzation counter from this creature." + this.addAbility(new DreadWightTriggeredAbility( + new CreateDelayedTriggeredAbilityEffect( + new AtTheEndOfCombatDelayedTriggeredAbility( + new DreadWightEffect())))); + + } + + public DreadWight(final DreadWight card) { + super(card); + } + + @Override + public DreadWight copy() { + return new DreadWight(this); + } +} + +class DreadWightTriggeredAbility extends TriggeredAbilityImpl { + + DreadWightTriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect); + this.usesStack = false; + } + + DreadWightTriggeredAbility(final DreadWightTriggeredAbility ability) { + super(ability); + } + + @Override + public DreadWightTriggeredAbility copy() { + return new DreadWightTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return (event.getType() == EventType.BLOCKER_DECLARED); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getSourceId().equals(getSourceId())) { // Dread Wight is the blocker + getAllEffects().setTargetPointer(new FixedTarget(event.getTargetId())); + return true; + } + if (event.getTargetId().equals(getSourceId())) { // Dread Wight is the attacker + getAllEffects().setTargetPointer(new FixedTarget(event.getSourceId())); + return true; + } + return false; + } + +} + +class DreadWightEffect extends OneShotEffect { + + String rule = "doesn't untap during its controller's untap step for as long as it has a paralyzation counter on it."; + + public DreadWightEffect() { + super(Outcome.Detriment); + this.staticText = "put a paralyzation counter on each creature blocking or blocked by {this} and tap those creatures. " + + "Each of those creatures doesn't untap during its controller's untap step for as long as it has a paralyzation counter on it. " + + "Each of those creatures gains \"{4}: Remove a paralyzation counter from this creature.\""; + } + + public DreadWightEffect(final DreadWightEffect effect) { + super(effect); + } + + @Override + public DreadWightEffect copy() { + return new DreadWightEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); + if (permanent != null) { + // add paralyzation counter + Effect effect = new AddCountersTargetEffect(CounterType.PARALYZATION.createInstance()); + effect.setTargetPointer(new FixedTarget(permanent.getId())); + effect.apply(game, source); + // tap permanent + permanent.tap(game); + // does not untap while paralyzation counter is on it + ContinuousRuleModifyingEffect effect2 = new DreadWightDoNotUntapEffect( + Duration.WhileOnBattlefield, + permanent.getId()); + effect2.setText("This creature doesn't untap during its controller's untap step for as long as it has a paralyzation counter on it"); + Condition condition = new DreadWightCounterCondition(permanent.getId()); + ConditionalContinuousRuleModifyingEffect conditionalEffect = new ConditionalContinuousRuleModifyingEffect( + effect2, + condition); + Ability ability = new SimpleStaticAbility( + Zone.BATTLEFIELD, + conditionalEffect); + ContinuousEffect effect3 = new GainAbilityTargetEffect( + ability, + Duration.WhileOnBattlefield); + ability.setRuleVisible(true); + effect3.setTargetPointer(new FixedTarget(permanent.getId())); + game.addEffect(effect3, source); + // each gains 4: remove paralyzation counter + Ability activatedAbility = new SimpleActivatedAbility( + Zone.BATTLEFIELD, + new RemoveCounterSourceEffect(CounterType.PARALYZATION.createInstance()), + new ManaCostsImpl("{4}")); + ContinuousEffect effect4 = new GainAbilityTargetEffect( + activatedAbility, + Duration.WhileOnBattlefield); + effect4.setTargetPointer(new FixedTarget(permanent.getId())); + game.addEffect(effect4, source); + return true; + } + return false; + } +} + +class DreadWightDoNotUntapEffect extends ContinuousRuleModifyingEffectImpl { + + UUID permanentId; + + public DreadWightDoNotUntapEffect(Duration duration, UUID permanentId) { + super(duration, Outcome.Detriment); + this.permanentId = permanentId; + } + + public DreadWightDoNotUntapEffect(final DreadWightDoNotUntapEffect effect) { + super(effect); + this.permanentId = effect.permanentId; + } + + @Override + public DreadWightDoNotUntapEffect copy() { + return new DreadWightDoNotUntapEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public String getInfoMessage(Ability source, GameEvent event, Game game) { + Permanent permanentToUntap = game.getPermanent((event.getTargetId())); + if (permanentToUntap != null) { + return permanentToUntap.getLogName() + " doesn't untap."; + } + return null; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.UNTAP; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getTargetId() == permanentId + && game.isActivePlayer(game.getPermanent(permanentId).getControllerId()); + } +} + +class DreadWightCounterCondition implements Condition { + + UUID permanentId; + + public DreadWightCounterCondition(UUID permanentId) { + this.permanentId = permanentId; + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(permanentId); + if (permanent != null) { + return permanent.getCounters(game).getCount(CounterType.PARALYZATION) > 0; + } + return false; + } + + @Override + public String toString() { + return "has counter on it"; + } +} diff --git a/Mage.Sets/src/mage/cards/e/EnchantmentAlteration.java b/Mage.Sets/src/mage/cards/e/EnchantmentAlteration.java index 8b611fb6ac8..7a53b0138fd 100644 --- a/Mage.Sets/src/mage/cards/e/EnchantmentAlteration.java +++ b/Mage.Sets/src/mage/cards/e/EnchantmentAlteration.java @@ -1,144 +1,144 @@ -package mage.cards.e; - -import java.util.UUID; -import mage.MageItem; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.filter.predicate.ObjectSourcePlayer; -import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.AttachmentAttachedToCardTypePredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.stack.StackObject; -import mage.players.Player; -import mage.target.Target; -import mage.target.TargetPermanent; - -/** - * - * @author jeffwadsworth - */ -public final class EnchantmentAlteration extends CardImpl { - - private static final FilterPermanent filter = new FilterPermanent("aura attached to a creature or land"); - private static final FilterPermanent filter2 = new FilterPermanent("another target permanent that shares that type of creature or land"); - - static { - filter.add(SubType.AURA.getPredicate()); - filter.add(Predicates.or(new AttachmentAttachedToCardTypePredicate(CardType.CREATURE), - new AttachmentAttachedToCardTypePredicate(CardType.LAND))); - filter2.add(new SharesEnchantedCardTypePredicate()); - // another target permanent is handled in this predicate - } - - public EnchantmentAlteration(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}"); - - // Attach target Aura attached to a creature or land to another permanent of that type. - this.getSpellAbility().addEffect(new EnchantmentAlterationEffect()); - TargetPermanent targetAura = new TargetPermanent(filter); - this.getSpellAbility().addTarget(targetAura); - - TargetPermanent targetCreatureOrLandThatSharesTheEnchantedCardType = new TargetPermanent(filter2); - this.getSpellAbility().addTarget(targetCreatureOrLandThatSharesTheEnchantedCardType); - - } - - public EnchantmentAlteration(final EnchantmentAlteration card) { - super(card); - } - - @Override - public EnchantmentAlteration copy() { - return new EnchantmentAlteration(this); - } - -} - -class SharesEnchantedCardTypePredicate implements ObjectSourcePlayerPredicate> { - - @Override - public boolean apply(ObjectSourcePlayer input, Game game) { - StackObject source = game.getStack().getStackObject(input.getSourceId()); - Permanent auraIsAttachedToThisPermanent = null; - Permanent newPermanentToAttachAuraTo; - if (source != null) { - if (source.getStackAbility().getTargets().isEmpty() - || source.getStackAbility().getTargets().get(0).getTargets().isEmpty()) { - return true; - } - Permanent auraPermanent = game.getPermanent( - source.getStackAbility().getTargets().get(0).getTargets().get(0)); // targeted aura enchanting land or creature - if (auraPermanent != null) { - auraIsAttachedToThisPermanent = game.getPermanent(auraPermanent.getAttachedTo()); - } - if (auraIsAttachedToThisPermanent == null) { // the original permanent the aura is attached to - return false; - } - newPermanentToAttachAuraTo = game.getPermanent(input.getObject().getId()); // the new target creature or land to enchant - if (newPermanentToAttachAuraTo == auraIsAttachedToThisPermanent) { - return false; // must be another permanent - } - if (auraIsAttachedToThisPermanent.isCreature() - && newPermanentToAttachAuraTo.isCreature()) { - return true; - } - if (auraIsAttachedToThisPermanent.isLand() - && newPermanentToAttachAuraTo.isLand()) { - return true; - } - return false; - } - return true; - } - -} - -class EnchantmentAlterationEffect extends OneShotEffect { - - public EnchantmentAlterationEffect() { - super(Outcome.BoostCreature); - this.staticText = "Attach target Aura attached to a creature or land to another permanent of that type"; - } - - public EnchantmentAlterationEffect(final EnchantmentAlterationEffect effect) { - super(effect); - } - - @Override - public EnchantmentAlterationEffect copy() { - return new EnchantmentAlterationEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - Permanent aura = game.getPermanent(source.getFirstTarget()); - Permanent permanentToBeAttachedTo = game.getPermanent(source.getTargets().get(1).getFirstTarget()); - if (aura != null - && permanentToBeAttachedTo != null) { - Permanent oldPermanent = game.getPermanent(aura.getAttachedTo()); - if (oldPermanent != null - && !oldPermanent.equals(permanentToBeAttachedTo)) { - Target auraTarget = aura.getSpellAbility().getTargets().get(0); - if (!auraTarget.canTarget(permanentToBeAttachedTo.getId(), game)) { - game.informPlayers(aura.getLogName() + " was not attched to " + permanentToBeAttachedTo.getLogName() + " because it's no legal target for the aura"); - } else if (oldPermanent.removeAttachment(aura.getId(), game)) { - game.informPlayers(aura.getLogName() + " was unattached from " + oldPermanent.getLogName() + " and attached to " + permanentToBeAttachedTo.getLogName()); - permanentToBeAttachedTo.addAttachment(aura.getId(), game); - } - } - } - return true; - } - return false; - } -} +package mage.cards.e; + +import java.util.UUID; +import mage.MageItem; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AttachmentAttachedToCardTypePredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.stack.StackObject; +import mage.players.Player; +import mage.target.Target; +import mage.target.TargetPermanent; + +/** + * + * @author jeffwadsworth + */ +public final class EnchantmentAlteration extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("aura attached to a creature or land"); + private static final FilterPermanent filter2 = new FilterPermanent("another target permanent that shares that type of creature or land"); + + static { + filter.add(SubType.AURA.getPredicate()); + filter.add(Predicates.or(new AttachmentAttachedToCardTypePredicate(CardType.CREATURE), + new AttachmentAttachedToCardTypePredicate(CardType.LAND))); + filter2.add(new SharesEnchantedCardTypePredicate()); + // another target permanent is handled in this predicate + } + + public EnchantmentAlteration(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{U}"); + + // Attach target Aura attached to a creature or land to another permanent of that type. + this.getSpellAbility().addEffect(new EnchantmentAlterationEffect()); + TargetPermanent targetAura = new TargetPermanent(filter); + this.getSpellAbility().addTarget(targetAura); + + TargetPermanent targetCreatureOrLandThatSharesTheEnchantedCardType = new TargetPermanent(filter2); + this.getSpellAbility().addTarget(targetCreatureOrLandThatSharesTheEnchantedCardType); + + } + + public EnchantmentAlteration(final EnchantmentAlteration card) { + super(card); + } + + @Override + public EnchantmentAlteration copy() { + return new EnchantmentAlteration(this); + } + +} + +class SharesEnchantedCardTypePredicate implements ObjectSourcePlayerPredicate> { + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + StackObject source = game.getStack().getStackObject(input.getSourceId()); + Permanent auraIsAttachedToThisPermanent = null; + Permanent newPermanentToAttachAuraTo; + if (source != null) { + if (source.getStackAbility().getTargets().isEmpty() + || source.getStackAbility().getTargets().get(0).getTargets().isEmpty()) { + return true; + } + Permanent auraPermanent = game.getPermanent( + source.getStackAbility().getTargets().get(0).getTargets().get(0)); // targeted aura enchanting land or creature + if (auraPermanent != null) { + auraIsAttachedToThisPermanent = game.getPermanent(auraPermanent.getAttachedTo()); + } + if (auraIsAttachedToThisPermanent == null) { // the original permanent the aura is attached to + return false; + } + newPermanentToAttachAuraTo = game.getPermanent(input.getObject().getId()); // the new target creature or land to enchant + if (newPermanentToAttachAuraTo == auraIsAttachedToThisPermanent) { + return false; // must be another permanent + } + if (auraIsAttachedToThisPermanent.isCreature() + && newPermanentToAttachAuraTo.isCreature()) { + return true; + } + if (auraIsAttachedToThisPermanent.isLand() + && newPermanentToAttachAuraTo.isLand()) { + return true; + } + return false; + } + return true; + } + +} + +class EnchantmentAlterationEffect extends OneShotEffect { + + public EnchantmentAlterationEffect() { + super(Outcome.BoostCreature); + this.staticText = "Attach target Aura attached to a creature or land to another permanent of that type"; + } + + public EnchantmentAlterationEffect(final EnchantmentAlterationEffect effect) { + super(effect); + } + + @Override + public EnchantmentAlterationEffect copy() { + return new EnchantmentAlterationEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + Permanent aura = game.getPermanent(source.getFirstTarget()); + Permanent permanentToBeAttachedTo = game.getPermanent(source.getTargets().get(1).getFirstTarget()); + if (aura != null + && permanentToBeAttachedTo != null) { + Permanent oldPermanent = game.getPermanent(aura.getAttachedTo()); + if (oldPermanent != null + && !oldPermanent.equals(permanentToBeAttachedTo)) { + Target auraTarget = aura.getSpellAbility().getTargets().get(0); + if (!auraTarget.canTarget(permanentToBeAttachedTo.getId(), game)) { + game.informPlayers(aura.getLogName() + " was not attched to " + permanentToBeAttachedTo.getLogName() + " because it's no legal target for the aura"); + } else if (oldPermanent.removeAttachment(aura.getId(), game)) { + game.informPlayers(aura.getLogName() + " was unattached from " + oldPermanent.getLogName() + " and attached to " + permanentToBeAttachedTo.getLogName()); + permanentToBeAttachedTo.addAttachment(aura.getId(), game); + } + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/e/ErrantMinion.java b/Mage.Sets/src/mage/cards/e/ErrantMinion.java index 0650304ef23..f6d80ffc9ea 100644 --- a/Mage.Sets/src/mage/cards/e/ErrantMinion.java +++ b/Mage.Sets/src/mage/cards/e/ErrantMinion.java @@ -1,100 +1,100 @@ -package mage.cards.e; - -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.effects.common.PreventDamageToTargetEffect; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.TargetPermanent; -import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.FixedTarget; -import mage.util.ManaUtil; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class ErrantMinion extends CardImpl { - - public ErrantMinion(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // At the beginning of the upkeep of enchanted creature's controller, that player may pay any amount of mana. Errant Minion deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way. - this.addAbility(new BeginningOfUpkeepTriggeredAbility( - Zone.BATTLEFIELD, - new ErrantMinionEffect(), - TargetController.CONTROLLER_ATTACHED_TO, - false)); - - } - - private ErrantMinion(final ErrantMinion card) { - super(card); - } - - @Override - public ErrantMinion copy() { - return new ErrantMinion(this); - } -} - -class ErrantMinionEffect extends OneShotEffect { - - public ErrantMinionEffect() { - super(Outcome.Damage); - this.staticText = "that player may pay any amount of mana. Errant Minion deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way"; - } - - public ErrantMinionEffect(final ErrantMinionEffect effect) { - super(effect); - } - - @Override - public ErrantMinionEffect copy() { - return new ErrantMinionEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent errantMinion = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (errantMinion == null) { - return false; - } - Permanent enchantedCreature = game.getPermanentOrLKIBattlefield(errantMinion.getAttachedTo()); - if (enchantedCreature == null) { - return false; - } - Player controllerOfEnchantedCreature = game.getPlayer(enchantedCreature.getControllerId()); - if (controllerOfEnchantedCreature != null && controllerOfEnchantedCreature.canRespond()) { - int manaPaid = ManaUtil.playerPaysXGenericMana(false, "Errant Minion", controllerOfEnchantedCreature, source, game); - if (manaPaid > 0) { - PreventDamageToTargetEffect effect = new PreventDamageToTargetEffect(Duration.OneUse, manaPaid); - effect.setTargetPointer(new FixedTarget(controllerOfEnchantedCreature.getId())); - game.addEffect(effect, source); - DamageTargetEffect effect2 = new DamageTargetEffect(2); - effect2.setTargetPointer(new FixedTarget(controllerOfEnchantedCreature.getId())); - effect2.apply(game, source); - return true; - } - } - return false; - } -} +package mage.cards.e; + +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.PreventDamageToTargetEffect; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.TargetPermanent; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; +import mage.util.ManaUtil; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class ErrantMinion extends CardImpl { + + public ErrantMinion(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // At the beginning of the upkeep of enchanted creature's controller, that player may pay any amount of mana. Errant Minion deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way. + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + Zone.BATTLEFIELD, + new ErrantMinionEffect(), + TargetController.CONTROLLER_ATTACHED_TO, + false)); + + } + + private ErrantMinion(final ErrantMinion card) { + super(card); + } + + @Override + public ErrantMinion copy() { + return new ErrantMinion(this); + } +} + +class ErrantMinionEffect extends OneShotEffect { + + public ErrantMinionEffect() { + super(Outcome.Damage); + this.staticText = "that player may pay any amount of mana. Errant Minion deals 2 damage to that player. Prevent X of that damage, where X is the amount of mana that player paid this way"; + } + + public ErrantMinionEffect(final ErrantMinionEffect effect) { + super(effect); + } + + @Override + public ErrantMinionEffect copy() { + return new ErrantMinionEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent errantMinion = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (errantMinion == null) { + return false; + } + Permanent enchantedCreature = game.getPermanentOrLKIBattlefield(errantMinion.getAttachedTo()); + if (enchantedCreature == null) { + return false; + } + Player controllerOfEnchantedCreature = game.getPlayer(enchantedCreature.getControllerId()); + if (controllerOfEnchantedCreature != null && controllerOfEnchantedCreature.canRespond()) { + int manaPaid = ManaUtil.playerPaysXGenericMana(false, "Errant Minion", controllerOfEnchantedCreature, source, game); + if (manaPaid > 0) { + PreventDamageToTargetEffect effect = new PreventDamageToTargetEffect(Duration.OneUse, manaPaid); + effect.setTargetPointer(new FixedTarget(controllerOfEnchantedCreature.getId())); + game.addEffect(effect, source); + DamageTargetEffect effect2 = new DamageTargetEffect(2); + effect2.setTargetPointer(new FixedTarget(controllerOfEnchantedCreature.getId())); + effect2.apply(game, source); + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/f/FatalLore.java b/Mage.Sets/src/mage/cards/f/FatalLore.java index 24d4f8dbcb9..e551a767b3a 100644 --- a/Mage.Sets/src/mage/cards/f/FatalLore.java +++ b/Mage.Sets/src/mage/cards/f/FatalLore.java @@ -1,91 +1,91 @@ -package mage.cards.f; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.DrawCardTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.permanent.ControllerIdPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetCreaturePermanent; -import mage.target.common.TargetOpponent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author jeffwadsworth - */ -public final class FatalLore extends CardImpl { - - public FatalLore(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}{B}"); - - // An opponent chooses one - You draw three cards; or you destroy up to two target creatures that opponent controls and that player draws up to three cards. Those creatures can't be regenerated. - this.getSpellAbility().addEffect(new FatalLoreEffect()); - this.getSpellAbility().addTarget(new TargetOpponent(true)); - - } - - private FatalLore(final FatalLore card) { - super(card); - } - - @Override - public FatalLore copy() { - return new FatalLore(this); - } -} - -class FatalLoreEffect extends OneShotEffect { - - public FatalLoreEffect() { - super(Outcome.Neutral); - staticText = "An opponent chooses one - You draw three cards; or you destroy up to two target creatures that opponent controls and that player draws up to three cards. Those creatures can't be regenerated"; - } - - public FatalLoreEffect(final FatalLoreEffect effect) { - super(effect); - } - - @Override - public FatalLoreEffect copy() { - return new FatalLoreEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Player chosenOpponent = game.getPlayer(targetPointer.getFirst(game, source)); - if (controller != null - && chosenOpponent != null) { - if (chosenOpponent.chooseUse(Outcome.Neutral, "If you choose Yes, the controller draws three cards. If no, the controller gets to destroy up to two target creatures that you control and you get to draw up to 3 cards. Those creatures can't be regenerated.", source, game)) { - controller.drawCards(3, source.getSourceId(), game); - } else { - FilterCreaturePermanent filter = new FilterCreaturePermanent("chosen opponent's creature"); - filter.add(new ControllerIdPredicate(chosenOpponent.getId())); - TargetCreaturePermanent target = new TargetCreaturePermanent(0, 2, filter, false); - if (target.canChoose(controller.getId(), game) - && controller.choose(Outcome.DestroyPermanent, target, source.getSourceId(), game)) { - for (UUID targetId : target.getTargets()) { - Effect destroyCreature = new DestroyTargetEffect(true); - destroyCreature.setTargetPointer(new FixedTarget(targetId)); - destroyCreature.apply(game, source); - } - Effect opponentDrawsCards = new DrawCardTargetEffect(StaticValue.get(3), false, true); - opponentDrawsCards.setTargetPointer(new FixedTarget(chosenOpponent.getId())); - opponentDrawsCards.apply(game, source); - return true; - } - } - } - return false; - } -} +package mage.cards.f; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.DrawCardTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; +import mage.target.common.TargetOpponent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public final class FatalLore extends CardImpl { + + public FatalLore(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}{B}"); + + // An opponent chooses one - You draw three cards; or you destroy up to two target creatures that opponent controls and that player draws up to three cards. Those creatures can't be regenerated. + this.getSpellAbility().addEffect(new FatalLoreEffect()); + this.getSpellAbility().addTarget(new TargetOpponent(true)); + + } + + private FatalLore(final FatalLore card) { + super(card); + } + + @Override + public FatalLore copy() { + return new FatalLore(this); + } +} + +class FatalLoreEffect extends OneShotEffect { + + public FatalLoreEffect() { + super(Outcome.Neutral); + staticText = "An opponent chooses one - You draw three cards; or you destroy up to two target creatures that opponent controls and that player draws up to three cards. Those creatures can't be regenerated"; + } + + public FatalLoreEffect(final FatalLoreEffect effect) { + super(effect); + } + + @Override + public FatalLoreEffect copy() { + return new FatalLoreEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Player chosenOpponent = game.getPlayer(targetPointer.getFirst(game, source)); + if (controller != null + && chosenOpponent != null) { + if (chosenOpponent.chooseUse(Outcome.Neutral, "If you choose Yes, the controller draws three cards. If no, the controller gets to destroy up to two target creatures that you control and you get to draw up to 3 cards. Those creatures can't be regenerated.", source, game)) { + controller.drawCards(3, source.getSourceId(), game); + } else { + FilterCreaturePermanent filter = new FilterCreaturePermanent("chosen opponent's creature"); + filter.add(new ControllerIdPredicate(chosenOpponent.getId())); + TargetCreaturePermanent target = new TargetCreaturePermanent(0, 2, filter, false); + if (target.canChoose(controller.getId(), game) + && controller.choose(Outcome.DestroyPermanent, target, source.getSourceId(), game)) { + for (UUID targetId : target.getTargets()) { + Effect destroyCreature = new DestroyTargetEffect(true); + destroyCreature.setTargetPointer(new FixedTarget(targetId)); + destroyCreature.apply(game, source); + } + Effect opponentDrawsCards = new DrawCardTargetEffect(StaticValue.get(3), false, true); + opponentDrawsCards.setTargetPointer(new FixedTarget(chosenOpponent.getId())); + opponentDrawsCards.apply(game, source); + return true; + } + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/f/Fatigue.java b/Mage.Sets/src/mage/cards/f/Fatigue.java index 9cdd6176c33..0ddc96756ae 100644 --- a/Mage.Sets/src/mage/cards/f/Fatigue.java +++ b/Mage.Sets/src/mage/cards/f/Fatigue.java @@ -1,36 +1,36 @@ -package mage.cards.f; - -import java.util.UUID; -import mage.abilities.effects.common.SkipNextDrawStepTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.target.TargetPlayer; - -/** - * - * @author jeffwadsworth - */ -public final class Fatigue extends CardImpl { - - private static final String rule = "Target player skips their next draw step."; - - public Fatigue(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}"); - - - // Target player skips their next draw step. - this.getSpellAbility().addEffect(new SkipNextDrawStepTargetEffect().setText(rule)); - this.getSpellAbility().addTarget(new TargetPlayer()); - - } - - public Fatigue(final Fatigue card) { - super(card); - } - - @Override - public Fatigue copy() { - return new Fatigue(this); - } -} +package mage.cards.f; + +import java.util.UUID; +import mage.abilities.effects.common.SkipNextDrawStepTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.target.TargetPlayer; + +/** + * + * @author jeffwadsworth + */ +public final class Fatigue extends CardImpl { + + private static final String rule = "Target player skips their next draw step."; + + public Fatigue(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}"); + + + // Target player skips their next draw step. + this.getSpellAbility().addEffect(new SkipNextDrawStepTargetEffect().setText(rule)); + this.getSpellAbility().addTarget(new TargetPlayer()); + + } + + public Fatigue(final Fatigue card) { + super(card); + } + + @Override + public Fatigue copy() { + return new Fatigue(this); + } +} diff --git a/Mage.Sets/src/mage/cards/f/FendOff.java b/Mage.Sets/src/mage/cards/f/FendOff.java index 045d166fe7d..1061c527ccf 100644 --- a/Mage.Sets/src/mage/cards/f/FendOff.java +++ b/Mage.Sets/src/mage/cards/f/FendOff.java @@ -1,41 +1,41 @@ -package mage.cards.f; - -import java.util.UUID; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.PreventDamageByTargetEffect; -import mage.abilities.keyword.CyclingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.target.common.TargetCreaturePermanent; - -/** - * - * @author jeffwadsworth - */ -public final class FendOff extends CardImpl { - - private static final String rule = "Prevent all combat damage that would be dealt by target creature this turn."; - - public FendOff(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); - - // Prevent all combat damage that would be dealt by target creature this turn. - this.getSpellAbility().addEffect(new PreventDamageByTargetEffect(Duration.EndOfTurn, true).setText(rule)); - this.getSpellAbility().addTarget(new TargetCreaturePermanent()); - - // Cycling {2} - this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); - - } - - public FendOff(final FendOff card) { - super(card); - } - - @Override - public FendOff copy() { - return new FendOff(this); - } -} +package mage.cards.f; + +import java.util.UUID; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.PreventDamageByTargetEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public final class FendOff extends CardImpl { + + private static final String rule = "Prevent all combat damage that would be dealt by target creature this turn."; + + public FendOff(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{W}"); + + // Prevent all combat damage that would be dealt by target creature this turn. + this.getSpellAbility().addEffect(new PreventDamageByTargetEffect(Duration.EndOfTurn, true).setText(rule)); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); + + // Cycling {2} + this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); + + } + + public FendOff(final FendOff card) { + super(card); + } + + @Override + public FendOff copy() { + return new FendOff(this); + } +} diff --git a/Mage.Sets/src/mage/cards/f/FreyaliseSupplicant.java b/Mage.Sets/src/mage/cards/f/FreyaliseSupplicant.java index 3a0d18ab5c2..92d53fad916 100644 --- a/Mage.Sets/src/mage/cards/f/FreyaliseSupplicant.java +++ b/Mage.Sets/src/mage/cards/f/FreyaliseSupplicant.java @@ -1,61 +1,61 @@ -package mage.cards.f; - -import java.util.UUID; -import mage.MageInt; -import mage.ObjectColor; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.dynamicvalue.common.HalfValue; -import mage.abilities.dynamicvalue.common.SacrificeCostCreaturesPower; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.ColorPredicate; -import mage.target.common.TargetAnyTarget; -import mage.target.common.TargetControlledCreaturePermanent; - -/** - * - * @author jeffwadsworth - */ -public final class FreyaliseSupplicant extends CardImpl { - - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("red or white creature"); - - static { - filter.add(Predicates.or(new ColorPredicate(ObjectColor.RED), - new ColorPredicate(ObjectColor.WHITE))); - } - - public FreyaliseSupplicant(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); - - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.CLERIC); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - - // {tap}, Sacrifice a red or white creature: Freyalise Supplicant deals damage to any target equal to half the sacrificed creature's power, rounded down. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new HalfValue(SacrificeCostCreaturesPower.instance, false)), new TapSourceCost()); - ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(filter))); - ability.addTarget(new TargetAnyTarget()); - this.addAbility(ability); - - } - - private FreyaliseSupplicant(final FreyaliseSupplicant card) { - super(card); - } - - @Override - public FreyaliseSupplicant copy() { - return new FreyaliseSupplicant(this); - } -} +package mage.cards.f; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.dynamicvalue.common.HalfValue; +import mage.abilities.dynamicvalue.common.SacrificeCostCreaturesPower; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.common.TargetAnyTarget; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public final class FreyaliseSupplicant extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("red or white creature"); + + static { + filter.add(Predicates.or(new ColorPredicate(ObjectColor.RED), + new ColorPredicate(ObjectColor.WHITE))); + } + + public FreyaliseSupplicant(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.CLERIC); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {tap}, Sacrifice a red or white creature: Freyalise Supplicant deals damage to any target equal to half the sacrificed creature's power, rounded down. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(new HalfValue(SacrificeCostCreaturesPower.instance, false)), new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(filter))); + ability.addTarget(new TargetAnyTarget()); + this.addAbility(ability); + + } + + private FreyaliseSupplicant(final FreyaliseSupplicant card) { + super(card); + } + + @Override + public FreyaliseSupplicant copy() { + return new FreyaliseSupplicant(this); + } +} diff --git a/Mage.Sets/src/mage/cards/f/FreyalisesWinds.java b/Mage.Sets/src/mage/cards/f/FreyalisesWinds.java index 3065e087af8..1db467c4846 100644 --- a/Mage.Sets/src/mage/cards/f/FreyalisesWinds.java +++ b/Mage.Sets/src/mage/cards/f/FreyalisesWinds.java @@ -1,92 +1,92 @@ -package mage.cards.f; - -import mage.abilities.Ability; -import mage.abilities.common.BecomesTappedTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.ReplacementEffectImpl; -import mage.abilities.effects.common.counter.AddCountersTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class FreyalisesWinds extends CardImpl { - - public FreyalisesWinds(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}{G}"); - - // Whenever a permanent becomes tapped, put a wind counter on it. - Effect effect = new AddCountersTargetEffect(CounterType.WIND.createInstance()); - effect.setText("put a wind counter on it."); - this.addAbility(new BecomesTappedTriggeredAbility(effect, false, new FilterPermanent("a permanent"), true)); - - // If a permanent with a wind counter on it would untap during its controller's untap step, remove all wind counters from it instead. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new FreyalisesWindsReplacementEffect())); - - } - - private FreyalisesWinds(final FreyalisesWinds card) { - super(card); - } - - @Override - public FreyalisesWinds copy() { - return new FreyalisesWinds(this); - } -} - -class FreyalisesWindsReplacementEffect extends ReplacementEffectImpl { - - FreyalisesWindsReplacementEffect() { - super(Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "If a permanent with a wind counter on it would untap during its controller's untap step, remove all wind counters from it instead"; - } - - FreyalisesWindsReplacementEffect(final FreyalisesWindsReplacementEffect effect) { - super(effect); - } - - @Override - public FreyalisesWindsReplacementEffect copy() { - return new FreyalisesWindsReplacementEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - Permanent permanentUntapping = game.getPermanent(event.getTargetId()); - if (permanentUntapping != null) { - permanentUntapping.removeCounters(CounterType.WIND.createInstance(), game); - return true; - } - return false; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return (event.getType() == GameEvent.EventType.UNTAP - && game.getPhase().getStep().getType() == PhaseStep.UNTAP); - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - Permanent permanentUntapping = game.getPermanent(event.getTargetId()); - return (permanentUntapping != null - && event.getPlayerId().equals(permanentUntapping.getControllerId()) - && permanentUntapping.getCounters(game).getCount(CounterType.WIND) > 0); - } -} +package mage.cards.f; + +import mage.abilities.Ability; +import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class FreyalisesWinds extends CardImpl { + + public FreyalisesWinds(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}{G}"); + + // Whenever a permanent becomes tapped, put a wind counter on it. + Effect effect = new AddCountersTargetEffect(CounterType.WIND.createInstance()); + effect.setText("put a wind counter on it."); + this.addAbility(new BecomesTappedTriggeredAbility(effect, false, new FilterPermanent("a permanent"), true)); + + // If a permanent with a wind counter on it would untap during its controller's untap step, remove all wind counters from it instead. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new FreyalisesWindsReplacementEffect())); + + } + + private FreyalisesWinds(final FreyalisesWinds card) { + super(card); + } + + @Override + public FreyalisesWinds copy() { + return new FreyalisesWinds(this); + } +} + +class FreyalisesWindsReplacementEffect extends ReplacementEffectImpl { + + FreyalisesWindsReplacementEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit); + staticText = "If a permanent with a wind counter on it would untap during its controller's untap step, remove all wind counters from it instead"; + } + + FreyalisesWindsReplacementEffect(final FreyalisesWindsReplacementEffect effect) { + super(effect); + } + + @Override + public FreyalisesWindsReplacementEffect copy() { + return new FreyalisesWindsReplacementEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Permanent permanentUntapping = game.getPermanent(event.getTargetId()); + if (permanentUntapping != null) { + permanentUntapping.removeCounters(CounterType.WIND.createInstance(), game); + return true; + } + return false; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return (event.getType() == GameEvent.EventType.UNTAP + && game.getPhase().getStep().getType() == PhaseStep.UNTAP); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Permanent permanentUntapping = game.getPermanent(event.getTargetId()); + return (permanentUntapping != null + && event.getPlayerId().equals(permanentUntapping.getControllerId()) + && permanentUntapping.getCounters(game).getCount(CounterType.WIND) > 0); + } +} diff --git a/Mage.Sets/src/mage/cards/g/GarbageElementalD.java b/Mage.Sets/src/mage/cards/g/GarbageElementalD.java index e8152cc11e8..b0076f79d4b 100644 --- a/Mage.Sets/src/mage/cards/g/GarbageElementalD.java +++ b/Mage.Sets/src/mage/cards/g/GarbageElementalD.java @@ -1,80 +1,80 @@ -package mage.cards.g; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldAbility; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.keyword.CascadeAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetOpponent; - -/** - * - * @author spjspj - */ -public final class GarbageElementalD extends CardImpl { - - public GarbageElementalD(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}"); - - this.subtype.add(SubType.ELEMENTAL); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - - // Cascade - this.addAbility(new CascadeAbility()); - - // When Garbage Elemental enters the battlefield, roll a six-sided die. Garbage Elemental deals damage equal to the result to target opponent. - Ability ability = new EntersBattlefieldAbility(new GarbageElementalDEffect(), - null, - "When {this} enters the battlefield, roll a six-sided die. {this} deals damage equal to the result to target opponent", - null); - ability.addTarget(new TargetOpponent()); - this.addAbility(ability); - - } - - public GarbageElementalD(final GarbageElementalD card) { - super(card); - } - - @Override - public GarbageElementalD copy() { - return new GarbageElementalD(this); - } -} - -class GarbageElementalDEffect extends OneShotEffect { - - GarbageElementalDEffect() { - super(Outcome.Benefit); - this.staticText = "roll a six-sided die. {this} deals damage equal to the result to target opponent"; - } - - GarbageElementalDEffect(final GarbageElementalDEffect effect) { - super(effect); - } - - @Override - public GarbageElementalDEffect copy() { - return new GarbageElementalDEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Player opponent = game.getPlayer(source.getFirstTarget()); - if (controller != null && opponent != null) { - int damage = controller.rollDice(game, 6); - return game.damagePlayerOrPlaneswalker(opponent.getId(), damage, source.getId(), game, false, true) > 0; - } - return false; - } -} +package mage.cards.g; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.CascadeAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author spjspj + */ +public final class GarbageElementalD extends CardImpl { + + public GarbageElementalD(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{R}"); + + this.subtype.add(SubType.ELEMENTAL); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Cascade + this.addAbility(new CascadeAbility()); + + // When Garbage Elemental enters the battlefield, roll a six-sided die. Garbage Elemental deals damage equal to the result to target opponent. + Ability ability = new EntersBattlefieldAbility(new GarbageElementalDEffect(), + null, + "When {this} enters the battlefield, roll a six-sided die. {this} deals damage equal to the result to target opponent", + null); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + + } + + public GarbageElementalD(final GarbageElementalD card) { + super(card); + } + + @Override + public GarbageElementalD copy() { + return new GarbageElementalD(this); + } +} + +class GarbageElementalDEffect extends OneShotEffect { + + GarbageElementalDEffect() { + super(Outcome.Benefit); + this.staticText = "roll a six-sided die. {this} deals damage equal to the result to target opponent"; + } + + GarbageElementalDEffect(final GarbageElementalDEffect effect) { + super(effect); + } + + @Override + public GarbageElementalDEffect copy() { + return new GarbageElementalDEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Player opponent = game.getPlayer(source.getFirstTarget()); + if (controller != null && opponent != null) { + int damage = controller.rollDice(game, 6); + return game.damagePlayerOrPlaneswalker(opponent.getId(), damage, source.getId(), game, false, true) > 0; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/g/GazeOfPain.java b/Mage.Sets/src/mage/cards/g/GazeOfPain.java index 139cb07c2cb..d442ab3c870 100644 --- a/Mage.Sets/src/mage/cards/g/GazeOfPain.java +++ b/Mage.Sets/src/mage/cards/g/GazeOfPain.java @@ -1,188 +1,188 @@ -package mage.cards.g; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.ReplacementEffectImpl; -import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.combat.CombatGroup; -import mage.game.events.DamageEvent; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetCreaturePermanent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author jeffwadsworth - */ -public final class GazeOfPain extends CardImpl { - - public GazeOfPain(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}"); - - // Until end of turn, whenever a creature you control attacks and isn't blocked, you may choose to have it deal damage equal to its power to a target creature. If you do, it assigns no combat damage this turn. - this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new GazeOfPainDelayedTriggeredAbility())); - } - - public GazeOfPain(final GazeOfPain card) { - super(card); - } - - @Override - public GazeOfPain copy() { - return new GazeOfPain(this); - } -} - -class GazeOfPainDelayedTriggeredAbility extends DelayedTriggeredAbility { - - Set creatures = new HashSet<>(); - - public GazeOfPainDelayedTriggeredAbility() { - super(new GazeOfPainEffect(), Duration.EndOfTurn, false, true); - } - - public GazeOfPainDelayedTriggeredAbility(GazeOfPainDelayedTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DECLARE_BLOCKERS_STEP; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - for (CombatGroup combatGroup : game.getCombat().getGroups()) { - if (combatGroup.getBlockers().isEmpty()) { - for (UUID attackerId : combatGroup.getAttackers()) { - if (game.getPermanent(attackerId).getControllerId() == controllerId - && game.getPermanent(attackerId).isAttacking()) { - creatures.add(attackerId); - } - } - } - } - if (!creatures.isEmpty()) { - game.getState().setValue("gazeOfPain", creatures); - return true; - } - return false; - } - - @Override - public GazeOfPainDelayedTriggeredAbility copy() { - return new GazeOfPainDelayedTriggeredAbility(this); - } - - @Override - public String getRule() { - return "Until end of turn, whenever a creature you control attacks and isn't blocked, " + super.getRule(); - } -} - -class GazeOfPainEffect extends OneShotEffect { - - Set creatures = new HashSet<>(); - - GazeOfPainEffect() { - super(Outcome.Benefit); - this.staticText = "you may choose to have it deal damage equal to its power to a target creature. If you do, it assigns no combat damage this turn."; - } - - GazeOfPainEffect(final GazeOfPainEffect effect) { - super(effect); - } - - @Override - public GazeOfPainEffect copy() { - return new GazeOfPainEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - creatures = (Set) game.getState().getValue("gazeOfPain"); - if (!creatures.isEmpty()) { - for (UUID attackerId : creatures) { - Permanent attacker = game.getPermanent(attackerId); - if (controller != null - && attacker != null) { - if (controller.chooseUse(outcome, "Do you wish to deal damage equal to " + attacker.getName() + "'s power to a target creature?", source, game)) { - TargetCreaturePermanent target = new TargetCreaturePermanent(); - if (target.canChoose(controller.getId(), game) - && controller.choose(Outcome.Detriment, target, source.getSourceId(), game)) { - Effect effect = new DamageTargetEffect(attacker.getPower().getValue()); - effect.setTargetPointer(new FixedTarget(target.getFirstTarget())); - effect.apply(game, source); - ContinuousEffect effect2 = new AssignNoCombatDamageTargetEffect(); - effect2.setTargetPointer(new FixedTarget(attackerId)); - game.addEffect(effect2, source); - } - } - } - } - return true; - } - return false; - } -} - -class AssignNoCombatDamageTargetEffect extends ReplacementEffectImpl { - - public AssignNoCombatDamageTargetEffect() { - super(Duration.EndOfTurn, Outcome.Neutral); - } - - public AssignNoCombatDamageTargetEffect(final AssignNoCombatDamageTargetEffect effect) { - super(effect); - } - - @Override - public AssignNoCombatDamageTargetEffect copy() { - return new AssignNoCombatDamageTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - switch (event.getType()) { - case DAMAGE_CREATURE: - case DAMAGE_PLAYER: - case DAMAGE_PLANESWALKER: - return true; - default: - return false; - } - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - DamageEvent damageEvent = (DamageEvent) event; - return event.getSourceId().equals(targetPointer.getFirst(game, source)) - && damageEvent.isCombatDamage(); - } -} +package mage.cards.g; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.combat.CombatGroup; +import mage.game.events.DamageEvent; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public final class GazeOfPain extends CardImpl { + + public GazeOfPain(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}"); + + // Until end of turn, whenever a creature you control attacks and isn't blocked, you may choose to have it deal damage equal to its power to a target creature. If you do, it assigns no combat damage this turn. + this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new GazeOfPainDelayedTriggeredAbility())); + } + + public GazeOfPain(final GazeOfPain card) { + super(card); + } + + @Override + public GazeOfPain copy() { + return new GazeOfPain(this); + } +} + +class GazeOfPainDelayedTriggeredAbility extends DelayedTriggeredAbility { + + Set creatures = new HashSet<>(); + + public GazeOfPainDelayedTriggeredAbility() { + super(new GazeOfPainEffect(), Duration.EndOfTurn, false, true); + } + + public GazeOfPainDelayedTriggeredAbility(GazeOfPainDelayedTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DECLARE_BLOCKERS_STEP; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + for (CombatGroup combatGroup : game.getCombat().getGroups()) { + if (combatGroup.getBlockers().isEmpty()) { + for (UUID attackerId : combatGroup.getAttackers()) { + if (game.getPermanent(attackerId).getControllerId() == controllerId + && game.getPermanent(attackerId).isAttacking()) { + creatures.add(attackerId); + } + } + } + } + if (!creatures.isEmpty()) { + game.getState().setValue("gazeOfPain", creatures); + return true; + } + return false; + } + + @Override + public GazeOfPainDelayedTriggeredAbility copy() { + return new GazeOfPainDelayedTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Until end of turn, whenever a creature you control attacks and isn't blocked, " + super.getRule(); + } +} + +class GazeOfPainEffect extends OneShotEffect { + + Set creatures = new HashSet<>(); + + GazeOfPainEffect() { + super(Outcome.Benefit); + this.staticText = "you may choose to have it deal damage equal to its power to a target creature. If you do, it assigns no combat damage this turn."; + } + + GazeOfPainEffect(final GazeOfPainEffect effect) { + super(effect); + } + + @Override + public GazeOfPainEffect copy() { + return new GazeOfPainEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + creatures = (Set) game.getState().getValue("gazeOfPain"); + if (!creatures.isEmpty()) { + for (UUID attackerId : creatures) { + Permanent attacker = game.getPermanent(attackerId); + if (controller != null + && attacker != null) { + if (controller.chooseUse(outcome, "Do you wish to deal damage equal to " + attacker.getName() + "'s power to a target creature?", source, game)) { + TargetCreaturePermanent target = new TargetCreaturePermanent(); + if (target.canChoose(controller.getId(), game) + && controller.choose(Outcome.Detriment, target, source.getSourceId(), game)) { + Effect effect = new DamageTargetEffect(attacker.getPower().getValue()); + effect.setTargetPointer(new FixedTarget(target.getFirstTarget())); + effect.apply(game, source); + ContinuousEffect effect2 = new AssignNoCombatDamageTargetEffect(); + effect2.setTargetPointer(new FixedTarget(attackerId)); + game.addEffect(effect2, source); + } + } + } + } + return true; + } + return false; + } +} + +class AssignNoCombatDamageTargetEffect extends ReplacementEffectImpl { + + public AssignNoCombatDamageTargetEffect() { + super(Duration.EndOfTurn, Outcome.Neutral); + } + + public AssignNoCombatDamageTargetEffect(final AssignNoCombatDamageTargetEffect effect) { + super(effect); + } + + @Override + public AssignNoCombatDamageTargetEffect copy() { + return new AssignNoCombatDamageTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + switch (event.getType()) { + case DAMAGE_CREATURE: + case DAMAGE_PLAYER: + case DAMAGE_PLANESWALKER: + return true; + default: + return false; + } + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + DamageEvent damageEvent = (DamageEvent) event; + return event.getSourceId().equals(targetPointer.getFirst(game, source)) + && damageEvent.isCombatDamage(); + } +} diff --git a/Mage.Sets/src/mage/cards/g/Grollub.java b/Mage.Sets/src/mage/cards/g/Grollub.java index 2bab76463ac..d5414ff62ed 100644 --- a/Mage.Sets/src/mage/cards/g/Grollub.java +++ b/Mage.Sets/src/mage/cards/g/Grollub.java @@ -1,70 +1,70 @@ -package mage.cards.g; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.DealtDamageToSourceTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.game.Game; - -/** - * - * @author jeffwadsworth - */ -public final class Grollub extends CardImpl { - - public Grollub(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); - - this.subtype.add(SubType.BEAST); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - - // Whenever Grollub is dealt damage, each opponent gains that much life. - this.addAbility(new DealtDamageToSourceTriggeredAbility( - new EachOpponentGainsLifeEffect(), false, false, true)); - - } - - public Grollub(final Grollub card) { - super(card); - } - - @Override - public Grollub copy() { - return new Grollub(this); - } -} - -class EachOpponentGainsLifeEffect extends OneShotEffect { - - public EachOpponentGainsLifeEffect() { - super(Outcome.Neutral); - this.staticText = "each opponent gains that much life"; - } - - public EachOpponentGainsLifeEffect(final EachOpponentGainsLifeEffect effect) { - super(effect); - } - - @Override - public EachOpponentGainsLifeEffect copy() { - return new EachOpponentGainsLifeEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - game.getOpponents(source.getControllerId()).stream().map((opponentId) -> game.getPlayer(opponentId)).filter((opponent) -> (opponent != null)).forEachOrdered((opponent) -> { - int amount = (Integer) getValue("damage"); - if (amount > 0) { - opponent.gainLife(amount, game, source); - } - }); - return true; - } -} +package mage.cards.g; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.DealtDamageToSourceTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.game.Game; + +/** + * + * @author jeffwadsworth + */ +public final class Grollub extends CardImpl { + + public Grollub(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + + this.subtype.add(SubType.BEAST); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Whenever Grollub is dealt damage, each opponent gains that much life. + this.addAbility(new DealtDamageToSourceTriggeredAbility( + new EachOpponentGainsLifeEffect(), false, false, true)); + + } + + public Grollub(final Grollub card) { + super(card); + } + + @Override + public Grollub copy() { + return new Grollub(this); + } +} + +class EachOpponentGainsLifeEffect extends OneShotEffect { + + public EachOpponentGainsLifeEffect() { + super(Outcome.Neutral); + this.staticText = "each opponent gains that much life"; + } + + public EachOpponentGainsLifeEffect(final EachOpponentGainsLifeEffect effect) { + super(effect); + } + + @Override + public EachOpponentGainsLifeEffect copy() { + return new EachOpponentGainsLifeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + game.getOpponents(source.getControllerId()).stream().map((opponentId) -> game.getPlayer(opponentId)).filter((opponent) -> (opponent != null)).forEachOrdered((opponent) -> { + int amount = (Integer) getValue("damage"); + if (amount > 0) { + opponent.gainLife(amount, game, source); + } + }); + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/h/HiddenPredators.java b/Mage.Sets/src/mage/cards/h/HiddenPredators.java index c483339629e..7f21ddab910 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenPredators.java +++ b/Mage.Sets/src/mage/cards/h/HiddenPredators.java @@ -1,124 +1,124 @@ -package mage.cards.h; - -import mage.MageInt; -import mage.abilities.StateTriggeredAbility; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.PowerPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.token.TokenImpl; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class HiddenPredators extends CardImpl { - - public HiddenPredators(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}"); - - // When an opponent controls a creature with power 4 or greater, if Hidden Predators is an enchantment, Hidden Predators becomes a 4/4 Beast creature. - this.addAbility(new HiddenPredatorsStateTriggeredAbility()); - } - - public HiddenPredators(final HiddenPredators card) { - super(card); - } - - @Override - public HiddenPredators copy() { - return new HiddenPredators(this); - } -} - -class HiddenPredatorsStateTriggeredAbility extends StateTriggeredAbility { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - - static { - filter.add(TargetController.OPPONENT.getControllerPredicate()); - filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3)); - } - - public HiddenPredatorsStateTriggeredAbility() { - super(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new HiddenPredatorsToken(), "", Duration.Custom, true, false)); - } - - public HiddenPredatorsStateTriggeredAbility(final HiddenPredatorsStateTriggeredAbility ability) { - super(ability); - } - - @Override - public HiddenPredatorsStateTriggeredAbility copy() { - return new HiddenPredatorsStateTriggeredAbility(this); - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - return !game.getBattlefield().getAllActivePermanents(filter, game).isEmpty(); - } - - @Override - public boolean checkInterveningIfClause(Game game) { - if (getSourcePermanentIfItStillExists(game) != null) { - return getSourcePermanentIfItStillExists(game).isEnchantment(); - } - return false; - } - - @Override - public boolean canTrigger(Game game) { - //20100716 - 603.8 - return !Boolean.TRUE.equals(game.getState().getValue(getSourceId().toString() + "triggered")); - } - - @Override - public void trigger(Game game, UUID controllerId) { - //20100716 - 603.8 - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.TRUE); - super.trigger(game, controllerId); - } - - @Override - public boolean resolve(Game game) { - //20100716 - 603.8 - boolean result = super.resolve(game); - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); - return result; - } - - @Override - public void counter(Game game) { - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); - } - - @Override - public String getRule() { - return "When an opponent controls a creature with 4 or greater power, if {this} is an enchantment, " + super.getRule(); - } - -} - -class HiddenPredatorsToken extends TokenImpl { - - public HiddenPredatorsToken() { - super("Beast", "4/4 Beast creature"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.BEAST); - power = new MageInt(4); - toughness = new MageInt(4); - } - - public HiddenPredatorsToken(final HiddenPredatorsToken token) { - super(token); - } - - public HiddenPredatorsToken copy() { - return new HiddenPredatorsToken(this); - } -} +package mage.cards.h; + +import mage.MageInt; +import mage.abilities.StateTriggeredAbility; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.PowerPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class HiddenPredators extends CardImpl { + + public HiddenPredators(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{G}"); + + // When an opponent controls a creature with power 4 or greater, if Hidden Predators is an enchantment, Hidden Predators becomes a 4/4 Beast creature. + this.addAbility(new HiddenPredatorsStateTriggeredAbility()); + } + + public HiddenPredators(final HiddenPredators card) { + super(card); + } + + @Override + public HiddenPredators copy() { + return new HiddenPredators(this); + } +} + +class HiddenPredatorsStateTriggeredAbility extends StateTriggeredAbility { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(TargetController.OPPONENT.getControllerPredicate()); + filter.add(new PowerPredicate(ComparisonType.MORE_THAN, 3)); + } + + public HiddenPredatorsStateTriggeredAbility() { + super(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new HiddenPredatorsToken(), "", Duration.Custom, true, false)); + } + + public HiddenPredatorsStateTriggeredAbility(final HiddenPredatorsStateTriggeredAbility ability) { + super(ability); + } + + @Override + public HiddenPredatorsStateTriggeredAbility copy() { + return new HiddenPredatorsStateTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return !game.getBattlefield().getAllActivePermanents(filter, game).isEmpty(); + } + + @Override + public boolean checkInterveningIfClause(Game game) { + if (getSourcePermanentIfItStillExists(game) != null) { + return getSourcePermanentIfItStillExists(game).isEnchantment(); + } + return false; + } + + @Override + public boolean canTrigger(Game game) { + //20100716 - 603.8 + return !Boolean.TRUE.equals(game.getState().getValue(getSourceId().toString() + "triggered")); + } + + @Override + public void trigger(Game game, UUID controllerId) { + //20100716 - 603.8 + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.TRUE); + super.trigger(game, controllerId); + } + + @Override + public boolean resolve(Game game) { + //20100716 - 603.8 + boolean result = super.resolve(game); + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); + return result; + } + + @Override + public void counter(Game game) { + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); + } + + @Override + public String getRule() { + return "When an opponent controls a creature with 4 or greater power, if {this} is an enchantment, " + super.getRule(); + } + +} + +class HiddenPredatorsToken extends TokenImpl { + + public HiddenPredatorsToken() { + super("Beast", "4/4 Beast creature"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.BEAST); + power = new MageInt(4); + toughness = new MageInt(4); + } + + public HiddenPredatorsToken(final HiddenPredatorsToken token) { + super(token); + } + + public HiddenPredatorsToken copy() { + return new HiddenPredatorsToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/h/HiddenRetreat.java b/Mage.Sets/src/mage/cards/h/HiddenRetreat.java index 9569a11ab6e..7cf7ab87444 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenRetreat.java +++ b/Mage.Sets/src/mage/cards/h/HiddenRetreat.java @@ -1,76 +1,76 @@ -package mage.cards.h; - -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.PutCardFromHandOnTopOfLibraryCost; -import mage.abilities.effects.PreventionEffectImpl; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Zone; -import mage.filter.StaticFilters; -import mage.game.Game; -import mage.game.events.DamageEvent; -import mage.game.events.GameEvent; -import mage.target.TargetSpell; - -import java.util.UUID; - -/** - * @author bunchOfDevs - */ -public class HiddenRetreat extends CardImpl { - - public HiddenRetreat(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); - - //Put a card from your hand on top of your library: Prevent all damage that would be dealt by target instant or sorcery spell this turn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new HiddenRetreatEffect(), new PutCardFromHandOnTopOfLibraryCost()); - ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY)); - this.addAbility(ability); - - } - - public HiddenRetreat(final HiddenRetreat hiddenRetreat) { - super(hiddenRetreat); - } - - @Override - public HiddenRetreat copy() { - return new HiddenRetreat(this); - } -} - -class HiddenRetreatEffect extends PreventionEffectImpl { - - public HiddenRetreatEffect() { - super(Duration.EndOfTurn, Integer.MAX_VALUE, false, false); - this.staticText = "Prevent all damage that would be dealt by target instant or sorcery spell this turn."; - } - - public HiddenRetreatEffect(final HiddenRetreatEffect effect) { - super(effect); - } - - @Override - public HiddenRetreatEffect copy() { - return new HiddenRetreatEffect(this); - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - return (super.applies(event, source, game) - && event instanceof DamageEvent - && event.getAmount() > 0 - && game.getObject(source.getFirstTarget()) != null - && game.getObject(event.getSourceId()) != null - && game.getObject(source.getFirstTarget()).equals(game.getObject(event.getSourceId())) - && game.getObject(source.getFirstTarget()).isInstantOrSorcery()); - } -} +package mage.cards.h; + +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.PutCardFromHandOnTopOfLibraryCost; +import mage.abilities.effects.PreventionEffectImpl; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Zone; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.events.DamageEvent; +import mage.game.events.GameEvent; +import mage.target.TargetSpell; + +import java.util.UUID; + +/** + * @author bunchOfDevs + */ +public class HiddenRetreat extends CardImpl { + + public HiddenRetreat(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); + + //Put a card from your hand on top of your library: Prevent all damage that would be dealt by target instant or sorcery spell this turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new HiddenRetreatEffect(), new PutCardFromHandOnTopOfLibraryCost()); + ability.addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_INSTANT_OR_SORCERY)); + this.addAbility(ability); + + } + + public HiddenRetreat(final HiddenRetreat hiddenRetreat) { + super(hiddenRetreat); + } + + @Override + public HiddenRetreat copy() { + return new HiddenRetreat(this); + } +} + +class HiddenRetreatEffect extends PreventionEffectImpl { + + public HiddenRetreatEffect() { + super(Duration.EndOfTurn, Integer.MAX_VALUE, false, false); + this.staticText = "Prevent all damage that would be dealt by target instant or sorcery spell this turn."; + } + + public HiddenRetreatEffect(final HiddenRetreatEffect effect) { + super(effect); + } + + @Override + public HiddenRetreatEffect copy() { + return new HiddenRetreatEffect(this); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return (super.applies(event, source, game) + && event instanceof DamageEvent + && event.getAmount() > 0 + && game.getObject(source.getFirstTarget()) != null + && game.getObject(event.getSourceId()) != null + && game.getObject(source.getFirstTarget()).equals(game.getObject(event.getSourceId())) + && game.getObject(source.getFirstTarget()).isInstantOrSorcery()); + } +} diff --git a/Mage.Sets/src/mage/cards/h/HiddenStag.java b/Mage.Sets/src/mage/cards/h/HiddenStag.java index 6083cbaf307..7af07d85a77 100644 --- a/Mage.Sets/src/mage/cards/h/HiddenStag.java +++ b/Mage.Sets/src/mage/cards/h/HiddenStag.java @@ -1,73 +1,73 @@ -package mage.cards.h; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.ControllerPlaysLandTriggeredAbility; -import mage.abilities.common.OpponentPlaysLandTriggeredAbility; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.abilities.effects.common.continuous.BecomesEnchantmentSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.StaticFilters; -import mage.game.permanent.token.TokenImpl; - -/** - * - * @author jeffwadsworth - */ -public final class HiddenStag extends CardImpl { - - public HiddenStag(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); - - // Whenever an opponent plays a land, if Hidden Stag is an enchantment, Hidden Stag becomes a 3/2 Elk Beast creature. - Effect effect = new BecomesCreatureSourceEffect(new ElkBeastToken(), "", Duration.WhileOnBattlefield, true, false); - TriggeredAbility ability = new OpponentPlaysLandTriggeredAbility(Zone.BATTLEFIELD, effect, false); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), - "Whenever an opponent plays a land, if Hidden Stag is an enchantment, Hidden Stag becomes a 3/2 Elk Beast creature.")); - - // Whenever you play a land, if Hidden Stag is a creature, Hidden Stag becomes an enchantment. - Effect effect2 = new BecomesEnchantmentSourceEffect(); - TriggeredAbility ability2 = new ControllerPlaysLandTriggeredAbility(Zone.BATTLEFIELD, effect2, false); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability2, new SourceMatchesFilterCondition(StaticFilters.FILTER_PERMANENT_CREATURE), - "Whenever you play a land, if Hidden Stag is a creature, Hidden Stag becomes an enchantment.")); - - } - - public HiddenStag(final HiddenStag card) { - super(card); - } - - @Override - public HiddenStag copy() { - return new HiddenStag(this); - } -} - -class ElkBeastToken extends TokenImpl { - - public ElkBeastToken() { - super("Elk Beast", "3/2 Elk Beast creature"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.ELK); - subtype.add(SubType.BEAST); - power = new MageInt(3); - toughness = new MageInt(2); - } - - public ElkBeastToken(final ElkBeastToken token) { - super(token); - } - - public ElkBeastToken copy() { - return new ElkBeastToken(this); - } -} +package mage.cards.h; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.ControllerPlaysLandTriggeredAbility; +import mage.abilities.common.OpponentPlaysLandTriggeredAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.abilities.effects.common.continuous.BecomesEnchantmentSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; + +/** + * + * @author jeffwadsworth + */ +public final class HiddenStag extends CardImpl { + + public HiddenStag(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); + + // Whenever an opponent plays a land, if Hidden Stag is an enchantment, Hidden Stag becomes a 3/2 Elk Beast creature. + Effect effect = new BecomesCreatureSourceEffect(new ElkBeastToken(), "", Duration.WhileOnBattlefield, true, false); + TriggeredAbility ability = new OpponentPlaysLandTriggeredAbility(Zone.BATTLEFIELD, effect, false); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), + "Whenever an opponent plays a land, if Hidden Stag is an enchantment, Hidden Stag becomes a 3/2 Elk Beast creature.")); + + // Whenever you play a land, if Hidden Stag is a creature, Hidden Stag becomes an enchantment. + Effect effect2 = new BecomesEnchantmentSourceEffect(); + TriggeredAbility ability2 = new ControllerPlaysLandTriggeredAbility(Zone.BATTLEFIELD, effect2, false); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability2, new SourceMatchesFilterCondition(StaticFilters.FILTER_PERMANENT_CREATURE), + "Whenever you play a land, if Hidden Stag is a creature, Hidden Stag becomes an enchantment.")); + + } + + public HiddenStag(final HiddenStag card) { + super(card); + } + + @Override + public HiddenStag copy() { + return new HiddenStag(this); + } +} + +class ElkBeastToken extends TokenImpl { + + public ElkBeastToken() { + super("Elk Beast", "3/2 Elk Beast creature"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.ELK); + subtype.add(SubType.BEAST); + power = new MageInt(3); + toughness = new MageInt(2); + } + + public ElkBeastToken(final ElkBeastToken token) { + super(token); + } + + public ElkBeastToken copy() { + return new ElkBeastToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/i/IllusionaryPresence.java b/Mage.Sets/src/mage/cards/i/IllusionaryPresence.java index b8adf4654f1..cd3b943c7f9 100644 --- a/Mage.Sets/src/mage/cards/i/IllusionaryPresence.java +++ b/Mage.Sets/src/mage/cards/i/IllusionaryPresence.java @@ -1,111 +1,111 @@ -package mage.cards.i; - -import java.util.UUID; -import mage.MageInt; -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.constants.SubType; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ChooseBasicLandTypeEffect; -import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; -import mage.abilities.keyword.CumulativeUpkeepAbility; -import mage.abilities.keyword.ForestwalkAbility; -import mage.abilities.keyword.IslandwalkAbility; -import mage.abilities.keyword.MountainwalkAbility; -import mage.abilities.keyword.PlainswalkAbility; -import mage.abilities.keyword.SwampwalkAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.game.Game; - -/** - * - * @author jeffwadsworth - */ -public final class IllusionaryPresence extends CardImpl { - - public IllusionaryPresence(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); - - this.subtype.add(SubType.ILLUSION); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - - // Cumulative upkeep {U} - this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{U}"))); - - // At the beginning of your upkeep, choose a land type. Illusionary Presence gains landwalk of the chosen type until end of turn. - Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new ChooseBasicLandTypeEffect(Outcome.Neutral), TargetController.YOU, false); - ability.addEffect(new IllusionaryPresenceEffect()); - this.addAbility(ability); - - } - - private IllusionaryPresence(final IllusionaryPresence card) { - super(card); - } - - @Override - public IllusionaryPresence copy() { - return new IllusionaryPresence(this); - } -} - -class IllusionaryPresenceEffect extends OneShotEffect { - - Ability gainedAbility; - - public IllusionaryPresenceEffect() { - super(Outcome.Benefit); - this.staticText = "{this} gains landwalk of the chosen type until end of turn"; - } - - public IllusionaryPresenceEffect(final IllusionaryPresenceEffect effect) { - super(effect); - } - - @Override - public IllusionaryPresenceEffect copy() { - return new IllusionaryPresenceEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - MageObject mageObject = game.getObject(source.getSourceId()); - if (mageObject != null) { - SubType landTypeChoice = SubType.byDescription((String) game.getState().getValue(mageObject.getId().toString() + "BasicLandType")); - if (landTypeChoice != null) { - switch (landTypeChoice) { - case PLAINS: - gainedAbility = new PlainswalkAbility(); - break; - case FOREST: - gainedAbility = new ForestwalkAbility(); - break; - case SWAMP: - gainedAbility = new SwampwalkAbility(); - break; - case ISLAND: - gainedAbility = new IslandwalkAbility(); - break; - case MOUNTAIN: - gainedAbility = new MountainwalkAbility(); - break; - } - if (gainedAbility != null) { - GainAbilitySourceEffect effect = new GainAbilitySourceEffect(gainedAbility, Duration.EndOfTurn); - game.addEffect(effect, source); - return true; - } - } - } - return false; - } -} +package mage.cards.i; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.constants.SubType; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ChooseBasicLandTypeEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.CumulativeUpkeepAbility; +import mage.abilities.keyword.ForestwalkAbility; +import mage.abilities.keyword.IslandwalkAbility; +import mage.abilities.keyword.MountainwalkAbility; +import mage.abilities.keyword.PlainswalkAbility; +import mage.abilities.keyword.SwampwalkAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.game.Game; + +/** + * + * @author jeffwadsworth + */ +public final class IllusionaryPresence extends CardImpl { + + public IllusionaryPresence(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); + + this.subtype.add(SubType.ILLUSION); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // Cumulative upkeep {U} + this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{U}"))); + + // At the beginning of your upkeep, choose a land type. Illusionary Presence gains landwalk of the chosen type until end of turn. + Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new ChooseBasicLandTypeEffect(Outcome.Neutral), TargetController.YOU, false); + ability.addEffect(new IllusionaryPresenceEffect()); + this.addAbility(ability); + + } + + private IllusionaryPresence(final IllusionaryPresence card) { + super(card); + } + + @Override + public IllusionaryPresence copy() { + return new IllusionaryPresence(this); + } +} + +class IllusionaryPresenceEffect extends OneShotEffect { + + Ability gainedAbility; + + public IllusionaryPresenceEffect() { + super(Outcome.Benefit); + this.staticText = "{this} gains landwalk of the chosen type until end of turn"; + } + + public IllusionaryPresenceEffect(final IllusionaryPresenceEffect effect) { + super(effect); + } + + @Override + public IllusionaryPresenceEffect copy() { + return new IllusionaryPresenceEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + MageObject mageObject = game.getObject(source.getSourceId()); + if (mageObject != null) { + SubType landTypeChoice = SubType.byDescription((String) game.getState().getValue(mageObject.getId().toString() + "BasicLandType")); + if (landTypeChoice != null) { + switch (landTypeChoice) { + case PLAINS: + gainedAbility = new PlainswalkAbility(); + break; + case FOREST: + gainedAbility = new ForestwalkAbility(); + break; + case SWAMP: + gainedAbility = new SwampwalkAbility(); + break; + case ISLAND: + gainedAbility = new IslandwalkAbility(); + break; + case MOUNTAIN: + gainedAbility = new MountainwalkAbility(); + break; + } + if (gainedAbility != null) { + GainAbilitySourceEffect effect = new GainAbilitySourceEffect(gainedAbility, Duration.EndOfTurn); + game.addEffect(effect, source); + return true; + } + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/i/IllusionaryTerrain.java b/Mage.Sets/src/mage/cards/i/IllusionaryTerrain.java index 4fe4f00784f..5fd36bb4ea7 100644 --- a/Mage.Sets/src/mage/cards/i/IllusionaryTerrain.java +++ b/Mage.Sets/src/mage/cards/i/IllusionaryTerrain.java @@ -1,197 +1,197 @@ -package mage.cards.i; - -import java.util.List; -import java.util.UUID; -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.common.AsEntersBattlefieldAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.keyword.CumulativeUpkeepAbility; -import mage.abilities.mana.BlackManaAbility; -import mage.abilities.mana.BlueManaAbility; -import mage.abilities.mana.GreenManaAbility; -import mage.abilities.mana.RedManaAbility; -import mage.abilities.mana.WhiteManaAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.choices.ChoiceBasicLandType; -import mage.choices.ChoiceImpl; -import mage.constants.CardType; -import mage.constants.DependencyType; -import mage.constants.Duration; -import mage.constants.Layer; -import static mage.constants.Layer.TypeChangingEffects_4; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.util.CardUtil; - -/** - * - * @author jeffwadsworth - */ -public final class IllusionaryTerrain extends CardImpl { - - public IllusionaryTerrain(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}{U}"); - - // Cumulative upkeep {2} - this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{2}"))); - - // As Illusionary Terrain enters the battlefield, choose two basic land types. - this.addAbility(new AsEntersBattlefieldAbility(new ChooseTwoBasicLandTypesEffect(Outcome.Neutral))); - - // Basic lands of the first chosen type are the second chosen type. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new IllusionaryTerrainEffect())); - - } - - private IllusionaryTerrain(final IllusionaryTerrain card) { - super(card); - } - - @Override - public IllusionaryTerrain copy() { - return new IllusionaryTerrain(this); - } -} - -class IllusionaryTerrainEffect extends ContinuousEffectImpl { - - public IllusionaryTerrainEffect() { - super(Duration.WhileOnBattlefield, Outcome.Neutral); - staticText = "Basic lands of the first chosen type are the second chosen type"; - } - - public IllusionaryTerrainEffect(final IllusionaryTerrainEffect effect) { - super(effect); - } - - @Override - public IllusionaryTerrainEffect copy() { - return new IllusionaryTerrainEffect(this); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Player controller = game.getPlayer(source.getControllerId()); - SubType firstChoice = SubType.byDescription((String) game.getState().getValue(source.getSourceId().toString() + "firstChoice")); - SubType secondChoice = SubType.byDescription((String) game.getState().getValue(source.getSourceId().toString() + "secondChoice")); - List lands = game.getBattlefield().getAllActivePermanents(CardType.LAND); - if (controller != null - && firstChoice != null - && secondChoice != null) { - for (Permanent land : lands) { - if (land.isBasic()) { - switch (layer) { - case TypeChangingEffects_4: - // the land mana ability is intrinsic, so add it here, not layer 6 - if (land.getSubtype(game).contains(firstChoice)) { - land.getSubtype(game).removeAll(SubType.getLandTypes()); - land.getSubtype(game).add(secondChoice); - land.removeAllAbilities(source.getSourceId(), game); - if (land.getSubtype(game).contains(SubType.FOREST)) { - this.dependencyTypes.add(DependencyType.BecomeForest); - land.addAbility(new GreenManaAbility(), source.getSourceId(), game); - } - if (land.getSubtype(game).contains(SubType.PLAINS)) { - this.dependencyTypes.add(DependencyType.BecomePlains); - land.addAbility(new WhiteManaAbility(), source.getSourceId(), game); - } - if (land.getSubtype(game).contains(SubType.MOUNTAIN)) { - this.dependencyTypes.add(DependencyType.BecomeMountain); - land.addAbility(new RedManaAbility(), source.getSourceId(), game); - } - if (land.getSubtype(game).contains(SubType.ISLAND)) { - this.dependencyTypes.add(DependencyType.BecomeIsland); - land.addAbility(new BlueManaAbility(), source.getSourceId(), game); - } - if (land.getSubtype(game).contains(SubType.SWAMP)) { - this.dependencyTypes.add(DependencyType.BecomeSwamp); - land.addAbility(new BlackManaAbility(), source.getSourceId(), game); - } - } - break; - } - } - } - return true; - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.TypeChangingEffects_4; - } -} - -class ChooseTwoBasicLandTypesEffect extends OneShotEffect { - - String choiceOne; - String choiceTwo; - - public ChooseTwoBasicLandTypesEffect(Outcome outcome) { - super(outcome); - this.staticText = "choose two basic land types"; - } - - public ChooseTwoBasicLandTypesEffect(final ChooseTwoBasicLandTypesEffect effect) { - super(effect); - } - - @Override - public ChooseTwoBasicLandTypesEffect copy() { - return new ChooseTwoBasicLandTypesEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - MageObject mageObject = game.getPermanentEntering(source.getSourceId()); - if (mageObject == null) { - mageObject = game.getObject(source.getSourceId()); - } - if (controller != null - && mageObject != null) { - ChoiceImpl choices = new ChoiceBasicLandType(); - if (controller.choose(Outcome.Neutral, choices, game)) { - game.informPlayers(mageObject.getName() - + ": First chosen basic land type is " + choices.getChoice()); - game.getState().setValue(mageObject.getId().toString() - + "firstChoice", choices.getChoice()); - choiceOne = SubType.byDescription((String) game.getState().getValue( - source.getSourceId().toString() + "firstChoice")).getDescription(); - } - if (controller.choose(Outcome.Neutral, choices, game)) { - game.informPlayers(mageObject.getName() - + ": Second chosen basic land type is " + choices.getChoice()); - game.getState().setValue(mageObject.getId().toString() - + "secondChoice", choices.getChoice()); - choiceTwo = SubType.byDescription((String) game.getState().getValue( - source.getSourceId().toString() + "secondChoice")).getDescription(); - if (mageObject instanceof Permanent - && choiceOne != null - && choiceTwo != null) { - ((Permanent) mageObject).addInfo("Chosen Types", CardUtil - .addToolTipMarkTags("First chosen basic land type: " + choiceOne - + "\n Second chosen basic land type: " + choiceTwo), game); - } - return true; - } - } - return false; - } -} +package mage.cards.i; + +import java.util.List; +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.AsEntersBattlefieldAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.CumulativeUpkeepAbility; +import mage.abilities.mana.BlackManaAbility; +import mage.abilities.mana.BlueManaAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.abilities.mana.RedManaAbility; +import mage.abilities.mana.WhiteManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.choices.ChoiceBasicLandType; +import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.DependencyType; +import mage.constants.Duration; +import mage.constants.Layer; +import static mage.constants.Layer.TypeChangingEffects_4; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.util.CardUtil; + +/** + * + * @author jeffwadsworth + */ +public final class IllusionaryTerrain extends CardImpl { + + public IllusionaryTerrain(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}{U}"); + + // Cumulative upkeep {2} + this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{2}"))); + + // As Illusionary Terrain enters the battlefield, choose two basic land types. + this.addAbility(new AsEntersBattlefieldAbility(new ChooseTwoBasicLandTypesEffect(Outcome.Neutral))); + + // Basic lands of the first chosen type are the second chosen type. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new IllusionaryTerrainEffect())); + + } + + private IllusionaryTerrain(final IllusionaryTerrain card) { + super(card); + } + + @Override + public IllusionaryTerrain copy() { + return new IllusionaryTerrain(this); + } +} + +class IllusionaryTerrainEffect extends ContinuousEffectImpl { + + public IllusionaryTerrainEffect() { + super(Duration.WhileOnBattlefield, Outcome.Neutral); + staticText = "Basic lands of the first chosen type are the second chosen type"; + } + + public IllusionaryTerrainEffect(final IllusionaryTerrainEffect effect) { + super(effect); + } + + @Override + public IllusionaryTerrainEffect copy() { + return new IllusionaryTerrainEffect(this); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Player controller = game.getPlayer(source.getControllerId()); + SubType firstChoice = SubType.byDescription((String) game.getState().getValue(source.getSourceId().toString() + "firstChoice")); + SubType secondChoice = SubType.byDescription((String) game.getState().getValue(source.getSourceId().toString() + "secondChoice")); + List lands = game.getBattlefield().getAllActivePermanents(CardType.LAND); + if (controller != null + && firstChoice != null + && secondChoice != null) { + for (Permanent land : lands) { + if (land.isBasic()) { + switch (layer) { + case TypeChangingEffects_4: + // the land mana ability is intrinsic, so add it here, not layer 6 + if (land.getSubtype(game).contains(firstChoice)) { + land.getSubtype(game).removeAll(SubType.getLandTypes()); + land.getSubtype(game).add(secondChoice); + land.removeAllAbilities(source.getSourceId(), game); + if (land.getSubtype(game).contains(SubType.FOREST)) { + this.dependencyTypes.add(DependencyType.BecomeForest); + land.addAbility(new GreenManaAbility(), source.getSourceId(), game); + } + if (land.getSubtype(game).contains(SubType.PLAINS)) { + this.dependencyTypes.add(DependencyType.BecomePlains); + land.addAbility(new WhiteManaAbility(), source.getSourceId(), game); + } + if (land.getSubtype(game).contains(SubType.MOUNTAIN)) { + this.dependencyTypes.add(DependencyType.BecomeMountain); + land.addAbility(new RedManaAbility(), source.getSourceId(), game); + } + if (land.getSubtype(game).contains(SubType.ISLAND)) { + this.dependencyTypes.add(DependencyType.BecomeIsland); + land.addAbility(new BlueManaAbility(), source.getSourceId(), game); + } + if (land.getSubtype(game).contains(SubType.SWAMP)) { + this.dependencyTypes.add(DependencyType.BecomeSwamp); + land.addAbility(new BlackManaAbility(), source.getSourceId(), game); + } + } + break; + } + } + } + return true; + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.TypeChangingEffects_4; + } +} + +class ChooseTwoBasicLandTypesEffect extends OneShotEffect { + + String choiceOne; + String choiceTwo; + + public ChooseTwoBasicLandTypesEffect(Outcome outcome) { + super(outcome); + this.staticText = "choose two basic land types"; + } + + public ChooseTwoBasicLandTypesEffect(final ChooseTwoBasicLandTypesEffect effect) { + super(effect); + } + + @Override + public ChooseTwoBasicLandTypesEffect copy() { + return new ChooseTwoBasicLandTypesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject mageObject = game.getPermanentEntering(source.getSourceId()); + if (mageObject == null) { + mageObject = game.getObject(source.getSourceId()); + } + if (controller != null + && mageObject != null) { + ChoiceImpl choices = new ChoiceBasicLandType(); + if (controller.choose(Outcome.Neutral, choices, game)) { + game.informPlayers(mageObject.getName() + + ": First chosen basic land type is " + choices.getChoice()); + game.getState().setValue(mageObject.getId().toString() + + "firstChoice", choices.getChoice()); + choiceOne = SubType.byDescription((String) game.getState().getValue( + source.getSourceId().toString() + "firstChoice")).getDescription(); + } + if (controller.choose(Outcome.Neutral, choices, game)) { + game.informPlayers(mageObject.getName() + + ": Second chosen basic land type is " + choices.getChoice()); + game.getState().setValue(mageObject.getId().toString() + + "secondChoice", choices.getChoice()); + choiceTwo = SubType.byDescription((String) game.getState().getValue( + source.getSourceId().toString() + "secondChoice")).getDescription(); + if (mageObject instanceof Permanent + && choiceOne != null + && choiceTwo != null) { + ((Permanent) mageObject).addInfo("Chosen Types", CardUtil + .addToolTipMarkTags("First chosen basic land type: " + choiceOne + + "\n Second chosen basic land type: " + choiceTwo), game); + } + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/i/Incendiary.java b/Mage.Sets/src/mage/cards/i/Incendiary.java index f5987a4793c..7c6e3149fe9 100644 --- a/Mage.Sets/src/mage/cards/i/Incendiary.java +++ b/Mage.Sets/src/mage/cards/i/Incendiary.java @@ -1,65 +1,65 @@ -package mage.cards.i; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.DiesAttachedTriggeredAbility; -import mage.abilities.dynamicvalue.common.CountersSourceCount; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.target.common.TargetCreatureOrPlayer; - -/** - * - * @author jeffwadsworth - */ -public final class Incendiary extends CardImpl { - - private static final String rule = "{this} deals X damage to any target, where X is the number of fuse counters on {this}."; - - public Incendiary(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // At the beginning of your upkeep, you may put a fuse counter on Incendiary. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, - new AddCountersSourceEffect(CounterType.FUSE.createInstance(), true), TargetController.YOU, true)); - - // When enchanted creature dies, Incendiary deals X damage to any target, where X is the number of fuse counters on Incendiary. - Effect effect = new DamageTargetEffect(new CountersSourceCount(CounterType.FUSE)).setText(rule); - Ability ability2 = new DiesAttachedTriggeredAbility(effect, "enchanted creature"); - ability.addTarget(new TargetCreatureOrPlayer()); - this.addAbility(ability2); - - } - - public Incendiary(final Incendiary card) { - super(card); - } - - @Override - public Incendiary copy() { - return new Incendiary(this); - } -} +package mage.cards.i; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.DiesAttachedTriggeredAbility; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author jeffwadsworth + */ +public final class Incendiary extends CardImpl { + + private static final String rule = "{this} deals X damage to any target, where X is the number of fuse counters on {this}."; + + public Incendiary(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{R}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // At the beginning of your upkeep, you may put a fuse counter on Incendiary. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, + new AddCountersSourceEffect(CounterType.FUSE.createInstance(), true), TargetController.YOU, true)); + + // When enchanted creature dies, Incendiary deals X damage to any target, where X is the number of fuse counters on Incendiary. + Effect effect = new DamageTargetEffect(new CountersSourceCount(CounterType.FUSE)).setText(rule); + Ability ability2 = new DiesAttachedTriggeredAbility(effect, "enchanted creature"); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability2); + + } + + public Incendiary(final Incendiary card) { + super(card); + } + + @Override + public Incendiary copy() { + return new Incendiary(this); + } +} diff --git a/Mage.Sets/src/mage/cards/k/KeeperOfTheFlame.java b/Mage.Sets/src/mage/cards/k/KeeperOfTheFlame.java index b70d3feaea3..7f77349e934 100644 --- a/Mage.Sets/src/mage/cards/k/KeeperOfTheFlame.java +++ b/Mage.Sets/src/mage/cards/k/KeeperOfTheFlame.java @@ -1,79 +1,79 @@ -package mage.cards.k; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.filter.FilterOpponent; -import mage.filter.predicate.ObjectSourcePlayer; -import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetPlayer; - -/** - * - * @author jeffwadsworth - */ -public final class KeeperOfTheFlame extends CardImpl { - - private static final FilterOpponent filter = new FilterOpponent(); - - static { - filter.add(new KeeperOfTheFlamePredicate()); - } - - public KeeperOfTheFlame(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{R}"); - - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WIZARD); - this.power = new MageInt(1); - this.toughness = new MageInt(2); - - // {R}, {tap}: Choose target opponent who had more life than you did as you activated this ability. Keeper of the Flame deals 2 damage to that player. - Ability ability = new SimpleActivatedAbility( - new DamageTargetEffect(2).setText("Choose target opponent who had more life than you did as you activated this ability. {this} deals 2 damage to that player"), - new ManaCostsImpl("{R}")); - ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetPlayer(1, 1, false, filter)); - this.addAbility(ability); - - } - - public KeeperOfTheFlame(final KeeperOfTheFlame card) { - super(card); - } - - @Override - public KeeperOfTheFlame copy() { - return new KeeperOfTheFlame(this); - } -} - -class KeeperOfTheFlamePredicate implements ObjectSourcePlayerPredicate> { - - @Override - public boolean apply(ObjectSourcePlayer input, Game game) { - Player targetOpponent = input.getObject(); - Player controller = game.getPlayer(input.getPlayerId()); - if (targetOpponent == null - || controller == null - || !controller.hasOpponent(targetOpponent.getId(), game)) { - return false; - } - return targetOpponent.getLife() > controller.getLife(); - } - - @Override - public String toString() { - return "opponent who had more life than you did as you activated this ability"; - } -} +package mage.cards.k; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.filter.FilterOpponent; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetPlayer; + +/** + * + * @author jeffwadsworth + */ +public final class KeeperOfTheFlame extends CardImpl { + + private static final FilterOpponent filter = new FilterOpponent(); + + static { + filter.add(new KeeperOfTheFlamePredicate()); + } + + public KeeperOfTheFlame(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{R}{R}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // {R}, {tap}: Choose target opponent who had more life than you did as you activated this ability. Keeper of the Flame deals 2 damage to that player. + Ability ability = new SimpleActivatedAbility( + new DamageTargetEffect(2).setText("Choose target opponent who had more life than you did as you activated this ability. {this} deals 2 damage to that player"), + new ManaCostsImpl("{R}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetPlayer(1, 1, false, filter)); + this.addAbility(ability); + + } + + public KeeperOfTheFlame(final KeeperOfTheFlame card) { + super(card); + } + + @Override + public KeeperOfTheFlame copy() { + return new KeeperOfTheFlame(this); + } +} + +class KeeperOfTheFlamePredicate implements ObjectSourcePlayerPredicate> { + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + Player targetOpponent = input.getObject(); + Player controller = game.getPlayer(input.getPlayerId()); + if (targetOpponent == null + || controller == null + || !controller.hasOpponent(targetOpponent.getId(), game)) { + return false; + } + return targetOpponent.getLife() > controller.getLife(); + } + + @Override + public String toString() { + return "opponent who had more life than you did as you activated this ability"; + } +} diff --git a/Mage.Sets/src/mage/cards/k/KeeperOfTheMind.java b/Mage.Sets/src/mage/cards/k/KeeperOfTheMind.java index eda3e048b1e..a815bda398c 100644 --- a/Mage.Sets/src/mage/cards/k/KeeperOfTheMind.java +++ b/Mage.Sets/src/mage/cards/k/KeeperOfTheMind.java @@ -1,126 +1,126 @@ -/* - * 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.k; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.filter.FilterOpponent; -import mage.filter.predicate.ObjectSourcePlayer; -import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetPlayer; -import mage.target.targetadjustment.TargetAdjuster; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public class KeeperOfTheMind extends CardImpl { - - public KeeperOfTheMind(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}{U}"); - - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WIZARD); - this.power = new MageInt(1); - this.toughness = new MageInt(2); - - // {U}, {tap}: Choose target opponent who had at least two more cards in hand than you did as you activated this ability. Draw a card. - Effect effect = new DrawCardSourceControllerEffect(1); - effect.setText("Choose target opponent who had at least two more cards in hand than you did as you activated this ability. Draw a card."); - Ability ability = new SimpleActivatedAbility(effect, new ManaCostsImpl("{U}")); - ability.addCost(new TapSourceCost()); - ability.setTargetAdjuster(KeeperOfTheMindAdjuster.instance); - this.addAbility(ability); - } - - public KeeperOfTheMind(final KeeperOfTheMind card) { - super(card); - } - - @Override - public KeeperOfTheMind copy() { - return new KeeperOfTheMind(this); - } -} - -enum KeeperOfTheMindAdjuster implements TargetAdjuster { - instance; - - private static final FilterOpponent filter = new FilterOpponent(); - - static { - filter.add(new KeeperOfTheMindPredicate()); - } - - @Override - public void adjustTargets(Ability ability, Game game) { - Player activePlayer = game.getPlayer(game.getActivePlayerId()); - if (activePlayer == null) { - return; - } - ability.getTargets().clear(); - TargetPlayer target = new TargetPlayer(1, 1, false, filter); - target.setTargetController(activePlayer.getId()); - ability.addTarget(target); - } -} - -class KeeperOfTheMindPredicate implements ObjectSourcePlayerPredicate> { - - @Override - public boolean apply(ObjectSourcePlayer input, Game game) { - Player targetPlayer = input.getObject(); - Player firstPlayer = game.getPlayer(game.getActivePlayerId()); - if (targetPlayer == null - || firstPlayer == null - || !firstPlayer.hasOpponent(targetPlayer.getId(), game)) { - return false; - } - int countHandTargetPlayer = targetPlayer.getHand().size(); - int countHandFirstPlayer = firstPlayer.getHand().size(); - - return countHandTargetPlayer - 2 >= countHandFirstPlayer; - } - - @Override - public String toString() { - return "opponent who had at least two more cards in hand than you did as you activated this ability"; - } -} +/* + * 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.k; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.filter.FilterOpponent; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetPlayer; +import mage.target.targetadjustment.TargetAdjuster; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public class KeeperOfTheMind extends CardImpl { + + public KeeperOfTheMind(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{U}{U}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + // {U}, {tap}: Choose target opponent who had at least two more cards in hand than you did as you activated this ability. Draw a card. + Effect effect = new DrawCardSourceControllerEffect(1); + effect.setText("Choose target opponent who had at least two more cards in hand than you did as you activated this ability. Draw a card."); + Ability ability = new SimpleActivatedAbility(effect, new ManaCostsImpl("{U}")); + ability.addCost(new TapSourceCost()); + ability.setTargetAdjuster(KeeperOfTheMindAdjuster.instance); + this.addAbility(ability); + } + + public KeeperOfTheMind(final KeeperOfTheMind card) { + super(card); + } + + @Override + public KeeperOfTheMind copy() { + return new KeeperOfTheMind(this); + } +} + +enum KeeperOfTheMindAdjuster implements TargetAdjuster { + instance; + + private static final FilterOpponent filter = new FilterOpponent(); + + static { + filter.add(new KeeperOfTheMindPredicate()); + } + + @Override + public void adjustTargets(Ability ability, Game game) { + Player activePlayer = game.getPlayer(game.getActivePlayerId()); + if (activePlayer == null) { + return; + } + ability.getTargets().clear(); + TargetPlayer target = new TargetPlayer(1, 1, false, filter); + target.setTargetController(activePlayer.getId()); + ability.addTarget(target); + } +} + +class KeeperOfTheMindPredicate implements ObjectSourcePlayerPredicate> { + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + Player targetPlayer = input.getObject(); + Player firstPlayer = game.getPlayer(game.getActivePlayerId()); + if (targetPlayer == null + || firstPlayer == null + || !firstPlayer.hasOpponent(targetPlayer.getId(), game)) { + return false; + } + int countHandTargetPlayer = targetPlayer.getHand().size(); + int countHandFirstPlayer = firstPlayer.getHand().size(); + + return countHandTargetPlayer - 2 >= countHandFirstPlayer; + } + + @Override + public String toString() { + return "opponent who had at least two more cards in hand than you did as you activated this ability"; + } +} diff --git a/Mage.Sets/src/mage/cards/k/KithkinArmor.java b/Mage.Sets/src/mage/cards/k/KithkinArmor.java index 1a43c262fcb..d17a312c21b 100644 --- a/Mage.Sets/src/mage/cards/k/KithkinArmor.java +++ b/Mage.Sets/src/mage/cards/k/KithkinArmor.java @@ -1,174 +1,174 @@ -package mage.cards.k; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.Cost; -import mage.abilities.costs.CostImpl; -import mage.abilities.effects.PreventionEffectImpl; -import mage.abilities.effects.RestrictionEffect; -import mage.abilities.effects.common.AttachEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.DamageCreatureEvent; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.target.TargetSource; - -/** - * - * @author jeffwadsworth - */ -public final class KithkinArmor extends CardImpl { - - public KithkinArmor(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Enchanted creature can't be blocked by creatures with power 3 or greater. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new KithkinArmorRestrictionEffect())); - - // Sacrifice Kithkin Armor: The next time a source of your choice would deal damage to enchanted creature this turn, prevent that damage. - Ability protectionAbility = new SimpleActivatedAbility( - Zone.BATTLEFIELD, - new KithkinArmorPreventionEffect(), - new KithkinArmorCost()); - protectionAbility.addTarget(new TargetSource()); - this.addAbility(protectionAbility); - - } - - private KithkinArmor(final KithkinArmor card) { - super(card); - } - - @Override - public KithkinArmor copy() { - return new KithkinArmor(this); - } -} - -class KithkinArmorCost extends CostImpl { - - public KithkinArmorCost() { - this.text = "sacrifice {this}"; - } - - public KithkinArmorCost(KithkinArmorCost cost) { - super(cost); - } - - @Override - public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { - Permanent permanent = game.getPermanent(sourceId); - if (permanent != null) { - // store attached to information due to getLastInfo being completely fubared - game.getState().setValue(ability.getSourceId().toString() + "attachedToPermanent", permanent.getAttachedTo()); - paid = permanent.sacrifice(sourceId, game); - if (!paid) { - game.getState().setValue(ability.getSourceId().toString() + "attachedToPermanent", null); - } - } - return paid; - } - - @Override - public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { - Permanent permanent = game.getPermanent(sourceId); - return permanent != null - && game.getPlayer(controllerId).canPaySacrificeCost(permanent, sourceId, controllerId, game); - } - - @Override - public KithkinArmorCost copy() { - return new KithkinArmorCost(this); - } -} - -class KithkinArmorRestrictionEffect extends RestrictionEffect { - - public KithkinArmorRestrictionEffect() { - super(Duration.WhileOnBattlefield); - staticText = "Enchanted creature can't be blocked by creatures with power 3 or greater"; - } - - public KithkinArmorRestrictionEffect(final KithkinArmorRestrictionEffect effect) { - super(effect); - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null - && enchantment.getAttachedTo() != null) { - Permanent enchantedPermanent = game.getPermanent(enchantment.getAttachedTo()); - return enchantedPermanent != null - && permanent.getId().equals(enchantedPermanent.getId()); - } - return false; - } - - @Override - public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { - return blocker.getPower().getValue() < 3; - } - - @Override - public KithkinArmorRestrictionEffect copy() { - return new KithkinArmorRestrictionEffect(this); - } -} - -class KithkinArmorPreventionEffect extends PreventionEffectImpl { - - KithkinArmorPreventionEffect() { - super(Duration.EndOfTurn, Integer.MAX_VALUE, false); - staticText = "The next time a source of your choice would deal damage to enchanted creature this turn, prevent that damage"; - } - - KithkinArmorPreventionEffect(final KithkinArmorPreventionEffect effect) { - super(effect); - } - - @Override - public KithkinArmorPreventionEffect copy() { - return new KithkinArmorPreventionEffect(this); - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - if (super.applies(event, source, game) - && event instanceof DamageCreatureEvent - && event.getAmount() > 0 - && !this.used) { - UUID enchantedCreatureId = (UUID) game.getState().getValue(source.getSourceId().toString() + "attachedToPermanent"); - DamageCreatureEvent damageEvent = (DamageCreatureEvent) event; - if (enchantedCreatureId != null - && event.getTargetId().equals(enchantedCreatureId) - && damageEvent.getSourceId().equals(source.getFirstTarget())) { - this.used = true; - this.discard(); - return true; - } - } - return false; - } -} +package mage.cards.k; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.effects.PreventionEffectImpl; +import mage.abilities.effects.RestrictionEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.DamageCreatureEvent; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.TargetSource; + +/** + * + * @author jeffwadsworth + */ +public final class KithkinArmor extends CardImpl { + + public KithkinArmor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature can't be blocked by creatures with power 3 or greater. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new KithkinArmorRestrictionEffect())); + + // Sacrifice Kithkin Armor: The next time a source of your choice would deal damage to enchanted creature this turn, prevent that damage. + Ability protectionAbility = new SimpleActivatedAbility( + Zone.BATTLEFIELD, + new KithkinArmorPreventionEffect(), + new KithkinArmorCost()); + protectionAbility.addTarget(new TargetSource()); + this.addAbility(protectionAbility); + + } + + private KithkinArmor(final KithkinArmor card) { + super(card); + } + + @Override + public KithkinArmor copy() { + return new KithkinArmor(this); + } +} + +class KithkinArmorCost extends CostImpl { + + public KithkinArmorCost() { + this.text = "sacrifice {this}"; + } + + public KithkinArmorCost(KithkinArmorCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { + Permanent permanent = game.getPermanent(sourceId); + if (permanent != null) { + // store attached to information due to getLastInfo being completely fubared + game.getState().setValue(ability.getSourceId().toString() + "attachedToPermanent", permanent.getAttachedTo()); + paid = permanent.sacrifice(sourceId, game); + if (!paid) { + game.getState().setValue(ability.getSourceId().toString() + "attachedToPermanent", null); + } + } + return paid; + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + Permanent permanent = game.getPermanent(sourceId); + return permanent != null + && game.getPlayer(controllerId).canPaySacrificeCost(permanent, sourceId, controllerId, game); + } + + @Override + public KithkinArmorCost copy() { + return new KithkinArmorCost(this); + } +} + +class KithkinArmorRestrictionEffect extends RestrictionEffect { + + public KithkinArmorRestrictionEffect() { + super(Duration.WhileOnBattlefield); + staticText = "Enchanted creature can't be blocked by creatures with power 3 or greater"; + } + + public KithkinArmorRestrictionEffect(final KithkinArmorRestrictionEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null + && enchantment.getAttachedTo() != null) { + Permanent enchantedPermanent = game.getPermanent(enchantment.getAttachedTo()); + return enchantedPermanent != null + && permanent.getId().equals(enchantedPermanent.getId()); + } + return false; + } + + @Override + public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { + return blocker.getPower().getValue() < 3; + } + + @Override + public KithkinArmorRestrictionEffect copy() { + return new KithkinArmorRestrictionEffect(this); + } +} + +class KithkinArmorPreventionEffect extends PreventionEffectImpl { + + KithkinArmorPreventionEffect() { + super(Duration.EndOfTurn, Integer.MAX_VALUE, false); + staticText = "The next time a source of your choice would deal damage to enchanted creature this turn, prevent that damage"; + } + + KithkinArmorPreventionEffect(final KithkinArmorPreventionEffect effect) { + super(effect); + } + + @Override + public KithkinArmorPreventionEffect copy() { + return new KithkinArmorPreventionEffect(this); + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (super.applies(event, source, game) + && event instanceof DamageCreatureEvent + && event.getAmount() > 0 + && !this.used) { + UUID enchantedCreatureId = (UUID) game.getState().getValue(source.getSourceId().toString() + "attachedToPermanent"); + DamageCreatureEvent damageEvent = (DamageCreatureEvent) event; + if (enchantedCreatureId != null + && event.getTargetId().equals(enchantedCreatureId) + && damageEvent.getSourceId().equals(source.getFirstTarget())) { + this.used = true; + this.discard(); + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/k/KrovikanVampire.java b/Mage.Sets/src/mage/cards/k/KrovikanVampire.java index b8247dd765f..6457d95ccad 100644 --- a/Mage.Sets/src/mage/cards/k/KrovikanVampire.java +++ b/Mage.Sets/src/mage/cards/k/KrovikanVampire.java @@ -1,240 +1,240 @@ -package mage.cards.k; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; -import mage.abilities.common.BeginningOfEndStepTriggeredAbility; -import mage.abilities.condition.Condition; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.SacrificeTargetEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.WatcherScope; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.events.ZoneChangeEvent; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; -import mage.watchers.Watcher; - -/** - * - * @author jeffwadsworth - */ -public final class KrovikanVampire extends CardImpl { - - public KrovikanVampire(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); - - this.subtype.add(SubType.VAMPIRE); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - - // At the beginning of each end step, if a creature dealt damage by Krovikan Vampire this turn died, put that card onto the battlefield under your control. Sacrifice it when you lose control of Krovikan Vampire. - Ability ability = new BeginningOfEndStepTriggeredAbility( - Zone.BATTLEFIELD, - new KrovikanVampireEffect(), - TargetController.ANY, - new KrovikanVampireInterveningIfCondition(), - false); - ability.addWatcher(new KrovikanVampireCreaturesDamagedWatcher()); - ability.addWatcher(new KrovikanVampireCreaturesDiedWatcher()); - this.addAbility(ability); - } - - public KrovikanVampire(final KrovikanVampire card) { - super(card); - } - - @Override - public KrovikanVampire copy() { - return new KrovikanVampire(this); - } -} - -class KrovikanVampireEffect extends OneShotEffect { - - Set creaturesAffected = new HashSet<>(); - - KrovikanVampireEffect() { - super(Outcome.Neutral); - staticText = "put that card onto the battlefield under your control. Sacrifice it when you lose control of {this}"; - } - - KrovikanVampireEffect(KrovikanVampireEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent krovikanVampire = game.getPermanent(source.getSourceId()); - creaturesAffected = (Set) game.getState().getValue(source.getSourceId() + "creatureToGainControl"); - if (creaturesAffected != null - && controller != null - && krovikanVampire != null) { - creaturesAffected.stream().map((creatureId) -> { - controller.moveCards(game.getCard(creatureId), Zone.BATTLEFIELD, source, game, false, false, false, null); - return creatureId; - }).map((creatureId) -> { - OneShotEffect effect = new SacrificeTargetEffect(); - effect.setText("Sacrifice this if Krovikan Vampire leaves the battlefield or its current controller loses control of it."); - effect.setTargetPointer(new FixedTarget(creatureId)); - return effect; - }).map((effect) -> new KrovikanVampireDelayedTriggeredAbility(effect, krovikanVampire.getId())).forEachOrdered((dTA) -> { - game.addDelayedTriggeredAbility(dTA, source); - }); - creaturesAffected.clear(); - return true; - } - return false; - } - - @Override - public KrovikanVampireEffect copy() { - return new KrovikanVampireEffect(this); - } -} - -class KrovikanVampireInterveningIfCondition implements Condition { - - Set creaturesAffected = new HashSet<>(); - - @Override - public boolean apply(Game game, Ability source) { - KrovikanVampireCreaturesDiedWatcher watcherDied = game.getState().getWatcher(KrovikanVampireCreaturesDiedWatcher.class); - KrovikanVampireCreaturesDamagedWatcher watcherDamaged = game.getState().getWatcher(KrovikanVampireCreaturesDamagedWatcher.class); - if (watcherDied != null) { - Set creaturesThatDiedThisTurn = watcherDied.getDiedThisTurn(); - creaturesThatDiedThisTurn.stream().filter((mor) -> (watcherDamaged != null)).forEachOrdered((mor) -> { - watcherDamaged.getDamagedBySource().stream().filter((mor2) -> (mor2 != null - && mor == mor2)).forEachOrdered((_item) -> { - creaturesAffected.add(mor); - }); - }); - if (creaturesAffected != null - && creaturesAffected.size() > 0) { - game.getState().setValue(source.getSourceId() + "creatureToGainControl", creaturesAffected); - return true; - } - } - return false; - } - - @Override - public String toString() { - return "if a creature dealt damage by Krovikan Vampire this turn died"; - } -} - -class KrovikanVampireCreaturesDamagedWatcher extends Watcher { - - private final Set damagedBySource = new HashSet<>(); - - public KrovikanVampireCreaturesDamagedWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == EventType.DAMAGED_CREATURE - && sourceId.equals(event.getSourceId())) { - damagedBySource.add(event.getTargetId()); - } - } - - public Set getDamagedBySource() { - return this.damagedBySource; - } - - @Override - public void reset() { - damagedBySource.clear(); - } -} - -class KrovikanVampireCreaturesDiedWatcher extends Watcher { - - private final Set diedThisTurn = new HashSet<>(); - - public KrovikanVampireCreaturesDiedWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.ZONE_CHANGE) { - ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - if (zEvent.isDiesEvent() - && zEvent.getTarget() != null - && zEvent.getTarget().isCreature()) { - diedThisTurn.add(zEvent.getTargetId()); - } - } - } - - @Override - public void reset() { - diedThisTurn.clear(); - } - - public Set getDiedThisTurn() { - return this.diedThisTurn; - } -} - -class KrovikanVampireDelayedTriggeredAbility extends DelayedTriggeredAbility { - - UUID krovikanVampire; - - KrovikanVampireDelayedTriggeredAbility(Effect effect, UUID krovikanVampire) { - super(effect, Duration.EndOfGame, true); - this.krovikanVampire = krovikanVampire; - } - - KrovikanVampireDelayedTriggeredAbility(KrovikanVampireDelayedTriggeredAbility ability) { - super(ability); - this.krovikanVampire = ability.krovikanVampire; - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.LOST_CONTROL - || event.getType() == EventType.ZONE_CHANGE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == EventType.LOST_CONTROL - && event.getSourceId().equals(krovikanVampire)) { - return true; - } - if (event.getType() == EventType.ZONE_CHANGE - && event.getTargetId().equals(krovikanVampire)) { - return true; - } - return false; - } - - @Override - public KrovikanVampireDelayedTriggeredAbility copy() { - return new KrovikanVampireDelayedTriggeredAbility(this); - } - - @Override - public String getRule() { - return "Control of Krovikan Vampire lost"; - } -} +package mage.cards.k; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.SacrificeTargetEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.WatcherScope; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; +import mage.watchers.Watcher; + +/** + * + * @author jeffwadsworth + */ +public final class KrovikanVampire extends CardImpl { + + public KrovikanVampire(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{B}{B}"); + + this.subtype.add(SubType.VAMPIRE); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // At the beginning of each end step, if a creature dealt damage by Krovikan Vampire this turn died, put that card onto the battlefield under your control. Sacrifice it when you lose control of Krovikan Vampire. + Ability ability = new BeginningOfEndStepTriggeredAbility( + Zone.BATTLEFIELD, + new KrovikanVampireEffect(), + TargetController.ANY, + new KrovikanVampireInterveningIfCondition(), + false); + ability.addWatcher(new KrovikanVampireCreaturesDamagedWatcher()); + ability.addWatcher(new KrovikanVampireCreaturesDiedWatcher()); + this.addAbility(ability); + } + + public KrovikanVampire(final KrovikanVampire card) { + super(card); + } + + @Override + public KrovikanVampire copy() { + return new KrovikanVampire(this); + } +} + +class KrovikanVampireEffect extends OneShotEffect { + + Set creaturesAffected = new HashSet<>(); + + KrovikanVampireEffect() { + super(Outcome.Neutral); + staticText = "put that card onto the battlefield under your control. Sacrifice it when you lose control of {this}"; + } + + KrovikanVampireEffect(KrovikanVampireEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent krovikanVampire = game.getPermanent(source.getSourceId()); + creaturesAffected = (Set) game.getState().getValue(source.getSourceId() + "creatureToGainControl"); + if (creaturesAffected != null + && controller != null + && krovikanVampire != null) { + creaturesAffected.stream().map((creatureId) -> { + controller.moveCards(game.getCard(creatureId), Zone.BATTLEFIELD, source, game, false, false, false, null); + return creatureId; + }).map((creatureId) -> { + OneShotEffect effect = new SacrificeTargetEffect(); + effect.setText("Sacrifice this if Krovikan Vampire leaves the battlefield or its current controller loses control of it."); + effect.setTargetPointer(new FixedTarget(creatureId)); + return effect; + }).map((effect) -> new KrovikanVampireDelayedTriggeredAbility(effect, krovikanVampire.getId())).forEachOrdered((dTA) -> { + game.addDelayedTriggeredAbility(dTA, source); + }); + creaturesAffected.clear(); + return true; + } + return false; + } + + @Override + public KrovikanVampireEffect copy() { + return new KrovikanVampireEffect(this); + } +} + +class KrovikanVampireInterveningIfCondition implements Condition { + + Set creaturesAffected = new HashSet<>(); + + @Override + public boolean apply(Game game, Ability source) { + KrovikanVampireCreaturesDiedWatcher watcherDied = game.getState().getWatcher(KrovikanVampireCreaturesDiedWatcher.class); + KrovikanVampireCreaturesDamagedWatcher watcherDamaged = game.getState().getWatcher(KrovikanVampireCreaturesDamagedWatcher.class); + if (watcherDied != null) { + Set creaturesThatDiedThisTurn = watcherDied.getDiedThisTurn(); + creaturesThatDiedThisTurn.stream().filter((mor) -> (watcherDamaged != null)).forEachOrdered((mor) -> { + watcherDamaged.getDamagedBySource().stream().filter((mor2) -> (mor2 != null + && mor == mor2)).forEachOrdered((_item) -> { + creaturesAffected.add(mor); + }); + }); + if (creaturesAffected != null + && creaturesAffected.size() > 0) { + game.getState().setValue(source.getSourceId() + "creatureToGainControl", creaturesAffected); + return true; + } + } + return false; + } + + @Override + public String toString() { + return "if a creature dealt damage by Krovikan Vampire this turn died"; + } +} + +class KrovikanVampireCreaturesDamagedWatcher extends Watcher { + + private final Set damagedBySource = new HashSet<>(); + + public KrovikanVampireCreaturesDamagedWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == EventType.DAMAGED_CREATURE + && sourceId.equals(event.getSourceId())) { + damagedBySource.add(event.getTargetId()); + } + } + + public Set getDamagedBySource() { + return this.damagedBySource; + } + + @Override + public void reset() { + damagedBySource.clear(); + } +} + +class KrovikanVampireCreaturesDiedWatcher extends Watcher { + + private final Set diedThisTurn = new HashSet<>(); + + public KrovikanVampireCreaturesDiedWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.ZONE_CHANGE) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + if (zEvent.isDiesEvent() + && zEvent.getTarget() != null + && zEvent.getTarget().isCreature()) { + diedThisTurn.add(zEvent.getTargetId()); + } + } + } + + @Override + public void reset() { + diedThisTurn.clear(); + } + + public Set getDiedThisTurn() { + return this.diedThisTurn; + } +} + +class KrovikanVampireDelayedTriggeredAbility extends DelayedTriggeredAbility { + + UUID krovikanVampire; + + KrovikanVampireDelayedTriggeredAbility(Effect effect, UUID krovikanVampire) { + super(effect, Duration.EndOfGame, true); + this.krovikanVampire = krovikanVampire; + } + + KrovikanVampireDelayedTriggeredAbility(KrovikanVampireDelayedTriggeredAbility ability) { + super(ability); + this.krovikanVampire = ability.krovikanVampire; + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.LOST_CONTROL + || event.getType() == EventType.ZONE_CHANGE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.LOST_CONTROL + && event.getSourceId().equals(krovikanVampire)) { + return true; + } + if (event.getType() == EventType.ZONE_CHANGE + && event.getTargetId().equals(krovikanVampire)) { + return true; + } + return false; + } + + @Override + public KrovikanVampireDelayedTriggeredAbility copy() { + return new KrovikanVampireDelayedTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Control of Krovikan Vampire lost"; + } +} diff --git a/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java b/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java index 20e98faf09c..f4aafa65196 100644 --- a/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java +++ b/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java @@ -1,102 +1,102 @@ -package mage.cards.k; - -import java.util.UUID; -import mage.MageInt; -import mage.ObjectColor; -import mage.abilities.Ability; -import mage.abilities.common.SpellCastControllerTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.keyword.LifelinkAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.SubLayer; -import mage.constants.SuperType; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.filter.FilterMana; -import mage.filter.FilterSpell; -import mage.filter.predicate.mageobject.ColorPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * - * @author ssouders412 - */ -public final class KrrikSonOfYawgmoth extends CardImpl { - - private static final FilterSpell filterSpell = new FilterSpell("a black spell"); - - static { - filterSpell.add(new ColorPredicate(ObjectColor.BLACK)); - } - - public KrrikSonOfYawgmoth(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B/P}{B/P}{B/P}"); - - this.addSuperType(SuperType.LEGENDARY); - this.subtype.add(SubType.HORROR); - this.subtype.add(SubType.MINION); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - - // ({B/P} can be paid with either {B} or 2 life.) - - // Lifelink - this.addAbility(LifelinkAbility.getInstance()); - - // For each {B} in a cost, you may pay 2 life rather than pay that mana. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new KrrikSonOfYawgmothPhyrexianEffect())); - - // Whenever you cast a black spell, put a +1/+1 counter on K'rrik, Son of Yawgmoth. - this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filterSpell, false)); - } - - private KrrikSonOfYawgmoth(final KrrikSonOfYawgmoth card) { - super(card); - } - - @Override - public KrrikSonOfYawgmoth copy() { - return new KrrikSonOfYawgmoth(this); - } -} - -class KrrikSonOfYawgmothPhyrexianEffect extends ContinuousEffectImpl { - - public KrrikSonOfYawgmothPhyrexianEffect() { - super(Duration.WhileOnBattlefield, Layer.PlayerEffects, SubLayer.NA, Outcome.Benefit); - this.staticText = "for each {B} in a cost, you may pay 2 life rather than pay that mana"; - } - - public KrrikSonOfYawgmothPhyrexianEffect(final KrrikSonOfYawgmothPhyrexianEffect effect) { - super(effect); - } - - @Override - public KrrikSonOfYawgmothPhyrexianEffect copy() { - return new KrrikSonOfYawgmothPhyrexianEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent sourcePermanent = game.getPermanent(source.getSourceId()); - Player controller = game.getPlayer(source.getControllerId()); - FilterMana phyrexianBlack = new FilterMana(); - - phyrexianBlack.setBlack(true); - if (controller != null && sourcePermanent != null) { - controller.addPhyrexianToColors(phyrexianBlack); - return true; - } - return false; - } -} +package mage.cards.k; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.SpellCastControllerTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.LifelinkAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.SubLayer; +import mage.constants.SuperType; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.FilterMana; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author ssouders412 + */ +public final class KrrikSonOfYawgmoth extends CardImpl { + + private static final FilterSpell filterSpell = new FilterSpell("a black spell"); + + static { + filterSpell.add(new ColorPredicate(ObjectColor.BLACK)); + } + + public KrrikSonOfYawgmoth(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{B/P}{B/P}{B/P}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.HORROR); + this.subtype.add(SubType.MINION); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // ({B/P} can be paid with either {B} or 2 life.) + + // Lifelink + this.addAbility(LifelinkAbility.getInstance()); + + // For each {B} in a cost, you may pay 2 life rather than pay that mana. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new KrrikSonOfYawgmothPhyrexianEffect())); + + // Whenever you cast a black spell, put a +1/+1 counter on K'rrik, Son of Yawgmoth. + this.addAbility(new SpellCastControllerTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filterSpell, false)); + } + + private KrrikSonOfYawgmoth(final KrrikSonOfYawgmoth card) { + super(card); + } + + @Override + public KrrikSonOfYawgmoth copy() { + return new KrrikSonOfYawgmoth(this); + } +} + +class KrrikSonOfYawgmothPhyrexianEffect extends ContinuousEffectImpl { + + public KrrikSonOfYawgmothPhyrexianEffect() { + super(Duration.WhileOnBattlefield, Layer.PlayerEffects, SubLayer.NA, Outcome.Benefit); + this.staticText = "for each {B} in a cost, you may pay 2 life rather than pay that mana"; + } + + public KrrikSonOfYawgmothPhyrexianEffect(final KrrikSonOfYawgmothPhyrexianEffect effect) { + super(effect); + } + + @Override + public KrrikSonOfYawgmothPhyrexianEffect copy() { + return new KrrikSonOfYawgmothPhyrexianEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent sourcePermanent = game.getPermanent(source.getSourceId()); + Player controller = game.getPlayer(source.getControllerId()); + FilterMana phyrexianBlack = new FilterMana(); + + phyrexianBlack.setBlack(true); + if (controller != null && sourcePermanent != null) { + controller.addPhyrexianToColors(phyrexianBlack); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/l/LimDulsCohort.java b/Mage.Sets/src/mage/cards/l/LimDulsCohort.java index af21382902b..0472534abd7 100644 --- a/Mage.Sets/src/mage/cards/l/LimDulsCohort.java +++ b/Mage.Sets/src/mage/cards/l/LimDulsCohort.java @@ -1,45 +1,45 @@ -package mage.cards.l; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.common.BlocksOrBecomesBlockedSourceTriggeredAbility; -import mage.abilities.effects.common.CantBeRegeneratedTargetEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.filter.common.FilterCreaturePermanent; - -/** - * - * @author jeffwadsworth - */ -public final class LimDulsCohort extends CardImpl { - - public LimDulsCohort(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); - - this.subtype.add(SubType.ZOMBIE); - this.power = new MageInt(2); - this.toughness = new MageInt(3); - - // Whenever Lim-Dûl's Cohort blocks or becomes blocked by a creature, that creature can't be regenerated this turn. - this.addAbility(new BlocksOrBecomesBlockedSourceTriggeredAbility( - new CantBeRegeneratedTargetEffect(Duration.EndOfTurn), - new FilterCreaturePermanent(), - false, - "Whenever {this} blocks or becomes blocked by a creature, that creature can't be regenerated this turn.", - true)); - - } - - private LimDulsCohort(final LimDulsCohort card) { - super(card); - } - - @Override - public LimDulsCohort copy() { - return new LimDulsCohort(this); - } -} +package mage.cards.l; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.BlocksOrBecomesBlockedSourceTriggeredAbility; +import mage.abilities.effects.common.CantBeRegeneratedTargetEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public final class LimDulsCohort extends CardImpl { + + public LimDulsCohort(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}{B}"); + + this.subtype.add(SubType.ZOMBIE); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Whenever Lim-Dûl's Cohort blocks or becomes blocked by a creature, that creature can't be regenerated this turn. + this.addAbility(new BlocksOrBecomesBlockedSourceTriggeredAbility( + new CantBeRegeneratedTargetEffect(Duration.EndOfTurn), + new FilterCreaturePermanent(), + false, + "Whenever {this} blocks or becomes blocked by a creature, that creature can't be regenerated this turn.", + true)); + + } + + private LimDulsCohort(final LimDulsCohort card) { + super(card); + } + + @Override + public LimDulsCohort copy() { + return new LimDulsCohort(this); + } +} diff --git a/Mage.Sets/src/mage/cards/l/LimitedResources.java b/Mage.Sets/src/mage/cards/l/LimitedResources.java index 71ba1053d7b..1879d5000e8 100644 --- a/Mage.Sets/src/mage/cards/l/LimitedResources.java +++ b/Mage.Sets/src/mage/cards/l/LimitedResources.java @@ -1,124 +1,124 @@ -package mage.cards.l; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; -import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; -import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; -import mage.abilities.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ComparisonType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.common.FilterControlledLandPermanent; -import mage.filter.common.FilterLandPermanent; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.players.Player; -import mage.target.common.TargetLandPermanent; - -/** - * - * @author jeffwadsworth - */ -public final class LimitedResources extends CardImpl { - - public LimitedResources(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); - - // When Limited Resources enters the battlefield, each player chooses five lands they control and sacrifices the rest. - this.addAbility(new EntersBattlefieldTriggeredAbility(new LimitedResourcesEffect(), false)); - - // Players can't play lands as long as ten or more lands are on the battlefield. - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousRuleModifyingEffect( - new CantPlayLandEffect(), - new PermanentsOnTheBattlefieldCondition( - new FilterLandPermanent(), - ComparisonType.MORE_THAN, 9)))); - - } - - public LimitedResources(final LimitedResources card) { - super(card); - } - - @Override - public LimitedResources copy() { - return new LimitedResources(this); - } -} - -class LimitedResourcesEffect extends OneShotEffect { - - public LimitedResourcesEffect() { - super(Outcome.Benefit); - this.staticText = "each player chooses five lands they control and sacrifices the rest"; - } - - public LimitedResourcesEffect(final LimitedResourcesEffect effect) { - super(effect); - } - - @Override - public LimitedResourcesEffect copy() { - return new LimitedResourcesEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - game.getState().getPlayersInRange(source.getControllerId(), game).forEach((playerId) -> { - Player player = game.getPlayer(playerId); - if (player != null) { - int lands = game.getBattlefield().countAll(new FilterControlledLandPermanent(), playerId, game); - TargetLandPermanent target = new TargetLandPermanent(Integer.min(5, lands)); - target.setNotTarget(true); - target.setRequired(true); - player.chooseTarget(outcome.Benefit, target, source, game); - game.getBattlefield().getAllActivePermanents(new FilterControlledLandPermanent(), playerId, game).stream().filter((land) -> (!target.getTargets().contains(land.getId()))).forEachOrdered((land) -> { - land.sacrifice(source.getSourceId(), game); - }); - } - }); - return true; - } -} - -class CantPlayLandEffect extends ContinuousRuleModifyingEffectImpl { - - public CantPlayLandEffect() { - super(Duration.WhileOnBattlefield, Outcome.Detriment); - this.staticText = "Players can't play lands as long as ten or more lands are on the battlefield"; - } - - public CantPlayLandEffect(final CantPlayLandEffect effect) { - super(effect); - } - - @Override - public CantPlayLandEffect copy() { - return new CantPlayLandEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.PLAY_LAND; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - return true; - } - -} +package mage.cards.l; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.common.FilterLandPermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author jeffwadsworth + */ +public final class LimitedResources extends CardImpl { + + public LimitedResources(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + // When Limited Resources enters the battlefield, each player chooses five lands they control and sacrifices the rest. + this.addAbility(new EntersBattlefieldTriggeredAbility(new LimitedResourcesEffect(), false)); + + // Players can't play lands as long as ten or more lands are on the battlefield. + this.addAbility(new SimpleStaticAbility( + Zone.BATTLEFIELD, + new ConditionalContinuousRuleModifyingEffect( + new CantPlayLandEffect(), + new PermanentsOnTheBattlefieldCondition( + new FilterLandPermanent(), + ComparisonType.MORE_THAN, 9)))); + + } + + public LimitedResources(final LimitedResources card) { + super(card); + } + + @Override + public LimitedResources copy() { + return new LimitedResources(this); + } +} + +class LimitedResourcesEffect extends OneShotEffect { + + public LimitedResourcesEffect() { + super(Outcome.Benefit); + this.staticText = "each player chooses five lands they control and sacrifices the rest"; + } + + public LimitedResourcesEffect(final LimitedResourcesEffect effect) { + super(effect); + } + + @Override + public LimitedResourcesEffect copy() { + return new LimitedResourcesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + game.getState().getPlayersInRange(source.getControllerId(), game).forEach((playerId) -> { + Player player = game.getPlayer(playerId); + if (player != null) { + int lands = game.getBattlefield().countAll(new FilterControlledLandPermanent(), playerId, game); + TargetLandPermanent target = new TargetLandPermanent(Integer.min(5, lands)); + target.setNotTarget(true); + target.setRequired(true); + player.chooseTarget(outcome.Benefit, target, source, game); + game.getBattlefield().getAllActivePermanents(new FilterControlledLandPermanent(), playerId, game).stream().filter((land) -> (!target.getTargets().contains(land.getId()))).forEachOrdered((land) -> { + land.sacrifice(source.getSourceId(), game); + }); + } + }); + return true; + } +} + +class CantPlayLandEffect extends ContinuousRuleModifyingEffectImpl { + + public CantPlayLandEffect() { + super(Duration.WhileOnBattlefield, Outcome.Detriment); + this.staticText = "Players can't play lands as long as ten or more lands are on the battlefield"; + } + + public CantPlayLandEffect(final CantPlayLandEffect effect) { + super(effect); + } + + @Override + public CantPlayLandEffect copy() { + return new CantPlayLandEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.PLAY_LAND; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return true; + } + +} diff --git a/Mage.Sets/src/mage/cards/l/LurkingJackals.java b/Mage.Sets/src/mage/cards/l/LurkingJackals.java index b46ee2691ac..41b54588139 100644 --- a/Mage.Sets/src/mage/cards/l/LurkingJackals.java +++ b/Mage.Sets/src/mage/cards/l/LurkingJackals.java @@ -1,126 +1,126 @@ -package mage.cards.l; - -import mage.MageInt; -import mage.abilities.StateTriggeredAbility; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.token.TokenImpl; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class LurkingJackals extends CardImpl { - - public LurkingJackals(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}"); - - // When an opponent has 10 or less life, if Lurking Jackals is an enchantment, it becomes a 3/2 Hound creature. - this.addAbility(new LurkingJackalsStateTriggeredAbility()); - } - - public LurkingJackals(final LurkingJackals card) { - super(card); - } - - @Override - public LurkingJackals copy() { - return new LurkingJackals(this); - } -} - -class LurkingJackalsStateTriggeredAbility extends StateTriggeredAbility { - - public LurkingJackalsStateTriggeredAbility() { - super(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new LurkingJackalsToken(), "", Duration.Custom, true, false)); - } - - public LurkingJackalsStateTriggeredAbility(final LurkingJackalsStateTriggeredAbility ability) { - super(ability); - } - - @Override - public LurkingJackalsStateTriggeredAbility copy() { - return new LurkingJackalsStateTriggeredAbility(this); - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (game.getOpponents(getControllerId()) != null) { - for (UUID opponentId : game.getOpponents(getControllerId())) { - if (game.getPlayer(opponentId).getLife() <= 10) { - return true; - } - } - } - return false; - } - - @Override - public boolean checkInterveningIfClause(Game game) { - if (getSourcePermanentIfItStillExists(game) != null) { - return getSourcePermanentIfItStillExists(game).isEnchantment(); - } - return false; - } - - @Override - public boolean canTrigger(Game game) { - //20100716 - 603.8 - return !Boolean.TRUE.equals(game.getState().getValue(getSourceId().toString() + "triggered")); - } - - @Override - public void trigger(Game game, UUID controllerId) { - //20100716 - 603.8 - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.TRUE); - super.trigger(game, controllerId); - } - - @Override - public boolean resolve(Game game) { - //20100716 - 603.8 - boolean result = super.resolve(game); - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); - return result; - } - - @Override - public void counter(Game game) { - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); - } - - @Override - public String getRule() { - return "When an opponent has 10 or less life, if {this} is an enchantment, " + super.getRule(); - } - -} - -class LurkingJackalsToken extends TokenImpl { - - public LurkingJackalsToken() { - super("Hound", "3/2 Hound creature"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.DOG); - power = new MageInt(3); - toughness = new MageInt(2); - } - - public LurkingJackalsToken(final LurkingJackalsToken token) { - super(token); - } - - @Override - public LurkingJackalsToken copy() { - return new LurkingJackalsToken(this); - } -} +package mage.cards.l; + +import mage.MageInt; +import mage.abilities.StateTriggeredAbility; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class LurkingJackals extends CardImpl { + + public LurkingJackals(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{B}"); + + // When an opponent has 10 or less life, if Lurking Jackals is an enchantment, it becomes a 3/2 Hound creature. + this.addAbility(new LurkingJackalsStateTriggeredAbility()); + } + + public LurkingJackals(final LurkingJackals card) { + super(card); + } + + @Override + public LurkingJackals copy() { + return new LurkingJackals(this); + } +} + +class LurkingJackalsStateTriggeredAbility extends StateTriggeredAbility { + + public LurkingJackalsStateTriggeredAbility() { + super(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new LurkingJackalsToken(), "", Duration.Custom, true, false)); + } + + public LurkingJackalsStateTriggeredAbility(final LurkingJackalsStateTriggeredAbility ability) { + super(ability); + } + + @Override + public LurkingJackalsStateTriggeredAbility copy() { + return new LurkingJackalsStateTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (game.getOpponents(getControllerId()) != null) { + for (UUID opponentId : game.getOpponents(getControllerId())) { + if (game.getPlayer(opponentId).getLife() <= 10) { + return true; + } + } + } + return false; + } + + @Override + public boolean checkInterveningIfClause(Game game) { + if (getSourcePermanentIfItStillExists(game) != null) { + return getSourcePermanentIfItStillExists(game).isEnchantment(); + } + return false; + } + + @Override + public boolean canTrigger(Game game) { + //20100716 - 603.8 + return !Boolean.TRUE.equals(game.getState().getValue(getSourceId().toString() + "triggered")); + } + + @Override + public void trigger(Game game, UUID controllerId) { + //20100716 - 603.8 + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.TRUE); + super.trigger(game, controllerId); + } + + @Override + public boolean resolve(Game game) { + //20100716 - 603.8 + boolean result = super.resolve(game); + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); + return result; + } + + @Override + public void counter(Game game) { + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); + } + + @Override + public String getRule() { + return "When an opponent has 10 or less life, if {this} is an enchantment, " + super.getRule(); + } + +} + +class LurkingJackalsToken extends TokenImpl { + + public LurkingJackalsToken() { + super("Hound", "3/2 Hound creature"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.DOG); + power = new MageInt(3); + toughness = new MageInt(2); + } + + public LurkingJackalsToken(final LurkingJackalsToken token) { + super(token); + } + + @Override + public LurkingJackalsToken copy() { + return new LurkingJackalsToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/l/LurkingSkirge.java b/Mage.Sets/src/mage/cards/l/LurkingSkirge.java index 8185db4b942..9188bb1cd44 100644 --- a/Mage.Sets/src/mage/cards/l/LurkingSkirge.java +++ b/Mage.Sets/src/mage/cards/l/LurkingSkirge.java @@ -1,70 +1,70 @@ -package mage.cards.l; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -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.StaticFilters; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.permanent.token.TokenImpl; - -/** - * - * @author jeffwadsworth - */ -public final class LurkingSkirge extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - - static { - filter.add(TargetController.OPPONENT.getOwnerPredicate()); - } - - public LurkingSkirge(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); - - // When a creature is put into an opponent's graveyard from the battlefield, if Lurking Skirge is an enchantment, Lurking Skirge becomes a 3/2 Imp creature with flying. - TriggeredAbility ability = new PutIntoGraveFromBattlefieldAllTriggeredAbility(new BecomesCreatureSourceEffect(new LurkingSkirgeToken(), "", Duration.WhileOnBattlefield, true, false), false, filter, false); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), - "When a creature is put into an opponent's graveyard from the battlefield, if {this} is an enchantment, {this} becomes a 3/2 Imp creature with flying.")); - } - - public LurkingSkirge(final LurkingSkirge card) { - super(card); - } - - @Override - public LurkingSkirge copy() { - return new LurkingSkirge(this); - } -} - -class LurkingSkirgeToken extends TokenImpl { - - public LurkingSkirgeToken() { - super("Imp", "3/2 Imp with flying."); - cardType.add(CardType.CREATURE); - subtype.add(SubType.IMP); - power = new MageInt(3); - toughness = new MageInt(2); - this.addAbility(FlyingAbility.getInstance()); - } - - public LurkingSkirgeToken(final LurkingSkirgeToken token) { - super(token); - } - - public LurkingSkirgeToken copy() { - return new LurkingSkirgeToken(this); - } -} +package mage.cards.l; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.PutIntoGraveFromBattlefieldAllTriggeredAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +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.StaticFilters; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.permanent.token.TokenImpl; + +/** + * + * @author jeffwadsworth + */ +public final class LurkingSkirge extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(TargetController.OPPONENT.getOwnerPredicate()); + } + + public LurkingSkirge(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}"); + + // When a creature is put into an opponent's graveyard from the battlefield, if Lurking Skirge is an enchantment, Lurking Skirge becomes a 3/2 Imp creature with flying. + TriggeredAbility ability = new PutIntoGraveFromBattlefieldAllTriggeredAbility(new BecomesCreatureSourceEffect(new LurkingSkirgeToken(), "", Duration.WhileOnBattlefield, true, false), false, filter, false); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), + "When a creature is put into an opponent's graveyard from the battlefield, if {this} is an enchantment, {this} becomes a 3/2 Imp creature with flying.")); + } + + public LurkingSkirge(final LurkingSkirge card) { + super(card); + } + + @Override + public LurkingSkirge copy() { + return new LurkingSkirge(this); + } +} + +class LurkingSkirgeToken extends TokenImpl { + + public LurkingSkirgeToken() { + super("Imp", "3/2 Imp with flying."); + cardType.add(CardType.CREATURE); + subtype.add(SubType.IMP); + power = new MageInt(3); + toughness = new MageInt(2); + this.addAbility(FlyingAbility.getInstance()); + } + + public LurkingSkirgeToken(final LurkingSkirgeToken token) { + super(token); + } + + public LurkingSkirgeToken copy() { + return new LurkingSkirgeToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/m/MercadianLift.java b/Mage.Sets/src/mage/cards/m/MercadianLift.java index 486b01d41ff..27aae041822 100644 --- a/Mage.Sets/src/mage/cards/m/MercadianLift.java +++ b/Mage.Sets/src/mage/cards/m/MercadianLift.java @@ -1,101 +1,101 @@ -package mage.cards.m; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.Cost; -import mage.abilities.costs.common.RemoveVariableCountersSourceCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ComparisonType; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.filter.FilterCard; -import mage.filter.common.FilterCreatureCard; -import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetCardInHand; - -/** - * - * @author jeffwadsworth - */ -public final class MercadianLift extends CardImpl { - - public MercadianLift(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); - - // {1}, {tap}: Put a winch counter on Mercadian Lift. - Ability ability = new SimpleActivatedAbility(new AddCountersSourceEffect(CounterType.WINCH.createInstance()), new ManaCostsImpl("{1}")); - ability.addCost(new TapSourceCost()); - this.addAbility(ability); - - // {tap}, Remove X winch counters from Mercadian Lift: You may put a creature card with converted mana cost X from your hand onto the battlefield. - Ability ability2 = new SimpleActivatedAbility(new MercadianLiftEffect(), new TapSourceCost()); - ability2.addCost(new RemoveVariableCountersSourceCost(CounterType.WINCH.createInstance(1))); - this.addAbility(ability2); - - } - - private MercadianLift(final MercadianLift card) { - super(card); - } - - @Override - public MercadianLift copy() { - return new MercadianLift(this); - } -} - -class MercadianLiftEffect extends OneShotEffect { - - public MercadianLiftEffect() { - super(Outcome.PutCardInPlay); - staticText = "You may put a creature card with converted mana cost X from your hand onto the battlefield"; - } - - public MercadianLiftEffect(final MercadianLiftEffect effect) { - super(effect); - } - - @Override - public MercadianLiftEffect copy() { - return new MercadianLiftEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - int numberOfCounters = 0; - for (Cost cost : source.getCosts()) { - if (cost instanceof RemoveVariableCountersSourceCost) { - numberOfCounters = ((RemoveVariableCountersSourceCost) cost).getAmount(); - } - } - System.out.println("The number is " + numberOfCounters); - FilterCreatureCard filter = new FilterCreatureCard(); - filter.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, numberOfCounters)); - filter.setMessage("creature card with converted mana cost " + numberOfCounters); - TargetCardInHand target = new TargetCardInHand(filter); - if (target.canChoose(controller.getId(), game) - && controller.chooseUse(Outcome.PutCardInPlay, "Put " + filter.getMessage() + " from your hand onto the battlefield?", source, game) - && controller.choose(Outcome.PutCardInPlay, target, source.getSourceId(), game)) { - target.setRequired(false); - Card card = game.getCard(target.getFirstTarget()); - if (card != null) { - return controller.moveCards(card, Zone.BATTLEFIELD, source, game); - } - } - } - return false; - } -} +package mage.cards.m; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.filter.FilterCard; +import mage.filter.common.FilterCreatureCard; +import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInHand; + +/** + * + * @author jeffwadsworth + */ +public final class MercadianLift extends CardImpl { + + public MercadianLift(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); + + // {1}, {tap}: Put a winch counter on Mercadian Lift. + Ability ability = new SimpleActivatedAbility(new AddCountersSourceEffect(CounterType.WINCH.createInstance()), new ManaCostsImpl("{1}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + + // {tap}, Remove X winch counters from Mercadian Lift: You may put a creature card with converted mana cost X from your hand onto the battlefield. + Ability ability2 = new SimpleActivatedAbility(new MercadianLiftEffect(), new TapSourceCost()); + ability2.addCost(new RemoveVariableCountersSourceCost(CounterType.WINCH.createInstance(1))); + this.addAbility(ability2); + + } + + private MercadianLift(final MercadianLift card) { + super(card); + } + + @Override + public MercadianLift copy() { + return new MercadianLift(this); + } +} + +class MercadianLiftEffect extends OneShotEffect { + + public MercadianLiftEffect() { + super(Outcome.PutCardInPlay); + staticText = "You may put a creature card with converted mana cost X from your hand onto the battlefield"; + } + + public MercadianLiftEffect(final MercadianLiftEffect effect) { + super(effect); + } + + @Override + public MercadianLiftEffect copy() { + return new MercadianLiftEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + int numberOfCounters = 0; + for (Cost cost : source.getCosts()) { + if (cost instanceof RemoveVariableCountersSourceCost) { + numberOfCounters = ((RemoveVariableCountersSourceCost) cost).getAmount(); + } + } + System.out.println("The number is " + numberOfCounters); + FilterCreatureCard filter = new FilterCreatureCard(); + filter.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, numberOfCounters)); + filter.setMessage("creature card with converted mana cost " + numberOfCounters); + TargetCardInHand target = new TargetCardInHand(filter); + if (target.canChoose(controller.getId(), game) + && controller.chooseUse(Outcome.PutCardInPlay, "Put " + filter.getMessage() + " from your hand onto the battlefield?", source, game) + && controller.choose(Outcome.PutCardInPlay, target, source.getSourceId(), game)) { + target.setRequired(false); + Card card = game.getCard(target.getFirstTarget()); + if (card != null) { + return controller.moveCards(card, Zone.BATTLEFIELD, source, game); + } + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/m/MetathranElite.java b/Mage.Sets/src/mage/cards/m/MetathranElite.java index cfeed06ccfe..4331ab2b463 100644 --- a/Mage.Sets/src/mage/cards/m/MetathranElite.java +++ b/Mage.Sets/src/mage/cards/m/MetathranElite.java @@ -1,47 +1,47 @@ -package mage.cards.m; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.EnchantedSourceCondition; -import mage.abilities.decorator.ConditionalRestrictionEffect; -import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; - -/** - * - * @author jeffwadsworth - */ -public final class MetathranElite extends CardImpl { - - private static final String rule = "{this} is unblockable as long as it's enchanted."; - - public MetathranElite(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); - - this.subtype.add(SubType.METATHRAN); - this.subtype.add(SubType.SOLDIER); - this.power = new MageInt(2); - this.toughness = new MageInt(3); - - // Metathran Elite is unblockable as long as it's enchanted. - ConditionalRestrictionEffect effect = new ConditionalRestrictionEffect( - new CantBeBlockedSourceEffect(), new EnchantedSourceCondition()); - effect.setText(rule); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); - - } - - public MetathranElite(final MetathranElite card) { - super(card); - } - - @Override - public MetathranElite copy() { - return new MetathranElite(this); - } -} +package mage.cards.m; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.EnchantedSourceCondition; +import mage.abilities.decorator.ConditionalRestrictionEffect; +import mage.abilities.effects.common.combat.CantBeBlockedSourceEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; + +/** + * + * @author jeffwadsworth + */ +public final class MetathranElite extends CardImpl { + + private static final String rule = "{this} is unblockable as long as it's enchanted."; + + public MetathranElite(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{U}"); + + this.subtype.add(SubType.METATHRAN); + this.subtype.add(SubType.SOLDIER); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Metathran Elite is unblockable as long as it's enchanted. + ConditionalRestrictionEffect effect = new ConditionalRestrictionEffect( + new CantBeBlockedSourceEffect(), new EnchantedSourceCondition()); + effect.setText(rule); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); + + } + + public MetathranElite(final MetathranElite card) { + super(card); + } + + @Override + public MetathranElite copy() { + return new MetathranElite(this); + } +} diff --git a/Mage.Sets/src/mage/cards/m/MindWhip.java b/Mage.Sets/src/mage/cards/m/MindWhip.java index d3eea1bf1ae..447b89154a3 100644 --- a/Mage.Sets/src/mage/cards/m/MindWhip.java +++ b/Mage.Sets/src/mage/cards/m/MindWhip.java @@ -1,99 +1,99 @@ -package mage.cards.m; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.effects.common.DoUnlessTargetPlayerOrTargetsControllerPaysEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.TargetController; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author jeffwadsworth - */ -public final class MindWhip extends CardImpl { - - public MindWhip(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}{B}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // At the beginning of the upkeep of enchanted creature's controller, that player may pay {3}. If they don't, Mind Whip deals 2 damage to that player and you tap that creature. - Effect effect = new DoUnlessTargetPlayerOrTargetsControllerPaysEffect(new MindWhipEffect(), - new ManaCostsImpl("{3}"), - ""); - effect.setText("that player may pay {3}. If they don't, {this} deals 2 damage to that player and you tap that creature."); - this.addAbility(new BeginningOfUpkeepTriggeredAbility( - effect, - TargetController.CONTROLLER_ATTACHED_TO, false)); - - } - - private MindWhip(final MindWhip card) { - super(card); - } - - @Override - public MindWhip copy() { - return new MindWhip(this); - } -} - -class MindWhipEffect extends OneShotEffect { - - public MindWhipEffect() { - super(Outcome.Neutral); - staticText = ""; - } - - public MindWhipEffect(final MindWhipEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controllerOfEnchantedCreature = game.getPlayer(targetPointer.getFirst(game, source)); - Permanent mindWhip = game.getPermanent(source.getSourceId()); - if (controllerOfEnchantedCreature != null - && mindWhip != null) { - Permanent enchantedCreature = game.getPermanent(mindWhip.getAttachedTo()); - if (enchantedCreature != null) { - Effect effect = new DamageTargetEffect(2); - effect.setTargetPointer(new FixedTarget(controllerOfEnchantedCreature.getId())); - effect.apply(game, source); - enchantedCreature.tap(game); - return true; - } - } - return false; - } - - @Override - public MindWhipEffect copy() { - return new MindWhipEffect(this); - } - -} +package mage.cards.m; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.DoUnlessTargetPlayerOrTargetsControllerPaysEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public final class MindWhip extends CardImpl { + + public MindWhip(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{B}{B}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // At the beginning of the upkeep of enchanted creature's controller, that player may pay {3}. If they don't, Mind Whip deals 2 damage to that player and you tap that creature. + Effect effect = new DoUnlessTargetPlayerOrTargetsControllerPaysEffect(new MindWhipEffect(), + new ManaCostsImpl("{3}"), + ""); + effect.setText("that player may pay {3}. If they don't, {this} deals 2 damage to that player and you tap that creature."); + this.addAbility(new BeginningOfUpkeepTriggeredAbility( + effect, + TargetController.CONTROLLER_ATTACHED_TO, false)); + + } + + private MindWhip(final MindWhip card) { + super(card); + } + + @Override + public MindWhip copy() { + return new MindWhip(this); + } +} + +class MindWhipEffect extends OneShotEffect { + + public MindWhipEffect() { + super(Outcome.Neutral); + staticText = ""; + } + + public MindWhipEffect(final MindWhipEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controllerOfEnchantedCreature = game.getPlayer(targetPointer.getFirst(game, source)); + Permanent mindWhip = game.getPermanent(source.getSourceId()); + if (controllerOfEnchantedCreature != null + && mindWhip != null) { + Permanent enchantedCreature = game.getPermanent(mindWhip.getAttachedTo()); + if (enchantedCreature != null) { + Effect effect = new DamageTargetEffect(2); + effect.setTargetPointer(new FixedTarget(controllerOfEnchantedCreature.getId())); + effect.apply(game, source); + enchantedCreature.tap(game); + return true; + } + } + return false; + } + + @Override + public MindWhipEffect copy() { + return new MindWhipEffect(this); + } + +} diff --git a/Mage.Sets/src/mage/cards/m/Misfortune.java b/Mage.Sets/src/mage/cards/m/Misfortune.java index a08781332fb..b2ebd15c9f5 100644 --- a/Mage.Sets/src/mage/cards/m/Misfortune.java +++ b/Mage.Sets/src/mage/cards/m/Misfortune.java @@ -1,88 +1,88 @@ -package mage.cards.m; - -import mage.abilities.Ability; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.counter.AddCountersAllEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.permanent.ControllerIdPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetOpponent; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class Misfortune extends CardImpl { - - public Misfortune(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}{R}{G}"); - - // An opponent chooses one - You put a +1/+1 counter on each creature you control and gain 4 life; or you put a -1/-1 counter on each creature that player controls and Misfortune deals 4 damage to that player. - this.getSpellAbility().addEffect(new MisfortuneEffect()); - this.getSpellAbility().addTarget(new TargetOpponent(true)); - } - - private Misfortune(final Misfortune card) { - super(card); - } - - @Override - public Misfortune copy() { - return new Misfortune(this); - } -} - -class MisfortuneEffect extends OneShotEffect { - - public MisfortuneEffect() { - super(Outcome.Neutral); - staticText = "An opponent chooses one - " - + "You put a +1/+1 counter on each creature you control and gain " - + "4 life; or you put a -1/-1 counter on each creature that player " - + "controls and Misfortune deals 4 damage to that player"; - } - - public MisfortuneEffect(final MisfortuneEffect effect) { - super(effect); - } - - @Override - public MisfortuneEffect copy() { - return new MisfortuneEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Player chosenOpponent = game.getPlayer(targetPointer.getFirst(game, source)); - if (controller != null - && chosenOpponent != null) { - if (chosenOpponent.chooseUse(Outcome.Neutral, "If you choose Yes, the controller puts a +1/+1 counter" - + "on each creature they control and they gain 4 life. If no, the controller puts a -1/-1 counter" - + "on each creature you control and {this} deals 4 damage to you.", source, game)) { - Effect putP1P1CounterOnEachControlledCreature = new AddCountersAllEffect( - CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()); - putP1P1CounterOnEachControlledCreature.apply(game, source); - controller.gainLife(4, game, source); - } else { - FilterCreaturePermanent filterOpponentCreatures = new FilterCreaturePermanent(); - filterOpponentCreatures.add(new ControllerIdPredicate(chosenOpponent.getId())); - Effect putM1M1CounterOnEachOpponentCreature = new AddCountersAllEffect( - CounterType.M1M1.createInstance(), filterOpponentCreatures); - putM1M1CounterOnEachOpponentCreature.apply(game, source); - chosenOpponent.damage(4, source.getSourceId(), game); - } - return true; - } - return false; - } -} +package mage.cards.m; + +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersAllEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.counters.CounterType; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class Misfortune extends CardImpl { + + public Misfortune(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{B}{R}{G}"); + + // An opponent chooses one - You put a +1/+1 counter on each creature you control and gain 4 life; or you put a -1/-1 counter on each creature that player controls and Misfortune deals 4 damage to that player. + this.getSpellAbility().addEffect(new MisfortuneEffect()); + this.getSpellAbility().addTarget(new TargetOpponent(true)); + } + + private Misfortune(final Misfortune card) { + super(card); + } + + @Override + public Misfortune copy() { + return new Misfortune(this); + } +} + +class MisfortuneEffect extends OneShotEffect { + + public MisfortuneEffect() { + super(Outcome.Neutral); + staticText = "An opponent chooses one - " + + "You put a +1/+1 counter on each creature you control and gain " + + "4 life; or you put a -1/-1 counter on each creature that player " + + "controls and Misfortune deals 4 damage to that player"; + } + + public MisfortuneEffect(final MisfortuneEffect effect) { + super(effect); + } + + @Override + public MisfortuneEffect copy() { + return new MisfortuneEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Player chosenOpponent = game.getPlayer(targetPointer.getFirst(game, source)); + if (controller != null + && chosenOpponent != null) { + if (chosenOpponent.chooseUse(Outcome.Neutral, "If you choose Yes, the controller puts a +1/+1 counter" + + "on each creature they control and they gain 4 life. If no, the controller puts a -1/-1 counter" + + "on each creature you control and {this} deals 4 damage to you.", source, game)) { + Effect putP1P1CounterOnEachControlledCreature = new AddCountersAllEffect( + CounterType.P1P1.createInstance(), new FilterControlledCreaturePermanent()); + putP1P1CounterOnEachControlledCreature.apply(game, source); + controller.gainLife(4, game, source); + } else { + FilterCreaturePermanent filterOpponentCreatures = new FilterCreaturePermanent(); + filterOpponentCreatures.add(new ControllerIdPredicate(chosenOpponent.getId())); + Effect putM1M1CounterOnEachOpponentCreature = new AddCountersAllEffect( + CounterType.M1M1.createInstance(), filterOpponentCreatures); + putM1M1CounterOnEachOpponentCreature.apply(game, source); + chosenOpponent.damage(4, source.getSourceId(), game); + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/m/MoggBombers.java b/Mage.Sets/src/mage/cards/m/MoggBombers.java index b0635fc2ebd..1bd116ccddd 100644 --- a/Mage.Sets/src/mage/cards/m/MoggBombers.java +++ b/Mage.Sets/src/mage/cards/m/MoggBombers.java @@ -1,60 +1,60 @@ -package mage.cards.m; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.DamageTargetEffect; -import mage.abilities.effects.common.SacrificeSourceEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.permanent.AnotherPredicate; -import mage.target.TargetPlayer; - -/** - * - * @author jeffwadsworth - */ -public final class MoggBombers extends CardImpl { - - private static final String rule = "When another creature enters the battlefield, sacrifice {this} and it deals 3 damage to target player."; - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature"); - - static { - filter.add(AnotherPredicate.instance); - } - - public MoggBombers(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); - - this.subtype.add(SubType.GOBLIN); - this.power = new MageInt(3); - this.toughness = new MageInt(4); - - // When another creature enters the battlefield, sacrifice Mogg Bombers and it deals 3 damage to target player. - Effect sacrificeMoggBombers = new SacrificeSourceEffect(); - Effect damageTargetPlayer = new DamageTargetEffect(3); - Ability ability = new EntersBattlefieldAllTriggeredAbility( - Zone.BATTLEFIELD, - sacrificeMoggBombers, - filter, false, rule); - ability.addEffect(damageTargetPlayer); - ability.addTarget(new TargetPlayer()); - this.addAbility(ability); - - } - - public MoggBombers(final MoggBombers card) { - super(card); - } - - @Override - public MoggBombers copy() { - return new MoggBombers(this); - } -} +package mage.cards.m; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.target.TargetPlayer; + +/** + * + * @author jeffwadsworth + */ +public final class MoggBombers extends CardImpl { + + private static final String rule = "When another creature enters the battlefield, sacrifice {this} and it deals 3 damage to target player."; + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("another creature"); + + static { + filter.add(AnotherPredicate.instance); + } + + public MoggBombers(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); + + this.subtype.add(SubType.GOBLIN); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // When another creature enters the battlefield, sacrifice Mogg Bombers and it deals 3 damage to target player. + Effect sacrificeMoggBombers = new SacrificeSourceEffect(); + Effect damageTargetPlayer = new DamageTargetEffect(3); + Ability ability = new EntersBattlefieldAllTriggeredAbility( + Zone.BATTLEFIELD, + sacrificeMoggBombers, + filter, false, rule); + ability.addEffect(damageTargetPlayer); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); + + } + + public MoggBombers(final MoggBombers card) { + super(card); + } + + @Override + public MoggBombers copy() { + return new MoggBombers(this); + } +} diff --git a/Mage.Sets/src/mage/cards/m/MonstrousHound.java b/Mage.Sets/src/mage/cards/m/MonstrousHound.java index 1eba97be678..967df9d7f0e 100644 --- a/Mage.Sets/src/mage/cards/m/MonstrousHound.java +++ b/Mage.Sets/src/mage/cards/m/MonstrousHound.java @@ -1,138 +1,138 @@ -package mage.cards.m; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.RestrictionEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.common.FilterControlledLandPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class MonstrousHound extends CardImpl { - - public MonstrousHound(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); - - this.subtype.add(SubType.DOG); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - - // Monstrous Hound can't attack unless you control more lands than defending player. - Effect effect = new CantAttackUnlessControllerControlsMoreLandsEffect(); - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, - effect.setText("{this} can't attack unless you control more lands than defending player"))); - - // Monstrous Hound can't block unless you control more lands than attacking player. - Effect effect2 = new CantBlockUnlessControllerControlsMoreLandsEffect(); - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, - effect2.setText("{this} can't block unless you control more lands than attacking player"))); - - } - - public MonstrousHound(final MonstrousHound card) { - super(card); - } - - @Override - public MonstrousHound copy() { - return new MonstrousHound(this); - } -} - -class CantAttackUnlessControllerControlsMoreLandsEffect extends RestrictionEffect { - - CantAttackUnlessControllerControlsMoreLandsEffect() { - super(Duration.WhileOnBattlefield); - } - - CantAttackUnlessControllerControlsMoreLandsEffect(final CantAttackUnlessControllerControlsMoreLandsEffect effect) { - super(effect); - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - return permanent.getId().equals(source.getSourceId()); - } - - @Override - public boolean canAttack(Permanent attacker, UUID defenderId, Ability source, Game game, boolean canUseChooseDialogs) { - if (defenderId == null) { - return true; - } - - UUID defendingPlayerId; - Player defender = game.getPlayer(defenderId); - if (defender == null) { - Permanent permanent = game.getPermanent(defenderId); - if (permanent != null) { - defendingPlayerId = permanent.getControllerId(); - } else { - return false; - } - } else { - defendingPlayerId = defenderId; - } - if (defendingPlayerId != null) { - return game.getBattlefield().countAll(new FilterControlledLandPermanent(), - source.getControllerId(), game) > game.getBattlefield().countAll(new FilterControlledLandPermanent(), - defendingPlayerId, game); - } else { - return true; - } - } - - @Override - public CantAttackUnlessControllerControlsMoreLandsEffect copy() { - return new CantAttackUnlessControllerControlsMoreLandsEffect(this); - } -} - -class CantBlockUnlessControllerControlsMoreLandsEffect extends RestrictionEffect { - - CantBlockUnlessControllerControlsMoreLandsEffect() { - super(Duration.WhileOnBattlefield); - } - - CantBlockUnlessControllerControlsMoreLandsEffect(final CantBlockUnlessControllerControlsMoreLandsEffect effect) { - super(effect); - } - - @Override - public CantBlockUnlessControllerControlsMoreLandsEffect copy() { - return new CantBlockUnlessControllerControlsMoreLandsEffect(this); - } - - @Override - public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { - if (attacker == null) { - return true; - } - UUID attackingPlayerId = attacker.getControllerId(); - if (attackingPlayerId != null) { - return game.getBattlefield().countAll(new FilterControlledLandPermanent(), - source.getControllerId(), game) > game.getBattlefield().countAll(new FilterControlledLandPermanent(), - attackingPlayerId, game); - } - return true; - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - return permanent.getId().equals(source.getSourceId()); - } -} +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.RestrictionEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.common.FilterControlledLandPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class MonstrousHound extends CardImpl { + + public MonstrousHound(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); + + this.subtype.add(SubType.DOG); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Monstrous Hound can't attack unless you control more lands than defending player. + Effect effect = new CantAttackUnlessControllerControlsMoreLandsEffect(); + this.addAbility(new SimpleStaticAbility( + Zone.BATTLEFIELD, + effect.setText("{this} can't attack unless you control more lands than defending player"))); + + // Monstrous Hound can't block unless you control more lands than attacking player. + Effect effect2 = new CantBlockUnlessControllerControlsMoreLandsEffect(); + this.addAbility(new SimpleStaticAbility( + Zone.BATTLEFIELD, + effect2.setText("{this} can't block unless you control more lands than attacking player"))); + + } + + public MonstrousHound(final MonstrousHound card) { + super(card); + } + + @Override + public MonstrousHound copy() { + return new MonstrousHound(this); + } +} + +class CantAttackUnlessControllerControlsMoreLandsEffect extends RestrictionEffect { + + CantAttackUnlessControllerControlsMoreLandsEffect() { + super(Duration.WhileOnBattlefield); + } + + CantAttackUnlessControllerControlsMoreLandsEffect(final CantAttackUnlessControllerControlsMoreLandsEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.getId().equals(source.getSourceId()); + } + + @Override + public boolean canAttack(Permanent attacker, UUID defenderId, Ability source, Game game, boolean canUseChooseDialogs) { + if (defenderId == null) { + return true; + } + + UUID defendingPlayerId; + Player defender = game.getPlayer(defenderId); + if (defender == null) { + Permanent permanent = game.getPermanent(defenderId); + if (permanent != null) { + defendingPlayerId = permanent.getControllerId(); + } else { + return false; + } + } else { + defendingPlayerId = defenderId; + } + if (defendingPlayerId != null) { + return game.getBattlefield().countAll(new FilterControlledLandPermanent(), + source.getControllerId(), game) > game.getBattlefield().countAll(new FilterControlledLandPermanent(), + defendingPlayerId, game); + } else { + return true; + } + } + + @Override + public CantAttackUnlessControllerControlsMoreLandsEffect copy() { + return new CantAttackUnlessControllerControlsMoreLandsEffect(this); + } +} + +class CantBlockUnlessControllerControlsMoreLandsEffect extends RestrictionEffect { + + CantBlockUnlessControllerControlsMoreLandsEffect() { + super(Duration.WhileOnBattlefield); + } + + CantBlockUnlessControllerControlsMoreLandsEffect(final CantBlockUnlessControllerControlsMoreLandsEffect effect) { + super(effect); + } + + @Override + public CantBlockUnlessControllerControlsMoreLandsEffect copy() { + return new CantBlockUnlessControllerControlsMoreLandsEffect(this); + } + + @Override + public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { + if (attacker == null) { + return true; + } + UUID attackingPlayerId = attacker.getControllerId(); + if (attackingPlayerId != null) { + return game.getBattlefield().countAll(new FilterControlledLandPermanent(), + source.getControllerId(), game) > game.getBattlefield().countAll(new FilterControlledLandPermanent(), + attackingPlayerId, game); + } + return true; + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.getId().equals(source.getSourceId()); + } +} diff --git a/Mage.Sets/src/mage/cards/m/Musician.java b/Mage.Sets/src/mage/cards/m/Musician.java index 886e9c8897c..b937ba9ff41 100644 --- a/Mage.Sets/src/mage/cards/m/Musician.java +++ b/Mage.Sets/src/mage/cards/m/Musician.java @@ -1,80 +1,80 @@ -package mage.cards.m; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.DynamicValueGenericManaCost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.dynamicvalue.common.CountersSourceCount; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.DestroySourceEffect; -import mage.abilities.effects.common.DoUnlessControllerPaysEffect; -import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; -import mage.abilities.effects.common.counter.AddCountersTargetEffect; -import mage.abilities.keyword.CumulativeUpkeepAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.counters.CounterType; -import mage.target.common.TargetCreaturePermanent; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class Musician extends CardImpl { - - public Musician(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); - - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.WIZARD); - this.power = new MageInt(1); - this.toughness = new MageInt(3); - - // Cumulative upkeep {1} - this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{1}"))); - - // {tap}: Put a music counter on target creature. If it doesn't have "At the beginning of your upkeep, destroy this creature unless you pay {1} for each music counter on it," it gains that ability. - Effect effect = new DoUnlessControllerPaysEffect( - new DestroySourceEffect(), - new DynamicValueGenericManaCost( - new CountersSourceCount(CounterType.MUSIC), - "{1} for each music counter on {this}")); - effect.setText("destroy this creature unless you pay {1} for each music counter on it"); - Ability ability = new BeginningOfUpkeepTriggeredAbility( - Zone.BATTLEFIELD, - effect, - TargetController.YOU, - false, - false, - "At the beginning of your upkeep, "); - Effect effect2 = new AddCountersTargetEffect(CounterType.MUSIC.createInstance()); - effect2.setText("Put a music counter on target creature"); - Effect effect3 = new GainAbilityTargetEffect( - ability, - Duration.WhileOnBattlefield); - effect3.setText("If it doesn't have \"At the beginning of your upkeep, destroy this creature unless you pay {1} for each music counter on it,\" it gains that ability"); - Ability ability2 = new SimpleActivatedAbility( - Zone.BATTLEFIELD, - effect2, - new TapSourceCost()); - ability2.addTarget(new TargetCreaturePermanent()); - ability2.addEffect(effect3); - this.addAbility(ability2); - - } - - private Musician(final Musician card) { - super(card); - } - - @Override - public Musician copy() { - return new Musician(this); - } -} - +package mage.cards.m; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.DynamicValueGenericManaCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DestroySourceEffect; +import mage.abilities.effects.common.DoUnlessControllerPaysEffect; +import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.abilities.keyword.CumulativeUpkeepAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.counters.CounterType; +import mage.target.common.TargetCreaturePermanent; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class Musician extends CardImpl { + + public Musician(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.WIZARD); + this.power = new MageInt(1); + this.toughness = new MageInt(3); + + // Cumulative upkeep {1} + this.addAbility(new CumulativeUpkeepAbility(new ManaCostsImpl("{1}"))); + + // {tap}: Put a music counter on target creature. If it doesn't have "At the beginning of your upkeep, destroy this creature unless you pay {1} for each music counter on it," it gains that ability. + Effect effect = new DoUnlessControllerPaysEffect( + new DestroySourceEffect(), + new DynamicValueGenericManaCost( + new CountersSourceCount(CounterType.MUSIC), + "{1} for each music counter on {this}")); + effect.setText("destroy this creature unless you pay {1} for each music counter on it"); + Ability ability = new BeginningOfUpkeepTriggeredAbility( + Zone.BATTLEFIELD, + effect, + TargetController.YOU, + false, + false, + "At the beginning of your upkeep, "); + Effect effect2 = new AddCountersTargetEffect(CounterType.MUSIC.createInstance()); + effect2.setText("Put a music counter on target creature"); + Effect effect3 = new GainAbilityTargetEffect( + ability, + Duration.WhileOnBattlefield); + effect3.setText("If it doesn't have \"At the beginning of your upkeep, destroy this creature unless you pay {1} for each music counter on it,\" it gains that ability"); + Ability ability2 = new SimpleActivatedAbility( + Zone.BATTLEFIELD, + effect2, + new TapSourceCost()); + ability2.addTarget(new TargetCreaturePermanent()); + ability2.addEffect(effect3); + this.addAbility(ability2); + + } + + private Musician(final Musician card) { + super(card); + } + + @Override + public Musician copy() { + return new Musician(this); + } +} + diff --git a/Mage.Sets/src/mage/cards/n/NullChamber.java b/Mage.Sets/src/mage/cards/n/NullChamber.java index 99b0bf51ec3..501e1a29cd3 100644 --- a/Mage.Sets/src/mage/cards/n/NullChamber.java +++ b/Mage.Sets/src/mage/cards/n/NullChamber.java @@ -1,159 +1,159 @@ -package mage.cards.n; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.common.AsEntersBattlefieldAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; -import mage.abilities.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.repository.CardRepository; -import mage.choices.Choice; -import mage.choices.ChoiceImpl; -import mage.constants.*; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetOpponent; -import mage.util.CardUtil; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class NullChamber extends CardImpl { - - public NullChamber(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}"); - - this.addSuperType(SuperType.WORLD); - - // As Null Chamber enters the battlefield, you and an opponent each name a card other than a basic land card. - // The named cards can't be played. - this.addAbility(new AsEntersBattlefieldAbility(new NullChamberChooseEffect())); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NullChamberReplacementEffect())); - - } - - public NullChamber(final NullChamber card) { - super(card); - } - - @Override - public NullChamber copy() { - return new NullChamber(this); - } -} - -class NullChamberChooseEffect extends OneShotEffect { - - public static final String INFO_KEY_CONTROLLER = "CONTROLLER_NAMED_CARD"; - public static final String INFO_KEY_OPPONENT = "OPPONENT_NAMED_CARD"; - - public NullChamberChooseEffect() { - super(Outcome.AIDontUseIt); - staticText = "you and an opponent each name a card other than a basic land card"; - } - - public NullChamberChooseEffect(final NullChamberChooseEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - TargetOpponent chosenOpponent = new TargetOpponent(true); - Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = game.getPermanentEntering(source.getSourceId()); - if (sourceObject == null) { - sourceObject = game.getObject(source.getSourceId()); - } - if (controller != null - && sourceObject != null - && controller.choose(Outcome.Neutral, chosenOpponent, source.getSourceId(), game)) { - Player opponent = game.getPlayer(chosenOpponent.getFirstTarget()); - Choice cardChoice = new ChoiceImpl(); - cardChoice.setChoices(CardRepository.instance.getNotBasicLandNames()); - cardChoice.setMessage("Choose a card name other than a basic land card name"); - cardChoice.clearChoice(); - if (controller.choose(Outcome.Detriment, cardChoice, game)) { - String cardName = cardChoice.getChoice(); - if (!game.isSimulation()) { - game.informPlayers(sourceObject.getLogName() + ", controller named card: [" + cardName + ']'); - } - game.getState().setValue(source.getSourceId().toString() + INFO_KEY_CONTROLLER, cardName); - if (sourceObject instanceof Permanent) { - ((Permanent) sourceObject).addInfo(INFO_KEY_CONTROLLER, CardUtil.addToolTipMarkTags("Named card (Controller): " + cardName), game); - } - } - cardChoice.clearChoice(); - if (opponent != null - && opponent.choose(Outcome.Detriment, cardChoice, game)) { - String cardName = cardChoice.getChoice(); - if (!game.isSimulation()) { - game.informPlayers(sourceObject.getLogName() + ",chosen opponent named card: [" + cardName + ']'); - } - game.getState().setValue(source.getSourceId().toString() + INFO_KEY_OPPONENT, cardName); - if (sourceObject instanceof Permanent) { - ((Permanent) sourceObject).addInfo(INFO_KEY_OPPONENT, CardUtil.addToolTipMarkTags("Named card (Opponent): " + cardName), game); - } - return true; - } - } - return false; - } - - @Override - public NullChamberChooseEffect copy() { - return new NullChamberChooseEffect(this); - } -} - -class NullChamberReplacementEffect extends ContinuousRuleModifyingEffectImpl { - - public NullChamberReplacementEffect() { - super(Duration.WhileOnBattlefield, Outcome.AIDontUseIt); - staticText = "The named cards can't be played"; - } - - public NullChamberReplacementEffect(final NullChamberReplacementEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public NullChamberReplacementEffect copy() { - return new NullChamberReplacementEffect(this); - } - - @Override - public String getInfoMessage(Ability source, GameEvent event, Game game) { - MageObject mageObject = game.getObject(source.getSourceId()); - if (mageObject != null) { - return "You can't cast a spell with that name (" + mageObject.getName() + " in play)."; - } - return null; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == EventType.CAST_SPELL; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - MageObject object = game.getObject(event.getSourceId()); - if (object != null) { - return object.getName().equals(game.getState().getValue(source.getSourceId().toString() + NullChamberChooseEffect.INFO_KEY_CONTROLLER)) - || object.getName().equals(game.getState().getValue(source.getSourceId().toString() + NullChamberChooseEffect.INFO_KEY_OPPONENT)); - } - return false; - } -} +package mage.cards.n; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.AsEntersBattlefieldAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.repository.CardRepository; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.constants.*; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetOpponent; +import mage.util.CardUtil; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class NullChamber extends CardImpl { + + public NullChamber(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}"); + + this.addSuperType(SuperType.WORLD); + + // As Null Chamber enters the battlefield, you and an opponent each name a card other than a basic land card. + // The named cards can't be played. + this.addAbility(new AsEntersBattlefieldAbility(new NullChamberChooseEffect())); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NullChamberReplacementEffect())); + + } + + public NullChamber(final NullChamber card) { + super(card); + } + + @Override + public NullChamber copy() { + return new NullChamber(this); + } +} + +class NullChamberChooseEffect extends OneShotEffect { + + public static final String INFO_KEY_CONTROLLER = "CONTROLLER_NAMED_CARD"; + public static final String INFO_KEY_OPPONENT = "OPPONENT_NAMED_CARD"; + + public NullChamberChooseEffect() { + super(Outcome.AIDontUseIt); + staticText = "you and an opponent each name a card other than a basic land card"; + } + + public NullChamberChooseEffect(final NullChamberChooseEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + TargetOpponent chosenOpponent = new TargetOpponent(true); + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = game.getPermanentEntering(source.getSourceId()); + if (sourceObject == null) { + sourceObject = game.getObject(source.getSourceId()); + } + if (controller != null + && sourceObject != null + && controller.choose(Outcome.Neutral, chosenOpponent, source.getSourceId(), game)) { + Player opponent = game.getPlayer(chosenOpponent.getFirstTarget()); + Choice cardChoice = new ChoiceImpl(); + cardChoice.setChoices(CardRepository.instance.getNotBasicLandNames()); + cardChoice.setMessage("Choose a card name other than a basic land card name"); + cardChoice.clearChoice(); + if (controller.choose(Outcome.Detriment, cardChoice, game)) { + String cardName = cardChoice.getChoice(); + if (!game.isSimulation()) { + game.informPlayers(sourceObject.getLogName() + ", controller named card: [" + cardName + ']'); + } + game.getState().setValue(source.getSourceId().toString() + INFO_KEY_CONTROLLER, cardName); + if (sourceObject instanceof Permanent) { + ((Permanent) sourceObject).addInfo(INFO_KEY_CONTROLLER, CardUtil.addToolTipMarkTags("Named card (Controller): " + cardName), game); + } + } + cardChoice.clearChoice(); + if (opponent != null + && opponent.choose(Outcome.Detriment, cardChoice, game)) { + String cardName = cardChoice.getChoice(); + if (!game.isSimulation()) { + game.informPlayers(sourceObject.getLogName() + ",chosen opponent named card: [" + cardName + ']'); + } + game.getState().setValue(source.getSourceId().toString() + INFO_KEY_OPPONENT, cardName); + if (sourceObject instanceof Permanent) { + ((Permanent) sourceObject).addInfo(INFO_KEY_OPPONENT, CardUtil.addToolTipMarkTags("Named card (Opponent): " + cardName), game); + } + return true; + } + } + return false; + } + + @Override + public NullChamberChooseEffect copy() { + return new NullChamberChooseEffect(this); + } +} + +class NullChamberReplacementEffect extends ContinuousRuleModifyingEffectImpl { + + public NullChamberReplacementEffect() { + super(Duration.WhileOnBattlefield, Outcome.AIDontUseIt); + staticText = "The named cards can't be played"; + } + + public NullChamberReplacementEffect(final NullChamberReplacementEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public NullChamberReplacementEffect copy() { + return new NullChamberReplacementEffect(this); + } + + @Override + public String getInfoMessage(Ability source, GameEvent event, Game game) { + MageObject mageObject = game.getObject(source.getSourceId()); + if (mageObject != null) { + return "You can't cast a spell with that name (" + mageObject.getName() + " in play)."; + } + return null; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.CAST_SPELL; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + MageObject object = game.getObject(event.getSourceId()); + if (object != null) { + return object.getName().equals(game.getState().getValue(source.getSourceId().toString() + NullChamberChooseEffect.INFO_KEY_CONTROLLER)) + || object.getName().equals(game.getState().getValue(source.getSourceId().toString() + NullChamberChooseEffect.INFO_KEY_OPPONENT)); + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/o/OathOfLimDul.java b/Mage.Sets/src/mage/cards/o/OathOfLimDul.java index d8e6aee4661..ac972f5a181 100644 --- a/Mage.Sets/src/mage/cards/o/OathOfLimDul.java +++ b/Mage.Sets/src/mage/cards/o/OathOfLimDul.java @@ -1,143 +1,143 @@ -package mage.cards.o; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.Cost; -import mage.abilities.costs.common.DiscardTargetCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.AnotherPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetCardInHand; -import mage.target.common.TargetControlledPermanent; - -/** - * - * @author jeffwadsworth - */ -public final class OathOfLimDul extends CardImpl { - - public OathOfLimDul(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}"); - - // Whenever you lose life, for each 1 life you lost, sacrifice a permanent other than Oath of Lim-Dul unless you discard a card. - this.addAbility(new OathOfLimDulTriggeredAbility()); - - // {B}{B}: Draw a card. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new ManaCostsImpl("{B}{B}"))); - - } - - private OathOfLimDul(final OathOfLimDul card) { - super(card); - } - - @Override - public OathOfLimDul copy() { - return new OathOfLimDul(this); - } -} - -class OathOfLimDulTriggeredAbility extends TriggeredAbilityImpl { - - public OathOfLimDulTriggeredAbility() { - super(Zone.BATTLEFIELD, new OathOfLimDulEffect()); - } - - public OathOfLimDulTriggeredAbility(final OathOfLimDulTriggeredAbility ability) { - super(ability); - } - - @Override - public OathOfLimDulTriggeredAbility copy() { - return new OathOfLimDulTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.LOST_LIFE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getPlayerId().equals(controllerId)) { - game.getState().setValue(sourceId.toString() + "oathOfLimDul", event.getAmount()); - return true; - } - return false; - } - - @Override - public String getRule() { - return "Whenever you lose life, for each 1 life you lost, sacrifice a permanent other than {this} unless you discard a card."; - } -} - -class OathOfLimDulEffect extends OneShotEffect { - - private static final FilterControlledPermanent filter = new FilterControlledPermanent("controlled permanent other than Oath of Lim-Dul to sacrifice"); - - static { - filter.add(AnotherPredicate.instance); - } - - public OathOfLimDulEffect() { - super(Outcome.Neutral); - } - - public OathOfLimDulEffect(final OathOfLimDulEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Boolean sacrificeDone = false; - int numberSacrificed = 0; - int numberToDiscard = 0; - int numberOfControlledPermanents = 0; - Player controller = game.getPlayer(source.getControllerId()); - int amountDamage = (int) game.getState().getValue(source.getSourceId().toString() + "oathOfLimDul"); - if (amountDamage > 0 - && controller != null) { - TargetControlledPermanent target = new TargetControlledPermanent(0, numberOfControlledPermanents, filter, true); - target.setNotTarget(true); - if (controller.choose(Outcome.Detriment, target, source.getSourceId(), game)) { - for (UUID targetPermanentId : target.getTargets()) { - Permanent permanent = game.getPermanent(targetPermanentId); - if (permanent != null - && permanent.sacrifice(source.getSourceId(), game)) { - numberSacrificed += 1; - sacrificeDone = true; - } - } - } - numberToDiscard = amountDamage - numberSacrificed; - Cost cost = new DiscardTargetCost(new TargetCardInHand(numberToDiscard, new FilterCard("card(s) in your hand to discard"))); - if (numberToDiscard > 0 - && cost.canPay(source, source.getSourceId(), controller.getId(), game)) { - return cost.pay(source, game, source.getSourceId(), controller.getId(), true); // discard cost paid simultaneously - } - } - return sacrificeDone; - } - - @Override - public OathOfLimDulEffect copy() { - return new OathOfLimDulEffect(this); - } - -} +package mage.cards.o; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.DiscardTargetCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCardInHand; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author jeffwadsworth + */ +public final class OathOfLimDul extends CardImpl { + + public OathOfLimDul(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}"); + + // Whenever you lose life, for each 1 life you lost, sacrifice a permanent other than Oath of Lim-Dul unless you discard a card. + this.addAbility(new OathOfLimDulTriggeredAbility()); + + // {B}{B}: Draw a card. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), new ManaCostsImpl("{B}{B}"))); + + } + + private OathOfLimDul(final OathOfLimDul card) { + super(card); + } + + @Override + public OathOfLimDul copy() { + return new OathOfLimDul(this); + } +} + +class OathOfLimDulTriggeredAbility extends TriggeredAbilityImpl { + + public OathOfLimDulTriggeredAbility() { + super(Zone.BATTLEFIELD, new OathOfLimDulEffect()); + } + + public OathOfLimDulTriggeredAbility(final OathOfLimDulTriggeredAbility ability) { + super(ability); + } + + @Override + public OathOfLimDulTriggeredAbility copy() { + return new OathOfLimDulTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.LOST_LIFE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getPlayerId().equals(controllerId)) { + game.getState().setValue(sourceId.toString() + "oathOfLimDul", event.getAmount()); + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever you lose life, for each 1 life you lost, sacrifice a permanent other than {this} unless you discard a card."; + } +} + +class OathOfLimDulEffect extends OneShotEffect { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("controlled permanent other than Oath of Lim-Dul to sacrifice"); + + static { + filter.add(AnotherPredicate.instance); + } + + public OathOfLimDulEffect() { + super(Outcome.Neutral); + } + + public OathOfLimDulEffect(final OathOfLimDulEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Boolean sacrificeDone = false; + int numberSacrificed = 0; + int numberToDiscard = 0; + int numberOfControlledPermanents = 0; + Player controller = game.getPlayer(source.getControllerId()); + int amountDamage = (int) game.getState().getValue(source.getSourceId().toString() + "oathOfLimDul"); + if (amountDamage > 0 + && controller != null) { + TargetControlledPermanent target = new TargetControlledPermanent(0, numberOfControlledPermanents, filter, true); + target.setNotTarget(true); + if (controller.choose(Outcome.Detriment, target, source.getSourceId(), game)) { + for (UUID targetPermanentId : target.getTargets()) { + Permanent permanent = game.getPermanent(targetPermanentId); + if (permanent != null + && permanent.sacrifice(source.getSourceId(), game)) { + numberSacrificed += 1; + sacrificeDone = true; + } + } + } + numberToDiscard = amountDamage - numberSacrificed; + Cost cost = new DiscardTargetCost(new TargetCardInHand(numberToDiscard, new FilterCard("card(s) in your hand to discard"))); + if (numberToDiscard > 0 + && cost.canPay(source, source.getSourceId(), controller.getId(), game)) { + return cost.pay(source, game, source.getSourceId(), controller.getId(), true); // discard cost paid simultaneously + } + } + return sacrificeDone; + } + + @Override + public OathOfLimDulEffect copy() { + return new OathOfLimDulEffect(this); + } + +} diff --git a/Mage.Sets/src/mage/cards/o/OpalAcrolith.java b/Mage.Sets/src/mage/cards/o/OpalAcrolith.java index 1708c54e16f..ec2e6b10942 100644 --- a/Mage.Sets/src/mage/cards/o/OpalAcrolith.java +++ b/Mage.Sets/src/mage/cards/o/OpalAcrolith.java @@ -1,76 +1,76 @@ -package mage.cards.o; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SpellCastOpponentTriggeredAbility; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.abilities.effects.common.continuous.BecomesEnchantmentSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.StaticFilters; -import mage.game.permanent.token.TokenImpl; - -/** - * - * @author jeffwadsworth - */ -public final class OpalAcrolith extends CardImpl { - - private static final FilterSpell filter = new FilterSpell("creature spell"); - - static { - filter.add(CardType.CREATURE.getPredicate()); - } - - public OpalAcrolith(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); - - // Whenever an opponent casts a creature spell, if Opal Acrolith is an enchantment, Opal Acrolith becomes a 2/4 Soldier creature. - TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new OpalAcrolithToken(), "", Duration.WhileOnBattlefield, true, false), - filter, false); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), - "Whenever an opponent casts a creature spell, if Opal Acrolith is an enchantment, Opal Acrolith becomes a 2/4 Soldier creature.")); - - // {0}: Opal Acrolith becomes an enchantment. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesEnchantmentSourceEffect(), new ManaCostsImpl("{0}"))); - - } - - public OpalAcrolith(final OpalAcrolith card) { - super(card); - } - - @Override - public OpalAcrolith copy() { - return new OpalAcrolith(this); - } -} - -class OpalAcrolithToken extends TokenImpl { - - public OpalAcrolithToken() { - super("Soldier", "2/4 Soldier creature"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.SOLDIER); - power = new MageInt(2); - toughness = new MageInt(4); - } - - public OpalAcrolithToken(final OpalAcrolithToken token) { - super(token); - } - - public OpalAcrolithToken copy() { - return new OpalAcrolithToken(this); - } -} +package mage.cards.o; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SpellCastOpponentTriggeredAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.abilities.effects.common.continuous.BecomesEnchantmentSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; + +/** + * + * @author jeffwadsworth + */ +public final class OpalAcrolith extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("creature spell"); + + static { + filter.add(CardType.CREATURE.getPredicate()); + } + + public OpalAcrolith(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); + + // Whenever an opponent casts a creature spell, if Opal Acrolith is an enchantment, Opal Acrolith becomes a 2/4 Soldier creature. + TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new OpalAcrolithToken(), "", Duration.WhileOnBattlefield, true, false), + filter, false); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), + "Whenever an opponent casts a creature spell, if Opal Acrolith is an enchantment, Opal Acrolith becomes a 2/4 Soldier creature.")); + + // {0}: Opal Acrolith becomes an enchantment. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesEnchantmentSourceEffect(), new ManaCostsImpl("{0}"))); + + } + + public OpalAcrolith(final OpalAcrolith card) { + super(card); + } + + @Override + public OpalAcrolith copy() { + return new OpalAcrolith(this); + } +} + +class OpalAcrolithToken extends TokenImpl { + + public OpalAcrolithToken() { + super("Soldier", "2/4 Soldier creature"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.SOLDIER); + power = new MageInt(2); + toughness = new MageInt(4); + } + + public OpalAcrolithToken(final OpalAcrolithToken token) { + super(token); + } + + public OpalAcrolithToken copy() { + return new OpalAcrolithToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/o/OpalAvenger.java b/Mage.Sets/src/mage/cards/o/OpalAvenger.java index 6374fa3848f..085b2b40eef 100644 --- a/Mage.Sets/src/mage/cards/o/OpalAvenger.java +++ b/Mage.Sets/src/mage/cards/o/OpalAvenger.java @@ -1,122 +1,122 @@ -package mage.cards.o; - -import mage.MageInt; -import mage.abilities.StateTriggeredAbility; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.token.TokenImpl; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class OpalAvenger extends CardImpl { - - public OpalAvenger(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); - - // When you have 10 or less life, if Opal Avenger is an enchantment, Opal Avenger becomes a 3/5 Soldier creature. - this.addAbility(new OpalAvengerStateTriggeredAbility()); - } - - public OpalAvenger(final OpalAvenger card) { - super(card); - } - - @Override - public OpalAvenger copy() { - return new OpalAvenger(this); - } -} - -class OpalAvengerStateTriggeredAbility extends StateTriggeredAbility { - - public OpalAvengerStateTriggeredAbility() { - super(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new OpalAvengerToken(), "", Duration.Custom, true, false)); - } - - public OpalAvengerStateTriggeredAbility(final OpalAvengerStateTriggeredAbility ability) { - super(ability); - } - - @Override - public OpalAvengerStateTriggeredAbility copy() { - return new OpalAvengerStateTriggeredAbility(this); - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (game.getState().getPlayer(getControllerId()) != null) { - return game.getState().getPlayer(getControllerId()).getLife() <= 10; - } - return false; - } - - @Override - public boolean checkInterveningIfClause(Game game) { - if (getSourcePermanentIfItStillExists(game) != null) { - return getSourcePermanentIfItStillExists(game).isEnchantment(); - } - return false; - } - - @Override - public boolean canTrigger(Game game) { - //20100716 - 603.8 - return !Boolean.TRUE.equals(game.getState().getValue(getSourceId().toString() + "triggered")); - } - - @Override - public void trigger(Game game, UUID controllerId) { - //20100716 - 603.8 - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.TRUE); - super.trigger(game, controllerId); - } - - @Override - public boolean resolve(Game game) { - //20100716 - 603.8 - boolean result = super.resolve(game); - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); - return result; - } - - @Override - public void counter(Game game) { - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); - } - - @Override - public String getRule() { - return "When you have 10 or less life, if {this} is an enchantment, " + super.getRule(); - } - -} - -class OpalAvengerToken extends TokenImpl { - - public OpalAvengerToken() { - super("Soldier", "3/5 Soldier creature"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.SOLDIER); - power = new MageInt(3); - toughness = new MageInt(5); - } - - public OpalAvengerToken(final OpalAvengerToken token) { - super(token); - } - - @Override - public OpalAvengerToken copy() { - return new OpalAvengerToken(this); - } -} +package mage.cards.o; + +import mage.MageInt; +import mage.abilities.StateTriggeredAbility; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class OpalAvenger extends CardImpl { + + public OpalAvenger(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); + + // When you have 10 or less life, if Opal Avenger is an enchantment, Opal Avenger becomes a 3/5 Soldier creature. + this.addAbility(new OpalAvengerStateTriggeredAbility()); + } + + public OpalAvenger(final OpalAvenger card) { + super(card); + } + + @Override + public OpalAvenger copy() { + return new OpalAvenger(this); + } +} + +class OpalAvengerStateTriggeredAbility extends StateTriggeredAbility { + + public OpalAvengerStateTriggeredAbility() { + super(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new OpalAvengerToken(), "", Duration.Custom, true, false)); + } + + public OpalAvengerStateTriggeredAbility(final OpalAvengerStateTriggeredAbility ability) { + super(ability); + } + + @Override + public OpalAvengerStateTriggeredAbility copy() { + return new OpalAvengerStateTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (game.getState().getPlayer(getControllerId()) != null) { + return game.getState().getPlayer(getControllerId()).getLife() <= 10; + } + return false; + } + + @Override + public boolean checkInterveningIfClause(Game game) { + if (getSourcePermanentIfItStillExists(game) != null) { + return getSourcePermanentIfItStillExists(game).isEnchantment(); + } + return false; + } + + @Override + public boolean canTrigger(Game game) { + //20100716 - 603.8 + return !Boolean.TRUE.equals(game.getState().getValue(getSourceId().toString() + "triggered")); + } + + @Override + public void trigger(Game game, UUID controllerId) { + //20100716 - 603.8 + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.TRUE); + super.trigger(game, controllerId); + } + + @Override + public boolean resolve(Game game) { + //20100716 - 603.8 + boolean result = super.resolve(game); + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); + return result; + } + + @Override + public void counter(Game game) { + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); + } + + @Override + public String getRule() { + return "When you have 10 or less life, if {this} is an enchantment, " + super.getRule(); + } + +} + +class OpalAvengerToken extends TokenImpl { + + public OpalAvengerToken() { + super("Soldier", "3/5 Soldier creature"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.SOLDIER); + power = new MageInt(3); + toughness = new MageInt(5); + } + + public OpalAvengerToken(final OpalAvengerToken token) { + super(token); + } + + @Override + public OpalAvengerToken copy() { + return new OpalAvengerToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/o/OpalTitan.java b/Mage.Sets/src/mage/cards/o/OpalTitan.java index 5784ded4cff..bbbbc452f79 100644 --- a/Mage.Sets/src/mage/cards/o/OpalTitan.java +++ b/Mage.Sets/src/mage/cards/o/OpalTitan.java @@ -1,141 +1,141 @@ -package mage.cards.o; - -import java.util.UUID; -import mage.MageObjectReference; -import mage.ObjectColor; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.SpellCastOpponentTriggeredAbility; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.effects.common.continuous.SourceEffect; -import mage.abilities.keyword.ProtectionAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.DependencyType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SetTargetPointer; -import mage.constants.SubLayer; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.StaticFilters; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.stack.Spell; - -/** - * - * @author jeffwadsworth - */ -public final class OpalTitan extends CardImpl { - - private static final FilterSpell filter = new FilterSpell("creature spell"); - - static { - filter.add(CardType.CREATURE.getPredicate()); - } - - public OpalTitan(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}"); - - // When an opponent casts a creature spell, if Opal Titan is an enchantment, Opal Titan becomes a 4/4 Giant creature with protection from each of that spell's colors. - TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new OpalTitanBecomesCreatureEffect(), - filter, false, SetTargetPointer.SPELL); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), - "When an opponent casts a creature spell, if Opal Titan is an enchantment, Opal Titan becomes a 4/4 Giant creature with protection from each of that spell's colors.")); - - } - - public OpalTitan(final OpalTitan card) { - super(card); - } - - @Override - public OpalTitan copy() { - return new OpalTitan(this); - } -} - -class OpalTitanBecomesCreatureEffect extends ContinuousEffectImpl implements SourceEffect { - - public OpalTitanBecomesCreatureEffect() { - super(Duration.WhileOnBattlefield, Outcome.BecomeCreature); - staticText = "{this} becomes a 4/4 Giant creature with protection from each of that spell's colors."; - this.addDependencyType(DependencyType.BecomeCreature); - } - - public OpalTitanBecomesCreatureEffect(final OpalTitanBecomesCreatureEffect effect) { - super(effect); - } - - @Override - public OpalTitanBecomesCreatureEffect copy() { - return new OpalTitanBecomesCreatureEffect(this); - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - affectedObjectList.add(new MageObjectReference(source.getSourceId(), game)); - Spell creatureSpellCast = game.getSpell(targetPointer.getFirst(game, source)); - if (creatureSpellCast != null - && creatureSpellCast.getColor(game).hasColor()) { - game.getState().setValue("opalTitanColor" + source.getSourceId(), creatureSpellCast.getColor(game)); - } - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Permanent permanent = affectedObjectList.get(0).getPermanent(game); - if (permanent != null) { - switch (layer) { - case TypeChangingEffects_4: - if (sublayer == SubLayer.NA) { - permanent.getCardType().clear(); - permanent.addCardType(CardType.CREATURE); - permanent.getSubtype(game).add(SubType.GIANT); - } - break; - case AbilityAddingRemovingEffects_6: - if (sublayer == SubLayer.NA) { - if (game.getState().getValue("opalTitanColor" + source.getSourceId()) != null) { - for (ObjectColor color : ((ObjectColor) game.getState().getValue("opalTitanColor" + source.getSourceId())).getColors()) { - if (!permanent.getAbilities().contains(ProtectionAbility.from(color))) { - permanent.addAbility(ProtectionAbility.from(color)); - } - } - } - } - break; - case PTChangingEffects_7: - if ((sublayer == SubLayer.CharacteristicDefining_7a) - || (sublayer == SubLayer.SetPT_7b)) { - permanent.getPower().setValue(4); - permanent.getToughness().setValue(4); - } - break; - } - return true; - } - this.discard(); - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.PTChangingEffects_7 - || layer == Layer.AbilityAddingRemovingEffects_6 - || layer == Layer.TypeChangingEffects_4; - } - -} +package mage.cards.o; + +import java.util.UUID; +import mage.MageObjectReference; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.SpellCastOpponentTriggeredAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.continuous.SourceEffect; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.DependencyType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SetTargetPointer; +import mage.constants.SubLayer; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.stack.Spell; + +/** + * + * @author jeffwadsworth + */ +public final class OpalTitan extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("creature spell"); + + static { + filter.add(CardType.CREATURE.getPredicate()); + } + + public OpalTitan(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}{W}"); + + // When an opponent casts a creature spell, if Opal Titan is an enchantment, Opal Titan becomes a 4/4 Giant creature with protection from each of that spell's colors. + TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new OpalTitanBecomesCreatureEffect(), + filter, false, SetTargetPointer.SPELL); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), + "When an opponent casts a creature spell, if Opal Titan is an enchantment, Opal Titan becomes a 4/4 Giant creature with protection from each of that spell's colors.")); + + } + + public OpalTitan(final OpalTitan card) { + super(card); + } + + @Override + public OpalTitan copy() { + return new OpalTitan(this); + } +} + +class OpalTitanBecomesCreatureEffect extends ContinuousEffectImpl implements SourceEffect { + + public OpalTitanBecomesCreatureEffect() { + super(Duration.WhileOnBattlefield, Outcome.BecomeCreature); + staticText = "{this} becomes a 4/4 Giant creature with protection from each of that spell's colors."; + this.addDependencyType(DependencyType.BecomeCreature); + } + + public OpalTitanBecomesCreatureEffect(final OpalTitanBecomesCreatureEffect effect) { + super(effect); + } + + @Override + public OpalTitanBecomesCreatureEffect copy() { + return new OpalTitanBecomesCreatureEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + affectedObjectList.add(new MageObjectReference(source.getSourceId(), game)); + Spell creatureSpellCast = game.getSpell(targetPointer.getFirst(game, source)); + if (creatureSpellCast != null + && creatureSpellCast.getColor(game).hasColor()) { + game.getState().setValue("opalTitanColor" + source.getSourceId(), creatureSpellCast.getColor(game)); + } + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Permanent permanent = affectedObjectList.get(0).getPermanent(game); + if (permanent != null) { + switch (layer) { + case TypeChangingEffects_4: + if (sublayer == SubLayer.NA) { + permanent.getCardType().clear(); + permanent.addCardType(CardType.CREATURE); + permanent.getSubtype(game).add(SubType.GIANT); + } + break; + case AbilityAddingRemovingEffects_6: + if (sublayer == SubLayer.NA) { + if (game.getState().getValue("opalTitanColor" + source.getSourceId()) != null) { + for (ObjectColor color : ((ObjectColor) game.getState().getValue("opalTitanColor" + source.getSourceId())).getColors()) { + if (!permanent.getAbilities().contains(ProtectionAbility.from(color))) { + permanent.addAbility(ProtectionAbility.from(color)); + } + } + } + } + break; + case PTChangingEffects_7: + if ((sublayer == SubLayer.CharacteristicDefining_7a) + || (sublayer == SubLayer.SetPT_7b)) { + permanent.getPower().setValue(4); + permanent.getToughness().setValue(4); + } + break; + } + return true; + } + this.discard(); + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.PTChangingEffects_7 + || layer == Layer.AbilityAddingRemovingEffects_6 + || layer == Layer.TypeChangingEffects_4; + } + +} diff --git a/Mage.Sets/src/mage/cards/o/Outmaneuver.java b/Mage.Sets/src/mage/cards/o/Outmaneuver.java index 7e005e5bb7e..cc1186864d3 100644 --- a/Mage.Sets/src/mage/cards/o/Outmaneuver.java +++ b/Mage.Sets/src/mage/cards/o/Outmaneuver.java @@ -1,96 +1,96 @@ -package mage.cards.o; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.SpellAbility; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AsThoughEffectType; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.permanent.BlockedPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetCreaturePermanent; - -/** - * - * @author jeffwadsworth - */ -public final class Outmaneuver extends CardImpl { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - - static { - filter.add(BlockedPredicate.instance); - } - - public Outmaneuver(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{R}"); - - // X target blocked creatures assign their combat damage this turn as though they weren't blocked. - this.getSpellAbility().addEffect(new OutmaneuverEffect()); - this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); - - } - - public Outmaneuver(final Outmaneuver card) { - super(card); - } - - @Override - public Outmaneuver copy() { - return new Outmaneuver(this); - } - - @Override - public void adjustTargets(Ability ability, Game game) { - if (ability instanceof SpellAbility) { - ability.getTargets().clear(); - int numberOfTargets = ability.getManaCostsToPay().getX(); - numberOfTargets = Math.min(game.getBattlefield().getAllActivePermanents(filter, - ability.getControllerId(), game).size(), numberOfTargets); - ability.addTarget(new TargetCreaturePermanent(numberOfTargets, - numberOfTargets, filter, false)); - } - } -} - -class OutmaneuverEffect extends AsThoughEffectImpl { - - public OutmaneuverEffect() { - super(AsThoughEffectType.DAMAGE_NOT_BLOCKED, Duration.EndOfTurn, Outcome.Damage); - this.staticText = "X target blocked creatures assign their combat damage this turn as though they weren't blocked."; - } - - public OutmaneuverEffect(OutmaneuverEffect effect) { - super(effect); - } - - @Override - public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { - Permanent blockedCreature = game.getPermanent(sourceId); - if (blockedCreature != null) { - Player controller = game.getPlayer(blockedCreature.getControllerId()); - if (controller != null) { - return controller.chooseUse(Outcome.Damage, "Do you wish to assign combat damage for " - + blockedCreature.getLogName() + " as though it weren't blocked?", source, game); - } - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public OutmaneuverEffect copy() { - return new OutmaneuverEffect(this); - } -} +package mage.cards.o; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.BlockedPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public final class Outmaneuver extends CardImpl { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(BlockedPredicate.instance); + } + + public Outmaneuver(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{X}{R}"); + + // X target blocked creatures assign their combat damage this turn as though they weren't blocked. + this.getSpellAbility().addEffect(new OutmaneuverEffect()); + this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); + + } + + public Outmaneuver(final Outmaneuver card) { + super(card); + } + + @Override + public Outmaneuver copy() { + return new Outmaneuver(this); + } + + @Override + public void adjustTargets(Ability ability, Game game) { + if (ability instanceof SpellAbility) { + ability.getTargets().clear(); + int numberOfTargets = ability.getManaCostsToPay().getX(); + numberOfTargets = Math.min(game.getBattlefield().getAllActivePermanents(filter, + ability.getControllerId(), game).size(), numberOfTargets); + ability.addTarget(new TargetCreaturePermanent(numberOfTargets, + numberOfTargets, filter, false)); + } + } +} + +class OutmaneuverEffect extends AsThoughEffectImpl { + + public OutmaneuverEffect() { + super(AsThoughEffectType.DAMAGE_NOT_BLOCKED, Duration.EndOfTurn, Outcome.Damage); + this.staticText = "X target blocked creatures assign their combat damage this turn as though they weren't blocked."; + } + + public OutmaneuverEffect(OutmaneuverEffect effect) { + super(effect); + } + + @Override + public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { + Permanent blockedCreature = game.getPermanent(sourceId); + if (blockedCreature != null) { + Player controller = game.getPlayer(blockedCreature.getControllerId()); + if (controller != null) { + return controller.chooseUse(Outcome.Damage, "Do you wish to assign combat damage for " + + blockedCreature.getLogName() + " as though it weren't blocked?", source, game); + } + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public OutmaneuverEffect copy() { + return new OutmaneuverEffect(this); + } +} diff --git a/Mage.Sets/src/mage/cards/p/PeaceTalks.java b/Mage.Sets/src/mage/cards/p/PeaceTalks.java index bff35048f32..79d01f60435 100644 --- a/Mage.Sets/src/mage/cards/p/PeaceTalks.java +++ b/Mage.Sets/src/mage/cards/p/PeaceTalks.java @@ -1,176 +1,176 @@ -package mage.cards.p; - -import mage.abilities.Ability; -import mage.abilities.effects.ContinuousRuleModifyingEffect; -import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.RestrictionEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class PeaceTalks extends CardImpl { - - public PeaceTalks(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{W}"); - - // This turn and next turn, creatures can't attack, - // and players and permanents can't be the targets - // of spells or activated abilities. - this.getSpellAbility().addEffect(new PeaceTalksEffect()); - - } - - private PeaceTalks(final PeaceTalks card) { - super(card); - } - - @Override - public PeaceTalks copy() { - return new PeaceTalks(this); - } -} - -class PeaceTalksEffect extends OneShotEffect { - - public PeaceTalksEffect() { - super(Outcome.Neutral); - this.staticText = "This turn and next turn, creatures can't attack," - + "and players and permanents can't be the targets of spells " - + "or activated abilities"; - } - - public PeaceTalksEffect(final PeaceTalksEffect effect) { - super(effect); - } - - @Override - public PeaceTalksEffect copy() { - return new PeaceTalksEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - RestrictionEffect effect = new PeaceTalksCantAttackEffect(); - game.addEffect(effect, source); - ContinuousRuleModifyingEffect effect2 = new PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities(); - game.addEffect(effect2, source); - return true; - } -} - -class PeaceTalksCantAttackEffect extends RestrictionEffect { - - int startedTurnNum = 0; - - public PeaceTalksCantAttackEffect() { - super(Duration.Custom); - staticText = "Creatures can't attack this turn and next turn"; - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - startedTurnNum = game.getTurnNum(); - } - - public PeaceTalksCantAttackEffect(final PeaceTalksCantAttackEffect effect) { - super(effect); - this.startedTurnNum = effect.startedTurnNum; - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - return permanent.isCreature(); - } - - @Override - public boolean canAttack(Game game, boolean canUseChooseDialogs) { - return false; - } - - @Override - public PeaceTalksCantAttackEffect copy() { - return new PeaceTalksCantAttackEffect(this); - } - - @Override - public boolean isInactive(Ability source, Game game) { - if (game.getTurnNum() > (startedTurnNum + 1)) { - this.discard(); - return true; - } - return false; - } -} - -class PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities extends ContinuousRuleModifyingEffectImpl { - - int startedTurnNum = 0; - - public PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities() { - super(Duration.Custom, Outcome.Neutral); - staticText = "players and permanents can't be the targets of spells or activated abilities"; - } - - public PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities(final PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities effect) { - super(effect); - this.startedTurnNum = effect.startedTurnNum; - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - startedTurnNum = game.getTurnNum(); - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.CAST_SPELL - || event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { - if (event.getTargetId().equals(playerId)) { - return false; - } - } - for (Permanent permanent : game.getBattlefield().getAllActivePermanents()) { - if (event.getTargetId().equals(permanent.getId())) { - return false; - } - } - return true; - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities copy() { - return new PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities(this); - } - - @Override - public boolean isInactive(Ability source, Game game) { - if (game.getTurnNum() > (startedTurnNum + 1)) { - this.discard(); - return true; - } - return false; - } -} +package mage.cards.p; + +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousRuleModifyingEffect; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.RestrictionEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class PeaceTalks extends CardImpl { + + public PeaceTalks(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{W}"); + + // This turn and next turn, creatures can't attack, + // and players and permanents can't be the targets + // of spells or activated abilities. + this.getSpellAbility().addEffect(new PeaceTalksEffect()); + + } + + private PeaceTalks(final PeaceTalks card) { + super(card); + } + + @Override + public PeaceTalks copy() { + return new PeaceTalks(this); + } +} + +class PeaceTalksEffect extends OneShotEffect { + + public PeaceTalksEffect() { + super(Outcome.Neutral); + this.staticText = "This turn and next turn, creatures can't attack," + + "and players and permanents can't be the targets of spells " + + "or activated abilities"; + } + + public PeaceTalksEffect(final PeaceTalksEffect effect) { + super(effect); + } + + @Override + public PeaceTalksEffect copy() { + return new PeaceTalksEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + RestrictionEffect effect = new PeaceTalksCantAttackEffect(); + game.addEffect(effect, source); + ContinuousRuleModifyingEffect effect2 = new PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities(); + game.addEffect(effect2, source); + return true; + } +} + +class PeaceTalksCantAttackEffect extends RestrictionEffect { + + int startedTurnNum = 0; + + public PeaceTalksCantAttackEffect() { + super(Duration.Custom); + staticText = "Creatures can't attack this turn and next turn"; + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + startedTurnNum = game.getTurnNum(); + } + + public PeaceTalksCantAttackEffect(final PeaceTalksCantAttackEffect effect) { + super(effect); + this.startedTurnNum = effect.startedTurnNum; + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.isCreature(); + } + + @Override + public boolean canAttack(Game game, boolean canUseChooseDialogs) { + return false; + } + + @Override + public PeaceTalksCantAttackEffect copy() { + return new PeaceTalksCantAttackEffect(this); + } + + @Override + public boolean isInactive(Ability source, Game game) { + if (game.getTurnNum() > (startedTurnNum + 1)) { + this.discard(); + return true; + } + return false; + } +} + +class PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities extends ContinuousRuleModifyingEffectImpl { + + int startedTurnNum = 0; + + public PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities() { + super(Duration.Custom, Outcome.Neutral); + staticText = "players and permanents can't be the targets of spells or activated abilities"; + } + + public PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities(final PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities effect) { + super(effect); + this.startedTurnNum = effect.startedTurnNum; + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + startedTurnNum = game.getTurnNum(); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL + || event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { + if (event.getTargetId().equals(playerId)) { + return false; + } + } + for (Permanent permanent : game.getBattlefield().getAllActivePermanents()) { + if (event.getTargetId().equals(permanent.getId())) { + return false; + } + } + return true; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities copy() { + return new PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities(this); + } + + @Override + public boolean isInactive(Ability source, Game game) { + if (game.getTurnNum() > (startedTurnNum + 1)) { + this.discard(); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/p/PhantasmalMount.java b/Mage.Sets/src/mage/cards/p/PhantasmalMount.java index 549941c397c..9c00008da8c 100644 --- a/Mage.Sets/src/mage/cards/p/PhantasmalMount.java +++ b/Mage.Sets/src/mage/cards/p/PhantasmalMount.java @@ -1,156 +1,156 @@ -package mage.cards.p; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.SacrificeTargetEffect; -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.ComparisonType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.predicate.mageobject.ToughnessPredicate; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author jeffwadsworth - */ -public final class PhantasmalMount extends CardImpl { - - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("with toughness 2 or less"); - - static { - filter.add(new ToughnessPredicate(ComparisonType.FEWER_THAN, 3)); - } - - public PhantasmalMount(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); - - this.subtype.add(SubType.ILLUSION); - this.subtype.add(SubType.HORSE); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // {tap}: Target creature you control with toughness 2 or less gets +1/+1 and gains flying until end of turn. When Phantasmal Mount leaves the battlefield this turn, sacrifice that creature. When the creature leaves the battlefield this turn, sacrifice Phantasmal Mount. - Ability activatedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PhantasmalMountEffect(), new TapSourceCost()); - activatedAbility.addTarget(new TargetControlledCreaturePermanent(filter)); - this.addAbility(activatedAbility); - - } - - private PhantasmalMount(final PhantasmalMount card) { - super(card); - } - - @Override - public PhantasmalMount copy() { - return new PhantasmalMount(this); - } -} - -class PhantasmalMountEffect extends OneShotEffect { - - PhantasmalMountEffect() { - super(Outcome.Neutral); - staticText = "Target creature you control with toughness 2 or less gets +1/+1 " - + "and gains flying until end of turn. When {this} leaves the battlefield this turn, " - + "sacrifice that creature. When the creature leaves the battlefield this turn, sacrifice {this}"; - } - - PhantasmalMountEffect(PhantasmalMountEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent targetCreature = game.getPermanent(source.getFirstTarget()); - if (targetCreature != null) { - ContinuousEffect effect = new BoostTargetEffect(1, 1, Duration.EndOfTurn); - effect.setTargetPointer(new FixedTarget(source.getFirstTarget())); - game.addEffect(effect, source); - Effect sacrificeCreatureEffect = new SacrificeTargetEffect(); - Effect sacrificePhantasmalMountEffect = new SacrificeTargetEffect(); - ContinuousEffect gainAbility = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); - gainAbility.setTargetPointer(new FixedTarget(source.getFirstTarget())); - game.addEffect(gainAbility, source); - sacrificeCreatureEffect.setTargetPointer(new FixedTarget(source.getFirstTarget())); - sacrificePhantasmalMountEffect.setTargetPointer(new FixedTarget(source.getSourceId())); - DelayedTriggeredAbility dTA = new PhantasmalMountDelayedTriggeredAbility( - sacrificeCreatureEffect, - source.getSourceId()); - DelayedTriggeredAbility dTA2 = new PhantasmalMountDelayedTriggeredAbility( - sacrificePhantasmalMountEffect, - source.getFirstTarget()); - game.addDelayedTriggeredAbility(dTA, source); - game.addDelayedTriggeredAbility(dTA2, source); - return true; - } - return false; - } - - @Override - public PhantasmalMountEffect copy() { - return new PhantasmalMountEffect(this); - } -} - -class PhantasmalMountDelayedTriggeredAbility extends DelayedTriggeredAbility { - - UUID creatureId; - - PhantasmalMountDelayedTriggeredAbility(Effect effect, UUID creatureId) { - super(effect, Duration.EndOfTurn, true); - this.creatureId = creatureId; - } - - PhantasmalMountDelayedTriggeredAbility(PhantasmalMountDelayedTriggeredAbility ability) { - super(ability); - this.creatureId = ability.creatureId; - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.ZONE_CHANGE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == EventType.ZONE_CHANGE - && event.getTargetId().equals(creatureId)) { - return true; - } - return false; - } - - @Override - public PhantasmalMountDelayedTriggeredAbility copy() { - return new PhantasmalMountDelayedTriggeredAbility(this); - } - - @Override - public String getRule() { - return "this left the battlefield"; - } -} +package mage.cards.p; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.SacrificeTargetEffect; +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.ComparisonType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.predicate.mageobject.ToughnessPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public final class PhantasmalMount extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("with toughness 2 or less"); + + static { + filter.add(new ToughnessPredicate(ComparisonType.FEWER_THAN, 3)); + } + + public PhantasmalMount(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + + this.subtype.add(SubType.ILLUSION); + this.subtype.add(SubType.HORSE); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // {tap}: Target creature you control with toughness 2 or less gets +1/+1 and gains flying until end of turn. When Phantasmal Mount leaves the battlefield this turn, sacrifice that creature. When the creature leaves the battlefield this turn, sacrifice Phantasmal Mount. + Ability activatedAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PhantasmalMountEffect(), new TapSourceCost()); + activatedAbility.addTarget(new TargetControlledCreaturePermanent(filter)); + this.addAbility(activatedAbility); + + } + + private PhantasmalMount(final PhantasmalMount card) { + super(card); + } + + @Override + public PhantasmalMount copy() { + return new PhantasmalMount(this); + } +} + +class PhantasmalMountEffect extends OneShotEffect { + + PhantasmalMountEffect() { + super(Outcome.Neutral); + staticText = "Target creature you control with toughness 2 or less gets +1/+1 " + + "and gains flying until end of turn. When {this} leaves the battlefield this turn, " + + "sacrifice that creature. When the creature leaves the battlefield this turn, sacrifice {this}"; + } + + PhantasmalMountEffect(PhantasmalMountEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent targetCreature = game.getPermanent(source.getFirstTarget()); + if (targetCreature != null) { + ContinuousEffect effect = new BoostTargetEffect(1, 1, Duration.EndOfTurn); + effect.setTargetPointer(new FixedTarget(source.getFirstTarget())); + game.addEffect(effect, source); + Effect sacrificeCreatureEffect = new SacrificeTargetEffect(); + Effect sacrificePhantasmalMountEffect = new SacrificeTargetEffect(); + ContinuousEffect gainAbility = new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn); + gainAbility.setTargetPointer(new FixedTarget(source.getFirstTarget())); + game.addEffect(gainAbility, source); + sacrificeCreatureEffect.setTargetPointer(new FixedTarget(source.getFirstTarget())); + sacrificePhantasmalMountEffect.setTargetPointer(new FixedTarget(source.getSourceId())); + DelayedTriggeredAbility dTA = new PhantasmalMountDelayedTriggeredAbility( + sacrificeCreatureEffect, + source.getSourceId()); + DelayedTriggeredAbility dTA2 = new PhantasmalMountDelayedTriggeredAbility( + sacrificePhantasmalMountEffect, + source.getFirstTarget()); + game.addDelayedTriggeredAbility(dTA, source); + game.addDelayedTriggeredAbility(dTA2, source); + return true; + } + return false; + } + + @Override + public PhantasmalMountEffect copy() { + return new PhantasmalMountEffect(this); + } +} + +class PhantasmalMountDelayedTriggeredAbility extends DelayedTriggeredAbility { + + UUID creatureId; + + PhantasmalMountDelayedTriggeredAbility(Effect effect, UUID creatureId) { + super(effect, Duration.EndOfTurn, true); + this.creatureId = creatureId; + } + + PhantasmalMountDelayedTriggeredAbility(PhantasmalMountDelayedTriggeredAbility ability) { + super(ability); + this.creatureId = ability.creatureId; + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.ZONE_CHANGE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.ZONE_CHANGE + && event.getTargetId().equals(creatureId)) { + return true; + } + return false; + } + + @Override + public PhantasmalMountDelayedTriggeredAbility copy() { + return new PhantasmalMountDelayedTriggeredAbility(this); + } + + @Override + public String getRule() { + return "this left the battlefield"; + } +} diff --git a/Mage.Sets/src/mage/cards/p/PhantasmalSphere.java b/Mage.Sets/src/mage/cards/p/PhantasmalSphere.java index fb57f5e4ae9..689becf0c8e 100644 --- a/Mage.Sets/src/mage/cards/p/PhantasmalSphere.java +++ b/Mage.Sets/src/mage/cards/p/PhantasmalSphere.java @@ -1,121 +1,121 @@ -package mage.cards.p; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.LeavesBattlefieldTriggeredAbility; -import mage.abilities.dynamicvalue.common.CountersSourceCount; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.CreateTokenTargetEffect; -import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.constants.SubType; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.token.TokenImpl; -import mage.players.Player; -import mage.target.common.TargetOpponent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author jeffwadsworth - */ -public final class PhantasmalSphere extends CardImpl { - - public PhantasmalSphere(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); - - this.subtype.add(SubType.ILLUSION); - this.power = new MageInt(0); - this.toughness = new MageInt(1); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // At the beginning of your upkeep, put a +1/+1 counter on Phantasmal Sphere, then sacrifice Phantasmal Sphere unless you pay {1} for each +1/+1 counter on it. - Ability ability = new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), TargetController.YOU, false); - Effect effect = new SacrificeSourceUnlessPaysEffect(new CountersSourceCount(CounterType.P1P1)); - effect.setText("then sacrifice {this} unless you pay {1} for each +1/+1 counter on it."); - ability.addEffect(effect); - this.addAbility(ability); - - // When Phantasmal Sphere leaves the battlefield, target opponent puts an X/X blue Orb creature token with flying onto the battlefield, where X is the number of +1/+1 counters on Phantasmal Sphere. - Ability ability2 = new LeavesBattlefieldTriggeredAbility(new PhantasmalSphereEffect(), false); - ability2.addTarget(new TargetOpponent()); - this.addAbility(ability2); - - } - - private PhantasmalSphere(final PhantasmalSphere card) { - super(card); - } - - @Override - public PhantasmalSphere copy() { - return new PhantasmalSphere(this); - } -} - -class PhantasmalSphereEffect extends OneShotEffect { - - public PhantasmalSphereEffect() { - super(Outcome.PutCreatureInPlay); - this.staticText = "target opponent puts an X/X blue Orb creature token " - + "with flying onto the battlefield, where X is the number " - + "of +1/+1 counters on {this}"; - } - - public PhantasmalSphereEffect(final PhantasmalSphereEffect effect) { - super(effect); - } - - @Override - public PhantasmalSphereEffect copy() { - return new PhantasmalSphereEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Player targetOpponent = game.getPlayer(source.getFirstTarget()); - if (controller != null - && targetOpponent != null) { - Effect effect = new CreateTokenTargetEffect(new PhantasmalSphereToken( - new CountersSourceCount(CounterType.P1P1).calculate( - game, source, null))); - effect.setTargetPointer(new FixedTarget(targetOpponent.getId())); - effect.apply(game, source); - } - return false; - } -} - -class PhantasmalSphereToken extends TokenImpl { - - public PhantasmalSphereToken(int xValue) { - super("Orb", "X/X blue Orb creature token with flying"); - cardType.add(CardType.CREATURE); - color.setBlue(true); - subtype.add(SubType.ORB); - power = new MageInt(xValue); - toughness = new MageInt(xValue); - addAbility(FlyingAbility.getInstance()); - } - - public PhantasmalSphereToken(final PhantasmalSphereToken token) { - super(token); - } - - public PhantasmalSphereToken copy() { - return new PhantasmalSphereToken(this); - } -} +package mage.cards.p; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.LeavesBattlefieldTriggeredAbility; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateTokenTargetEffect; +import mage.abilities.effects.common.SacrificeSourceUnlessPaysEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.constants.SubType; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.token.TokenImpl; +import mage.players.Player; +import mage.target.common.TargetOpponent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public final class PhantasmalSphere extends CardImpl { + + public PhantasmalSphere(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); + + this.subtype.add(SubType.ILLUSION); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // At the beginning of your upkeep, put a +1/+1 counter on Phantasmal Sphere, then sacrifice Phantasmal Sphere unless you pay {1} for each +1/+1 counter on it. + Ability ability = new BeginningOfUpkeepTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), TargetController.YOU, false); + Effect effect = new SacrificeSourceUnlessPaysEffect(new CountersSourceCount(CounterType.P1P1)); + effect.setText("then sacrifice {this} unless you pay {1} for each +1/+1 counter on it."); + ability.addEffect(effect); + this.addAbility(ability); + + // When Phantasmal Sphere leaves the battlefield, target opponent puts an X/X blue Orb creature token with flying onto the battlefield, where X is the number of +1/+1 counters on Phantasmal Sphere. + Ability ability2 = new LeavesBattlefieldTriggeredAbility(new PhantasmalSphereEffect(), false); + ability2.addTarget(new TargetOpponent()); + this.addAbility(ability2); + + } + + private PhantasmalSphere(final PhantasmalSphere card) { + super(card); + } + + @Override + public PhantasmalSphere copy() { + return new PhantasmalSphere(this); + } +} + +class PhantasmalSphereEffect extends OneShotEffect { + + public PhantasmalSphereEffect() { + super(Outcome.PutCreatureInPlay); + this.staticText = "target opponent puts an X/X blue Orb creature token " + + "with flying onto the battlefield, where X is the number " + + "of +1/+1 counters on {this}"; + } + + public PhantasmalSphereEffect(final PhantasmalSphereEffect effect) { + super(effect); + } + + @Override + public PhantasmalSphereEffect copy() { + return new PhantasmalSphereEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Player targetOpponent = game.getPlayer(source.getFirstTarget()); + if (controller != null + && targetOpponent != null) { + Effect effect = new CreateTokenTargetEffect(new PhantasmalSphereToken( + new CountersSourceCount(CounterType.P1P1).calculate( + game, source, null))); + effect.setTargetPointer(new FixedTarget(targetOpponent.getId())); + effect.apply(game, source); + } + return false; + } +} + +class PhantasmalSphereToken extends TokenImpl { + + public PhantasmalSphereToken(int xValue) { + super("Orb", "X/X blue Orb creature token with flying"); + cardType.add(CardType.CREATURE); + color.setBlue(true); + subtype.add(SubType.ORB); + power = new MageInt(xValue); + toughness = new MageInt(xValue); + addAbility(FlyingAbility.getInstance()); + } + + public PhantasmalSphereToken(final PhantasmalSphereToken token) { + super(token); + } + + public PhantasmalSphereToken copy() { + return new PhantasmalSphereToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/p/PowerTaint.java b/Mage.Sets/src/mage/cards/p/PowerTaint.java index 29eed920977..94806da421a 100644 --- a/Mage.Sets/src/mage/cards/p/PowerTaint.java +++ b/Mage.Sets/src/mage/cards/p/PowerTaint.java @@ -1,61 +1,61 @@ -package mage.cards.p; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetEnchantmentPermanent; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.effects.common.AttachEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.DoUnlessTargetPlayerOrTargetsControllerPaysEffect; -import mage.abilities.effects.common.LoseLifeTargetEffect; -import mage.abilities.keyword.CyclingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.TargetController; -import mage.constants.Zone; - -/** - * - * @author jeffwadsworth - */ -public final class PowerTaint extends CardImpl { - - public PowerTaint(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); - - this.subtype.add(SubType.AURA); - - // Enchant enchantment - TargetPermanent auraTarget = new TargetEnchantmentPermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // At the beginning of the upkeep of enchanted enchantment's controller, that player loses 2 life unless they pay {2}. - Effect effect = new DoUnlessTargetPlayerOrTargetsControllerPaysEffect(new LoseLifeTargetEffect(2), - new ManaCostsImpl("{2}"), "that player loses 2 life unless they pay {2}"); - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, - TargetController.CONTROLLER_ATTACHED_TO, false, true, - "At the beginning of the upkeep of enchanted enchantment's controller, ")); - - // Cycling {2} - this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); - - } - - public PowerTaint(final PowerTaint card) { - super(card); - } - - @Override - public PowerTaint copy() { - return new PowerTaint(this); - } -} +package mage.cards.p; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetEnchantmentPermanent; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DoUnlessTargetPlayerOrTargetsControllerPaysEffect; +import mage.abilities.effects.common.LoseLifeTargetEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.constants.Zone; + +/** + * + * @author jeffwadsworth + */ +public final class PowerTaint extends CardImpl { + + public PowerTaint(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant enchantment + TargetPermanent auraTarget = new TargetEnchantmentPermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // At the beginning of the upkeep of enchanted enchantment's controller, that player loses 2 life unless they pay {2}. + Effect effect = new DoUnlessTargetPlayerOrTargetsControllerPaysEffect(new LoseLifeTargetEffect(2), + new ManaCostsImpl("{2}"), "that player loses 2 life unless they pay {2}"); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, + TargetController.CONTROLLER_ATTACHED_TO, false, true, + "At the beginning of the upkeep of enchanted enchantment's controller, ")); + + // Cycling {2} + this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); + + } + + public PowerTaint(final PowerTaint card) { + super(card); + } + + @Override + public PowerTaint copy() { + return new PowerTaint(this); + } +} diff --git a/Mage.Sets/src/mage/cards/p/PrivateResearch.java b/Mage.Sets/src/mage/cards/p/PrivateResearch.java index bef10ca1c29..4cfa4af84fd 100644 --- a/Mage.Sets/src/mage/cards/p/PrivateResearch.java +++ b/Mage.Sets/src/mage/cards/p/PrivateResearch.java @@ -1,60 +1,60 @@ -package mage.cards.p; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.DiesAttachedTriggeredAbility; -import mage.abilities.dynamicvalue.common.CountersSourceCount; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.counters.CounterType; - -/** - * - * @author jeffwadsworth - */ -public final class PrivateResearch extends CardImpl { - - private static final String rule = "draw a card for each page counter on {this}."; - - public PrivateResearch(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // At the beginning of your upkeep, you may put a page counter on Private Research. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, - new AddCountersSourceEffect(CounterType.PAGE.createInstance(), true), TargetController.YOU, true)); - - // When enchanted creature dies, draw a card for each page counter on Private Research. - this.addAbility(new DiesAttachedTriggeredAbility(new DrawCardSourceControllerEffect(new CountersSourceCount(CounterType.PAGE)).setText(rule), "enchanted creature")); - - } - - public PrivateResearch(final PrivateResearch card) { - super(card); - } - - @Override - public PrivateResearch copy() { - return new PrivateResearch(this); - } -} +package mage.cards.p; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.DiesAttachedTriggeredAbility; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author jeffwadsworth + */ +public final class PrivateResearch extends CardImpl { + + private static final String rule = "draw a card for each page counter on {this}."; + + public PrivateResearch(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // At the beginning of your upkeep, you may put a page counter on Private Research. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, + new AddCountersSourceEffect(CounterType.PAGE.createInstance(), true), TargetController.YOU, true)); + + // When enchanted creature dies, draw a card for each page counter on Private Research. + this.addAbility(new DiesAttachedTriggeredAbility(new DrawCardSourceControllerEffect(new CountersSourceCount(CounterType.PAGE)).setText(rule), "enchanted creature")); + + } + + public PrivateResearch(final PrivateResearch card) { + super(card); + } + + @Override + public PrivateResearch copy() { + return new PrivateResearch(this); + } +} diff --git a/Mage.Sets/src/mage/cards/r/Ransack.java b/Mage.Sets/src/mage/cards/r/Ransack.java index 4fe3889c39d..c85c89cda3c 100644 --- a/Mage.Sets/src/mage/cards/r/Ransack.java +++ b/Mage.Sets/src/mage/cards/r/Ransack.java @@ -1,87 +1,87 @@ -package mage.cards.r; - -import static java.lang.Integer.min; -import java.util.Set; -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; -import mage.target.TargetPlayer; - -/** - * - * @author jeffwadsworth - */ -public final class Ransack extends CardImpl { - - public Ransack(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{U}"); - - // Look at the top five cards of target player's library. - //Put any number of them on the bottom of that library in any order - //and the rest on top of the library in any order. - this.getSpellAbility().addEffect(new RansackEffect()); - this.getSpellAbility().addTarget(new TargetPlayer()); - - } - - public Ransack(final Ransack card) { - super(card); - } - - @Override - public Ransack copy() { - return new Ransack(this); - } -} - -class RansackEffect extends OneShotEffect { - - public RansackEffect() { - super(Outcome.Detriment); - this.staticText = "Look at the top five cards of target player's library. " - + "Put any number of them on the bottom of that library in any order " - + "and the rest on top of the library in any order"; - } - - public RansackEffect(final RansackEffect effect) { - super(effect); - } - - @Override - public RansackEffect copy() { - return new RansackEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getFirstTarget()); - FilterCard filter = new FilterCard("cards to put on the bottom of your library"); - if (player != null) { - int number = min(player.getLibrary().size(), 5); - Set cards = player.getLibrary().getTopCards(game, number); - Cards cardsRemaining = new CardsImpl(); - cardsRemaining.addAll(cards); - TargetCard target = new TargetCard(0, number, Zone.LIBRARY, filter); - if (player.choose(Outcome.DrawCard, cardsRemaining, target, game)) { - Cards pickedCards = new CardsImpl(target.getTargets()); - cardsRemaining.removeAll(pickedCards); - player.putCardsOnBottomOfLibrary(pickedCards, game, source, true); - player.putCardsOnTopOfLibrary(cardsRemaining, game, source, true); - return true; - } - } - return false; - } -} +package mage.cards.r; + +import static java.lang.Integer.min; +import java.util.Set; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.TargetPlayer; + +/** + * + * @author jeffwadsworth + */ +public final class Ransack extends CardImpl { + + public Ransack(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{U}"); + + // Look at the top five cards of target player's library. + //Put any number of them on the bottom of that library in any order + //and the rest on top of the library in any order. + this.getSpellAbility().addEffect(new RansackEffect()); + this.getSpellAbility().addTarget(new TargetPlayer()); + + } + + public Ransack(final Ransack card) { + super(card); + } + + @Override + public Ransack copy() { + return new Ransack(this); + } +} + +class RansackEffect extends OneShotEffect { + + public RansackEffect() { + super(Outcome.Detriment); + this.staticText = "Look at the top five cards of target player's library. " + + "Put any number of them on the bottom of that library in any order " + + "and the rest on top of the library in any order"; + } + + public RansackEffect(final RansackEffect effect) { + super(effect); + } + + @Override + public RansackEffect copy() { + return new RansackEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getFirstTarget()); + FilterCard filter = new FilterCard("cards to put on the bottom of your library"); + if (player != null) { + int number = min(player.getLibrary().size(), 5); + Set cards = player.getLibrary().getTopCards(game, number); + Cards cardsRemaining = new CardsImpl(); + cardsRemaining.addAll(cards); + TargetCard target = new TargetCard(0, number, Zone.LIBRARY, filter); + if (player.choose(Outcome.DrawCard, cardsRemaining, target, game)) { + Cards pickedCards = new CardsImpl(target.getTargets()); + cardsRemaining.removeAll(pickedCards); + player.putCardsOnBottomOfLibrary(pickedCards, game, source, true); + player.putCardsOnTopOfLibrary(cardsRemaining, game, source, true); + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/r/Rebound.java b/Mage.Sets/src/mage/cards/r/Rebound.java index 5afdee305da..8fe2a1e5b44 100644 --- a/Mage.Sets/src/mage/cards/r/Rebound.java +++ b/Mage.Sets/src/mage/cards/r/Rebound.java @@ -1,77 +1,77 @@ -package mage.cards.r; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.filter.FilterSpell; -import mage.filter.predicate.other.TargetsOnlyOnePlayerPredicate; -import mage.game.Game; -import mage.game.stack.Spell; -import mage.players.Player; -import mage.target.TargetPlayer; -import mage.target.TargetSpell; - -/** - * - * @author jeffwadsworth - */ -public final class Rebound extends CardImpl { - - public Rebound(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); - - // Change the target of target spell that targets only a player. The new target must be a player. - this.getSpellAbility().addEffect(new ReboundEffect()); - FilterSpell filter = new FilterSpell("spell that targets only a player"); - filter.add(new TargetsOnlyOnePlayerPredicate()); - this.getSpellAbility().addTarget(new TargetSpell(filter)); - - } - - public Rebound(final Rebound card) { - super(card); - } - - @Override - public Rebound copy() { - return new Rebound(this); - } -} - -class ReboundEffect extends OneShotEffect { - - public ReboundEffect() { - super(Outcome.Neutral); - this.staticText = "Change the target of target spell that targets only a player. The new target must be a player"; - } - - public ReboundEffect(final ReboundEffect effect) { - super(effect); - } - - @Override - public ReboundEffect copy() { - return new ReboundEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Spell spell = game.getStack().getSpell(source.getFirstTarget()); - Player controller = game.getPlayer(source.getControllerId()); - if (spell != null - && controller != null) { - spell.getSpellAbility().getTargets().clear(); - TargetPlayer targetPlayer = new TargetPlayer(); - if (controller.choose(Outcome.Neutral, targetPlayer, source.getSourceId(), game)) { - spell.getSpellAbility().addTarget(targetPlayer); - game.informPlayers("The target of the spell was changed to " + targetPlayer.getTargetedName(game)); - return true; - } - } - return false; - } -} +package mage.cards.r; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.filter.FilterSpell; +import mage.filter.predicate.other.TargetsOnlyOnePlayerPredicate; +import mage.game.Game; +import mage.game.stack.Spell; +import mage.players.Player; +import mage.target.TargetPlayer; +import mage.target.TargetSpell; + +/** + * + * @author jeffwadsworth + */ +public final class Rebound extends CardImpl { + + public Rebound(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{U}"); + + // Change the target of target spell that targets only a player. The new target must be a player. + this.getSpellAbility().addEffect(new ReboundEffect()); + FilterSpell filter = new FilterSpell("spell that targets only a player"); + filter.add(new TargetsOnlyOnePlayerPredicate()); + this.getSpellAbility().addTarget(new TargetSpell(filter)); + + } + + public Rebound(final Rebound card) { + super(card); + } + + @Override + public Rebound copy() { + return new Rebound(this); + } +} + +class ReboundEffect extends OneShotEffect { + + public ReboundEffect() { + super(Outcome.Neutral); + this.staticText = "Change the target of target spell that targets only a player. The new target must be a player"; + } + + public ReboundEffect(final ReboundEffect effect) { + super(effect); + } + + @Override + public ReboundEffect copy() { + return new ReboundEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Spell spell = game.getStack().getSpell(source.getFirstTarget()); + Player controller = game.getPlayer(source.getControllerId()); + if (spell != null + && controller != null) { + spell.getSpellAbility().getTargets().clear(); + TargetPlayer targetPlayer = new TargetPlayer(); + if (controller.choose(Outcome.Neutral, targetPlayer, source.getSourceId(), game)) { + spell.getSpellAbility().addTarget(targetPlayer); + game.informPlayers("The target of the spell was changed to " + targetPlayer.getTargetedName(game)); + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/r/RetracedImage.java b/Mage.Sets/src/mage/cards/r/RetracedImage.java index 050e0a71389..6916cd6b23c 100644 --- a/Mage.Sets/src/mage/cards/r/RetracedImage.java +++ b/Mage.Sets/src/mage/cards/r/RetracedImage.java @@ -1,81 +1,81 @@ -package mage.cards.r; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.common.TargetCardInHand; - -/** - * - * @author jeffwadsworth - */ -public final class RetracedImage extends CardImpl { - - public RetracedImage(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{U}"); - - // Reveal a card in your hand, then put that card onto the battlefield if it has the same name as a permanent. - this.getSpellAbility().addEffect(new RetracedImageEffect()); - - } - - private RetracedImage(final RetracedImage card) { - super(card); - } - - @Override - public RetracedImage copy() { - return new RetracedImage(this); - } -} - -class RetracedImageEffect extends OneShotEffect { - - public RetracedImageEffect() { - super(Outcome.PutCardInPlay); - this.staticText = "Reveal a card in your hand, then put that card onto the battlefield if it has the same name as a permanent"; - } - - public RetracedImageEffect(final RetracedImageEffect effect) { - super(effect); - } - - @Override - public RetracedImageEffect copy() { - return new RetracedImageEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - TargetCardInHand target = new TargetCardInHand(); - if (target.canChoose(controller.getId(), game) - && controller.choose(outcome, target, source.getSourceId(), game)) { - Card chosenCard = game.getCard(target.getFirstTarget()); - if (chosenCard != null) { - Cards cards = new CardsImpl(); - cards.add(chosenCard); - controller.revealCards(source, cards, game); - for (Permanent permanent : game.getBattlefield().getAllActivePermanents()) { - if (permanent.getName().equals(chosenCard.getName())) { - return controller.moveCards(chosenCard, Zone.BATTLEFIELD, source, game); - } - } - } - } - } - return false; - } -} +package mage.cards.r; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetCardInHand; + +/** + * + * @author jeffwadsworth + */ +public final class RetracedImage extends CardImpl { + + public RetracedImage(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{U}"); + + // Reveal a card in your hand, then put that card onto the battlefield if it has the same name as a permanent. + this.getSpellAbility().addEffect(new RetracedImageEffect()); + + } + + private RetracedImage(final RetracedImage card) { + super(card); + } + + @Override + public RetracedImage copy() { + return new RetracedImage(this); + } +} + +class RetracedImageEffect extends OneShotEffect { + + public RetracedImageEffect() { + super(Outcome.PutCardInPlay); + this.staticText = "Reveal a card in your hand, then put that card onto the battlefield if it has the same name as a permanent"; + } + + public RetracedImageEffect(final RetracedImageEffect effect) { + super(effect); + } + + @Override + public RetracedImageEffect copy() { + return new RetracedImageEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + TargetCardInHand target = new TargetCardInHand(); + if (target.canChoose(controller.getId(), game) + && controller.choose(outcome, target, source.getSourceId(), game)) { + Card chosenCard = game.getCard(target.getFirstTarget()); + if (chosenCard != null) { + Cards cards = new CardsImpl(); + cards.add(chosenCard); + controller.revealCards(source, cards, game); + for (Permanent permanent : game.getBattlefield().getAllActivePermanents()) { + if (permanent.getName().equals(chosenCard.getName())) { + return controller.moveCards(chosenCard, Zone.BATTLEFIELD, source, game); + } + } + } + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/r/RogueSkycaptain.java b/Mage.Sets/src/mage/cards/r/RogueSkycaptain.java index a5440d2d579..e56b0bfd031 100644 --- a/Mage.Sets/src/mage/cards/r/RogueSkycaptain.java +++ b/Mage.Sets/src/mage/cards/r/RogueSkycaptain.java @@ -1,102 +1,102 @@ -package mage.cards.r; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.costs.Cost; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.RemoveAllCountersSourceEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.TargetController; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.Target; -import mage.target.common.TargetOpponent; -import mage.util.ManaUtil; - -import java.util.Set; -import java.util.UUID; - -/** - * @author Ketsuban - */ -public class RogueSkycaptain extends CardImpl { - - public RogueSkycaptain(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ROGUE); - this.subtype.add(SubType.MERCENARY); - this.power = new MageInt(3); - this.toughness = new MageInt(4); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // At the beginning of your upkeep, put a wage counter on Rogue Skycaptain. You - // may pay 2 for each wage counter on it. If you don't, remove all wage counters - // from Rogue Skycaptain and an opponent gains control of it. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(new RogueSkycaptainEffect(), TargetController.YOU, false)); - } - - @Override - public Card copy() { - return null; - } - -} - -class RogueSkycaptainEffect extends OneShotEffect { - - public RogueSkycaptainEffect() { - super(Outcome.GainControl); - staticText = "put a wage counter on {this}. You may pay {2} for each wage counter on it. If you don't, remove all wage counters from {this} and an opponent gains control of it"; - } - - public RogueSkycaptainEffect(final RogueSkycaptainEffect effect) { - super(effect); - } - - @Override - public Effect copy() { - return new RogueSkycaptainEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent permanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (controller != null && permanent != null) { - new AddCountersSourceEffect(CounterType.WAGE.createInstance(), true).apply(game, source); - Cost cost = ManaUtil.createManaCost(2 * permanent.getCounters(game).getCount(CounterType.WAGE), false); - if (!cost.pay(source, game, controller.getId(), controller.getId(), false)) { - new RemoveAllCountersSourceEffect(CounterType.WAGE).apply(game, source); - Player opponent; - Set opponents = game.getOpponents(controller.getId()); - if (opponents.size() == 1) { - opponent = game.getPlayer(opponents.iterator().next()); - } else { - Target target = new TargetOpponent(true); - target.setNotTarget(true); - target.choose(Outcome.GainControl, source.getControllerId(), source.getSourceId(), game); - opponent = game.getPlayer(target.getFirstTarget()); - } - if (opponent != null) { - permanent.changeControllerId(opponent.getId(), game); - } - } - return true; - } - return false; - } +package mage.cards.r; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.costs.Cost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.RemoveAllCountersSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetOpponent; +import mage.util.ManaUtil; + +import java.util.Set; +import java.util.UUID; + +/** + * @author Ketsuban + */ +public class RogueSkycaptain extends CardImpl { + + public RogueSkycaptain(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}"); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ROGUE); + this.subtype.add(SubType.MERCENARY); + this.power = new MageInt(3); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // At the beginning of your upkeep, put a wage counter on Rogue Skycaptain. You + // may pay 2 for each wage counter on it. If you don't, remove all wage counters + // from Rogue Skycaptain and an opponent gains control of it. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new RogueSkycaptainEffect(), TargetController.YOU, false)); + } + + @Override + public Card copy() { + return null; + } + +} + +class RogueSkycaptainEffect extends OneShotEffect { + + public RogueSkycaptainEffect() { + super(Outcome.GainControl); + staticText = "put a wage counter on {this}. You may pay {2} for each wage counter on it. If you don't, remove all wage counters from {this} and an opponent gains control of it"; + } + + public RogueSkycaptainEffect(final RogueSkycaptainEffect effect) { + super(effect); + } + + @Override + public Effect copy() { + return new RogueSkycaptainEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent permanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (controller != null && permanent != null) { + new AddCountersSourceEffect(CounterType.WAGE.createInstance(), true).apply(game, source); + Cost cost = ManaUtil.createManaCost(2 * permanent.getCounters(game).getCount(CounterType.WAGE), false); + if (!cost.pay(source, game, controller.getId(), controller.getId(), false)) { + new RemoveAllCountersSourceEffect(CounterType.WAGE).apply(game, source); + Player opponent; + Set opponents = game.getOpponents(controller.getId()); + if (opponents.size() == 1) { + opponent = game.getPlayer(opponents.iterator().next()); + } else { + Target target = new TargetOpponent(true); + target.setNotTarget(true); + target.choose(Outcome.GainControl, source.getControllerId(), source.getSourceId(), game); + opponent = game.getPlayer(target.getFirstTarget()); + } + if (opponent != null) { + permanent.changeControllerId(opponent.getId(), game); + } + } + return true; + } + return false; + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/r/RunicArmasaur.java b/Mage.Sets/src/mage/cards/r/RunicArmasaur.java index 4c589622b4a..3ec878d9596 100644 --- a/Mage.Sets/src/mage/cards/r/RunicArmasaur.java +++ b/Mage.Sets/src/mage/cards/r/RunicArmasaur.java @@ -1,82 +1,82 @@ -package mage.cards.r; - -import java.util.UUID; -import mage.MageInt; -import mage.MageObject; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.common.DrawCardSourceControllerEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AbilityType; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.stack.StackAbility; - -/** - * - * @author LevelX2 - */ -public final class RunicArmasaur extends CardImpl { - - public RunicArmasaur(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); - - this.subtype.add(SubType.DINOSAUR); - this.power = new MageInt(2); - this.toughness = new MageInt(5); - - // Whenever an opponent activates an ability of a creature or a land that is not a mana ability, you may draw a card. - this.addAbility(new RunicArmasaurTriggeredAbility()); - } - - public RunicArmasaur(final RunicArmasaur card) { - super(card); - } - - @Override - public RunicArmasaur copy() { - return new RunicArmasaur(this); - } -} - -class RunicArmasaurTriggeredAbility extends TriggeredAbilityImpl { - - RunicArmasaurTriggeredAbility() { - super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), true); - } - - RunicArmasaurTriggeredAbility(final RunicArmasaurTriggeredAbility ability) { - super(ability); - } - - @Override - public RunicArmasaurTriggeredAbility copy() { - return new RunicArmasaurTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.ACTIVATED_ABILITY; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId()); - if (stackAbility != null - && stackAbility.getAbilityType() == AbilityType.ACTIVATED - && game.getOpponents(this.getControllerId()).contains(stackAbility.getControllerId())) { - MageObject abilitySourceObject = stackAbility.getSourceObject(game); - return abilitySourceObject != null && (abilitySourceObject.isLand() || abilitySourceObject.isCreature()); - } - return false; - } - - @Override - public String getRule() { - return "Whenever an opponent activates an ability of a creature or a land that is not a mana ability, you may draw a card."; - } -} +package mage.cards.r; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AbilityType; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.stack.StackAbility; + +/** + * + * @author LevelX2 + */ +public final class RunicArmasaur extends CardImpl { + + public RunicArmasaur(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{G}{G}"); + + this.subtype.add(SubType.DINOSAUR); + this.power = new MageInt(2); + this.toughness = new MageInt(5); + + // Whenever an opponent activates an ability of a creature or a land that is not a mana ability, you may draw a card. + this.addAbility(new RunicArmasaurTriggeredAbility()); + } + + public RunicArmasaur(final RunicArmasaur card) { + super(card); + } + + @Override + public RunicArmasaur copy() { + return new RunicArmasaur(this); + } +} + +class RunicArmasaurTriggeredAbility extends TriggeredAbilityImpl { + + RunicArmasaurTriggeredAbility() { + super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), true); + } + + RunicArmasaurTriggeredAbility(final RunicArmasaurTriggeredAbility ability) { + super(ability); + } + + @Override + public RunicArmasaurTriggeredAbility copy() { + return new RunicArmasaurTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.ACTIVATED_ABILITY; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + StackAbility stackAbility = (StackAbility) game.getStack().getStackObject(event.getSourceId()); + if (stackAbility != null + && stackAbility.getAbilityType() == AbilityType.ACTIVATED + && game.getOpponents(this.getControllerId()).contains(stackAbility.getControllerId())) { + MageObject abilitySourceObject = stackAbility.getSourceObject(game); + return abilitySourceObject != null && (abilitySourceObject.isLand() || abilitySourceObject.isCreature()); + } + return false; + } + + @Override + public String getRule() { + return "Whenever an opponent activates an ability of a creature or a land that is not a mana ability, you may draw a card."; + } +} diff --git a/Mage.Sets/src/mage/cards/s/SamiteBlessing.java b/Mage.Sets/src/mage/cards/s/SamiteBlessing.java index 1168cf6606a..616b24c3b1d 100644 --- a/Mage.Sets/src/mage/cards/s/SamiteBlessing.java +++ b/Mage.Sets/src/mage/cards/s/SamiteBlessing.java @@ -1,58 +1,58 @@ -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.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.PreventNextDamageFromChosenSourceToTargetEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Zone; - -/** - * - * @author jeffwadsworth - */ -public final class SamiteBlessing extends CardImpl { - - private static final String rule = "Enchanted creature has \"{T}: The next time a source of your choice would deal damage to target creature this turn, prevent that damage.\""; - - public SamiteBlessing(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Enchanted creature has "{tap}: The next time a source of your choice would deal damage to target creature this turn, prevent that damage." - Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventNextDamageFromChosenSourceToTargetEffect(Duration.EndOfTurn), new TapSourceCost()); - ability2.addTarget(new TargetCreaturePermanent()); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability2, AttachmentType.AURA, Duration.WhileOnBattlefield, rule))); - - } - - public SamiteBlessing(final SamiteBlessing card) { - super(card); - } - - @Override - public SamiteBlessing copy() { - return new SamiteBlessing(this); - } -} +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.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.PreventNextDamageFromChosenSourceToTargetEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Zone; + +/** + * + * @author jeffwadsworth + */ +public final class SamiteBlessing extends CardImpl { + + private static final String rule = "Enchanted creature has \"{T}: The next time a source of your choice would deal damage to target creature this turn, prevent that damage.\""; + + public SamiteBlessing(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature has "{tap}: The next time a source of your choice would deal damage to target creature this turn, prevent that damage." + Ability ability2 = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PreventNextDamageFromChosenSourceToTargetEffect(Duration.EndOfTurn), new TapSourceCost()); + ability2.addTarget(new TargetCreaturePermanent()); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(ability2, AttachmentType.AURA, Duration.WhileOnBattlefield, rule))); + + } + + public SamiteBlessing(final SamiteBlessing card) { + super(card); + } + + @Override + public SamiteBlessing copy() { + return new SamiteBlessing(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/Seraph.java b/Mage.Sets/src/mage/cards/s/Seraph.java index b656237d5dd..eadf1a19b62 100644 --- a/Mage.Sets/src/mage/cards/s/Seraph.java +++ b/Mage.Sets/src/mage/cards/s/Seraph.java @@ -1,140 +1,140 @@ -package mage.cards.s; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.DelayedTriggeredAbility; -import mage.abilities.common.DealtDamageAndDiedTriggeredAbility; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; -import mage.abilities.effects.common.SacrificeTargetEffect; -import mage.constants.SubType; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author jeffwadsworth - */ -public final class Seraph extends CardImpl { - - public Seraph(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{W}"); - - this.subtype.add(SubType.ANGEL); - this.power = new MageInt(4); - this.toughness = new MageInt(4); - - // Flying - this.addAbility(FlyingAbility.getInstance()); - - // Whenever a creature dealt damage by Seraph this turn dies, put that card onto the battlefield under your control at the beginning of the next end step. Sacrifice the creature when you lose control of Seraph. - Effect effect = new CreateDelayedTriggeredAbilityEffect( - new AtTheBeginOfNextEndStepDelayedTriggeredAbility( - new SeraphEffect())); - effect.setText("put that card onto the battlefield under your control at the beginning of the next end step. Sacrifice the creature when you lose control of {this}"); - this.addAbility(new DealtDamageAndDiedTriggeredAbility(effect)); - - } - - private Seraph(final Seraph card) { - super(card); - } - - @Override - public Seraph copy() { - return new Seraph(this); - } -} - -class SeraphEffect extends OneShotEffect { - - SeraphEffect() { - super(Outcome.Neutral); - staticText = "put that card onto the battlefield under your control. Sacrifice it when you lose control of {this}"; - } - - SeraphEffect(SeraphEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Card creatureCard = game.getCard(targetPointer.getFirst(game, source)); - if (controller != null - && creatureCard != null - && game.getState().getZone(creatureCard.getId()) == Zone.GRAVEYARD) { // must be still in the graveyard - controller.moveCards(creatureCard, Zone.BATTLEFIELD, source, game, false, false, false, null); - OneShotEffect effect = new SacrificeTargetEffect(); - effect.setText("Sacrifice this if Seraph leaves the battlefield or its current controller loses control of it."); - effect.setTargetPointer(new FixedTarget(creatureCard.getId())); - SeraphDelayedTriggeredAbility dTA = new SeraphDelayedTriggeredAbility(effect, source.getSourceId()); - game.addDelayedTriggeredAbility(dTA, source); - return true; - } - return false; - } - - @Override - public SeraphEffect copy() { - return new SeraphEffect(this); - } -} - -class SeraphDelayedTriggeredAbility extends DelayedTriggeredAbility { - - UUID seraph; - - SeraphDelayedTriggeredAbility(Effect effect, UUID seraph) { - super(effect, Duration.EndOfGame, true); - this.seraph = seraph; - } - - SeraphDelayedTriggeredAbility(SeraphDelayedTriggeredAbility ability) { - super(ability); - this.seraph = ability.seraph; - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.LOST_CONTROL - || event.getType() == EventType.ZONE_CHANGE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == EventType.LOST_CONTROL - && event.getSourceId().equals(seraph)) { - return true; - } - if (event.getType() == EventType.ZONE_CHANGE - && event.getTargetId().equals(seraph)) { - return true; - } - return false; - } - - @Override - public SeraphDelayedTriggeredAbility copy() { - return new SeraphDelayedTriggeredAbility(this); - } - - @Override - public String getRule() { - return "Control of Seraph was lost, sacrifice this."; - } -} +package mage.cards.s; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.DealtDamageAndDiedTriggeredAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.CreateDelayedTriggeredAbilityEffect; +import mage.abilities.effects.common.SacrificeTargetEffect; +import mage.constants.SubType; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author jeffwadsworth + */ +public final class Seraph extends CardImpl { + + public Seraph(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{6}{W}"); + + this.subtype.add(SubType.ANGEL); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Flying + this.addAbility(FlyingAbility.getInstance()); + + // Whenever a creature dealt damage by Seraph this turn dies, put that card onto the battlefield under your control at the beginning of the next end step. Sacrifice the creature when you lose control of Seraph. + Effect effect = new CreateDelayedTriggeredAbilityEffect( + new AtTheBeginOfNextEndStepDelayedTriggeredAbility( + new SeraphEffect())); + effect.setText("put that card onto the battlefield under your control at the beginning of the next end step. Sacrifice the creature when you lose control of {this}"); + this.addAbility(new DealtDamageAndDiedTriggeredAbility(effect)); + + } + + private Seraph(final Seraph card) { + super(card); + } + + @Override + public Seraph copy() { + return new Seraph(this); + } +} + +class SeraphEffect extends OneShotEffect { + + SeraphEffect() { + super(Outcome.Neutral); + staticText = "put that card onto the battlefield under your control. Sacrifice it when you lose control of {this}"; + } + + SeraphEffect(SeraphEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Card creatureCard = game.getCard(targetPointer.getFirst(game, source)); + if (controller != null + && creatureCard != null + && game.getState().getZone(creatureCard.getId()) == Zone.GRAVEYARD) { // must be still in the graveyard + controller.moveCards(creatureCard, Zone.BATTLEFIELD, source, game, false, false, false, null); + OneShotEffect effect = new SacrificeTargetEffect(); + effect.setText("Sacrifice this if Seraph leaves the battlefield or its current controller loses control of it."); + effect.setTargetPointer(new FixedTarget(creatureCard.getId())); + SeraphDelayedTriggeredAbility dTA = new SeraphDelayedTriggeredAbility(effect, source.getSourceId()); + game.addDelayedTriggeredAbility(dTA, source); + return true; + } + return false; + } + + @Override + public SeraphEffect copy() { + return new SeraphEffect(this); + } +} + +class SeraphDelayedTriggeredAbility extends DelayedTriggeredAbility { + + UUID seraph; + + SeraphDelayedTriggeredAbility(Effect effect, UUID seraph) { + super(effect, Duration.EndOfGame, true); + this.seraph = seraph; + } + + SeraphDelayedTriggeredAbility(SeraphDelayedTriggeredAbility ability) { + super(ability); + this.seraph = ability.seraph; + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.LOST_CONTROL + || event.getType() == EventType.ZONE_CHANGE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.LOST_CONTROL + && event.getSourceId().equals(seraph)) { + return true; + } + if (event.getType() == EventType.ZONE_CHANGE + && event.getTargetId().equals(seraph)) { + return true; + } + return false; + } + + @Override + public SeraphDelayedTriggeredAbility copy() { + return new SeraphDelayedTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Control of Seraph was lost, sacrifice this."; + } +} diff --git a/Mage.Sets/src/mage/cards/s/SerrasHymn.java b/Mage.Sets/src/mage/cards/s/SerrasHymn.java index 5d7b9be30b8..efe88bbf762 100644 --- a/Mage.Sets/src/mage/cards/s/SerrasHymn.java +++ b/Mage.Sets/src/mage/cards/s/SerrasHymn.java @@ -1,55 +1,55 @@ -package mage.cards.s; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.dynamicvalue.common.CountersSourceCount; -import mage.abilities.effects.common.PreventDamageToTargetMultiAmountEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.target.common.TargetAnyTargetAmount; - -/** - * - * @author jeffwadsworth - */ -public final class SerrasHymn extends CardImpl { - - private static final String rule = "Prevent the next X damage that would be dealt this turn to any number of target creatures and/or players, divided as you choose, where X is the number of verse counters on {this}."; - - public SerrasHymn(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); - - // At the beginning of your upkeep, you may put a verse counter on Serra's Hymn. - this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, - new AddCountersSourceEffect(CounterType.VERSE.createInstance(), true), TargetController.YOU, true)); - - // Sacrifice Serra's Hymn: Prevent the next X damage that would be dealt this turn to any number of target creatures and/or players, divided as you choose, where X is the number of verse counters on Serra's Hymn. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, - new PreventDamageToTargetMultiAmountEffect( - Duration.EndOfTurn, - 1, false, true, // the integer 1 is ignored due to the dynamic number being set - new CountersSourceCount(CounterType.VERSE)).setText(rule), - new SacrificeSourceCost()); - ability.addTarget(new TargetAnyTargetAmount(new CountersSourceCount(CounterType.VERSE))); - this.addAbility(ability); - - } - - public SerrasHymn(final SerrasHymn card) { - super(card); - } - - @Override - public SerrasHymn copy() { - return new SerrasHymn(this); - } -} +package mage.cards.s; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.common.PreventDamageToTargetMultiAmountEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetAnyTargetAmount; + +/** + * + * @author jeffwadsworth + */ +public final class SerrasHymn extends CardImpl { + + private static final String rule = "Prevent the next X damage that would be dealt this turn to any number of target creatures and/or players, divided as you choose, where X is the number of verse counters on {this}."; + + public SerrasHymn(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + // At the beginning of your upkeep, you may put a verse counter on Serra's Hymn. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, + new AddCountersSourceEffect(CounterType.VERSE.createInstance(), true), TargetController.YOU, true)); + + // Sacrifice Serra's Hymn: Prevent the next X damage that would be dealt this turn to any number of target creatures and/or players, divided as you choose, where X is the number of verse counters on Serra's Hymn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, + new PreventDamageToTargetMultiAmountEffect( + Duration.EndOfTurn, + 1, false, true, // the integer 1 is ignored due to the dynamic number being set + new CountersSourceCount(CounterType.VERSE)).setText(rule), + new SacrificeSourceCost()); + ability.addTarget(new TargetAnyTargetAmount(new CountersSourceCount(CounterType.VERSE))); + this.addAbility(ability); + + } + + public SerrasHymn(final SerrasHymn card) { + super(card); + } + + @Override + public SerrasHymn copy() { + return new SerrasHymn(this); + } +} diff --git a/Mage.Sets/src/mage/cards/s/ShelteringPrayers.java b/Mage.Sets/src/mage/cards/s/ShelteringPrayers.java index 7526f97c076..a74ed047954 100644 --- a/Mage.Sets/src/mage/cards/s/ShelteringPrayers.java +++ b/Mage.Sets/src/mage/cards/s/ShelteringPrayers.java @@ -1,98 +1,98 @@ -package mage.cards.s; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.keyword.ShroudAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.DependencyType; -import mage.constants.Duration; -import mage.constants.Layer; -import static mage.constants.Layer.AbilityAddingRemovingEffects_6; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.Zone; -import mage.filter.common.FilterLandPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * - * @author jeffwadsworth - */ -public final class ShelteringPrayers extends CardImpl { - - public ShelteringPrayers(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); - - // Basic lands each player controls have shroud as long as that player controls three or fewer lands. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ShelteringPrayersEffect())); - - } - - public ShelteringPrayers(final ShelteringPrayers card) { - super(card); - } - - @Override - public ShelteringPrayers copy() { - return new ShelteringPrayers(this); - } -} - -class ShelteringPrayersEffect extends ContinuousEffectImpl { - - public ShelteringPrayersEffect() { - super(Duration.WhileOnBattlefield, Outcome.AddAbility); - staticText = "Basic lands each player controls have shroud as long as that player controls three or fewer lands."; - dependencyTypes.add(DependencyType.AddingAbility); - - } - - public ShelteringPrayersEffect(final ShelteringPrayersEffect effect) { - super(effect); - } - - @Override - public ShelteringPrayersEffect copy() { - return new ShelteringPrayersEffect(this); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { - Player player = game.getPlayer(playerId); - if (player != null - && game.getBattlefield().getAllActivePermanents(new FilterLandPermanent(), playerId, game).size() < 4) { - for (Permanent land : game.getBattlefield().getAllActivePermanents(new FilterLandPermanent(), playerId, game)) { - if (land != null - && land.isBasic()) { - switch (layer) { - case AbilityAddingRemovingEffects_6: - if (sublayer == SubLayer.NA) { - land.getAbilities().add(ShroudAbility.getInstance()); - } - break; - } - } - } - } - } - return true; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return Layer.AbilityAddingRemovingEffects_6 == layer; - } - -} +package mage.cards.s; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.keyword.ShroudAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.DependencyType; +import mage.constants.Duration; +import mage.constants.Layer; +import static mage.constants.Layer.AbilityAddingRemovingEffects_6; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.constants.Zone; +import mage.filter.common.FilterLandPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author jeffwadsworth + */ +public final class ShelteringPrayers extends CardImpl { + + public ShelteringPrayers(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{W}"); + + // Basic lands each player controls have shroud as long as that player controls three or fewer lands. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ShelteringPrayersEffect())); + + } + + public ShelteringPrayers(final ShelteringPrayers card) { + super(card); + } + + @Override + public ShelteringPrayers copy() { + return new ShelteringPrayers(this); + } +} + +class ShelteringPrayersEffect extends ContinuousEffectImpl { + + public ShelteringPrayersEffect() { + super(Duration.WhileOnBattlefield, Outcome.AddAbility); + staticText = "Basic lands each player controls have shroud as long as that player controls three or fewer lands."; + dependencyTypes.add(DependencyType.AddingAbility); + + } + + public ShelteringPrayersEffect(final ShelteringPrayersEffect effect) { + super(effect); + } + + @Override + public ShelteringPrayersEffect copy() { + return new ShelteringPrayersEffect(this); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { + Player player = game.getPlayer(playerId); + if (player != null + && game.getBattlefield().getAllActivePermanents(new FilterLandPermanent(), playerId, game).size() < 4) { + for (Permanent land : game.getBattlefield().getAllActivePermanents(new FilterLandPermanent(), playerId, game)) { + if (land != null + && land.isBasic()) { + switch (layer) { + case AbilityAddingRemovingEffects_6: + if (sublayer == SubLayer.NA) { + land.getAbilities().add(ShroudAbility.getInstance()); + } + break; + } + } + } + } + } + return true; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return Layer.AbilityAddingRemovingEffects_6 == layer; + } + +} diff --git a/Mage.Sets/src/mage/cards/s/SkeletonScavengers.java b/Mage.Sets/src/mage/cards/s/SkeletonScavengers.java index 4adc1ec2051..95f31ef9eb8 100644 --- a/Mage.Sets/src/mage/cards/s/SkeletonScavengers.java +++ b/Mage.Sets/src/mage/cards/s/SkeletonScavengers.java @@ -1,130 +1,130 @@ -package mage.cards.s; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.AsEntersBattlefieldAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.Cost; -import mage.abilities.costs.CostImpl; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.CountersSourceCount; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.RegenerateSourceEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.util.ManaUtil; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class SkeletonScavengers extends CardImpl { - - public SkeletonScavengers(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); - - this.subtype.add(SubType.SKELETON); - this.power = new MageInt(0); - this.toughness = new MageInt(0); - - // Skeleton Scavengers enters the battlefield with a +1/+1 counter on it. - this.addAbility(new AsEntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()))); - - // Pay {1} for each +1/+1 counter on Skeleton Scavengers: Regenerate Skeleton Scavengers. When it regenerates this way, put a +1/+1 counter on it. - this.addAbility(new SimpleActivatedAbility(new SkeletonScavengersEffect(), new DynamicValueGenericManaCost(new CountersSourceCount(CounterType.P1P1)))); - - } - - public SkeletonScavengers(final SkeletonScavengers card) { - super(card); - } - - @Override - public SkeletonScavengers copy() { - return new SkeletonScavengers(this); - } -} - -class DynamicValueGenericManaCost extends CostImpl { - - DynamicValue amount; - - public DynamicValueGenericManaCost(DynamicValue amount) { - this.amount = amount; - setText(); - } - - public DynamicValueGenericManaCost(DynamicValueGenericManaCost cost) { - super(cost); - this.amount = cost.amount; - } - - @Override - public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { - Player controller = game.getPlayer(controllerId); - if (controller == null) { - return false; - } - Cost cost = ManaUtil.createManaCost(amount, game, ability, null); - return cost.canPay(ability, sourceId, controllerId, game); - } - - @Override - public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { - Player controller = game.getPlayer(controllerId); - if (controller == null) { - return false; - } - - Cost cost = ManaUtil.createManaCost(amount, game, ability, null); - paid = cost.pay(ability, game, sourceId, controllerId, noMana); - - return paid; - } - - @Override - public DynamicValueGenericManaCost copy() { - return new DynamicValueGenericManaCost(this); - } - - private void setText() { - text = ("Pay {1} for each +1/+1 counter on {this}"); - } -} - -class SkeletonScavengersEffect extends OneShotEffect { - - SkeletonScavengersEffect() { - super(Outcome.Benefit); - this.staticText = "Regenerate {this}. When it regenerates this way, put a +1/+1 counter on it"; - } - - SkeletonScavengersEffect(final SkeletonScavengersEffect effect) { - super(effect); - } - - @Override - public SkeletonScavengersEffect copy() { - return new SkeletonScavengersEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent skeletonScavengers = game.getPermanent(source.getSourceId()); - if (skeletonScavengers != null) { - if (new RegenerateSourceEffect().apply(game, source)) { - return new AddCountersSourceEffect(CounterType.P1P1.createInstance()).apply(game, source); - } - } - return false; - } -} +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AsEntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.CountersSourceCount; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.RegenerateSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.util.ManaUtil; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class SkeletonScavengers extends CardImpl { + + public SkeletonScavengers(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); + + this.subtype.add(SubType.SKELETON); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Skeleton Scavengers enters the battlefield with a +1/+1 counter on it. + this.addAbility(new AsEntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()))); + + // Pay {1} for each +1/+1 counter on Skeleton Scavengers: Regenerate Skeleton Scavengers. When it regenerates this way, put a +1/+1 counter on it. + this.addAbility(new SimpleActivatedAbility(new SkeletonScavengersEffect(), new DynamicValueGenericManaCost(new CountersSourceCount(CounterType.P1P1)))); + + } + + public SkeletonScavengers(final SkeletonScavengers card) { + super(card); + } + + @Override + public SkeletonScavengers copy() { + return new SkeletonScavengers(this); + } +} + +class DynamicValueGenericManaCost extends CostImpl { + + DynamicValue amount; + + public DynamicValueGenericManaCost(DynamicValue amount) { + this.amount = amount; + setText(); + } + + public DynamicValueGenericManaCost(DynamicValueGenericManaCost cost) { + super(cost); + this.amount = cost.amount; + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + Player controller = game.getPlayer(controllerId); + if (controller == null) { + return false; + } + Cost cost = ManaUtil.createManaCost(amount, game, ability, null); + return cost.canPay(ability, sourceId, controllerId, game); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { + Player controller = game.getPlayer(controllerId); + if (controller == null) { + return false; + } + + Cost cost = ManaUtil.createManaCost(amount, game, ability, null); + paid = cost.pay(ability, game, sourceId, controllerId, noMana); + + return paid; + } + + @Override + public DynamicValueGenericManaCost copy() { + return new DynamicValueGenericManaCost(this); + } + + private void setText() { + text = ("Pay {1} for each +1/+1 counter on {this}"); + } +} + +class SkeletonScavengersEffect extends OneShotEffect { + + SkeletonScavengersEffect() { + super(Outcome.Benefit); + this.staticText = "Regenerate {this}. When it regenerates this way, put a +1/+1 counter on it"; + } + + SkeletonScavengersEffect(final SkeletonScavengersEffect effect) { + super(effect); + } + + @Override + public SkeletonScavengersEffect copy() { + return new SkeletonScavengersEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent skeletonScavengers = game.getPermanent(source.getSourceId()); + if (skeletonScavengers != null) { + if (new RegenerateSourceEffect().apply(game, source)) { + return new AddCountersSourceEffect(CounterType.P1P1.createInstance()).apply(game, source); + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/s/SnowDevil.java b/Mage.Sets/src/mage/cards/s/SnowDevil.java index de915a6c221..b5693ae5704 100644 --- a/Mage.Sets/src/mage/cards/s/SnowDevil.java +++ b/Mage.Sets/src/mage/cards/s/SnowDevil.java @@ -1,97 +1,97 @@ -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.condition.Condition; -import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.AttachmentType; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SuperType; -import mage.constants.Zone; -import mage.filter.common.FilterLandPermanent; -import mage.game.Game; -import mage.game.combat.CombatGroup; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * - * @author jeffwadsworth - */ -public final class SnowDevil extends CardImpl { - - public SnowDevil(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Enchanted creature has flying. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield))); - - // Enchanted creature has first strike as long as it's blocking and you control a snow land. - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, - new ConditionalContinuousEffect( - new GainAbilityAttachedEffect( - FirstStrikeAbility.getInstance(), - AttachmentType.AURA, - Duration.WhileOnBattlefield), - SnowDevilCondition.instance, - "Enchanted creature has first strike as long as it's blocking and you control a snow land" - ))); - } - - private SnowDevil(final SnowDevil card) { - super(card); - } - - @Override - public SnowDevil copy() { - return new SnowDevil(this); - } -} - -enum SnowDevilCondition implements Condition { - - instance; - - @Override - public boolean apply(Game game, Ability source) { - FilterLandPermanent filter = new FilterLandPermanent(); - filter.add(SuperType.SNOW.getPredicate()); - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null) { - Player controller = game.getPlayer(enchantment.getControllerId()); - Permanent creature = game.getPermanent(enchantment.getAttachedTo()); - if (creature != null - && controller != null) { - CombatGroup combatGroup = game.getCombat().findGroupOfBlocker(creature.getId()); - if (combatGroup != null - && !game.getBattlefield().getAllActivePermanents(filter, controller.getId(), game).isEmpty()) { - return true; - } - } - } - return false; - } -} +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.condition.Condition; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.AttachmentType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SuperType; +import mage.constants.Zone; +import mage.filter.common.FilterLandPermanent; +import mage.game.Game; +import mage.game.combat.CombatGroup; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author jeffwadsworth + */ +public final class SnowDevil extends CardImpl { + + public SnowDevil(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Enchanted creature has flying. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield))); + + // Enchanted creature has first strike as long as it's blocking and you control a snow land. + this.addAbility(new SimpleStaticAbility( + Zone.BATTLEFIELD, + new ConditionalContinuousEffect( + new GainAbilityAttachedEffect( + FirstStrikeAbility.getInstance(), + AttachmentType.AURA, + Duration.WhileOnBattlefield), + SnowDevilCondition.instance, + "Enchanted creature has first strike as long as it's blocking and you control a snow land" + ))); + } + + private SnowDevil(final SnowDevil card) { + super(card); + } + + @Override + public SnowDevil copy() { + return new SnowDevil(this); + } +} + +enum SnowDevilCondition implements Condition { + + instance; + + @Override + public boolean apply(Game game, Ability source) { + FilterLandPermanent filter = new FilterLandPermanent(); + filter.add(SuperType.SNOW.getPredicate()); + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null) { + Player controller = game.getPlayer(enchantment.getControllerId()); + Permanent creature = game.getPermanent(enchantment.getAttachedTo()); + if (creature != null + && controller != null) { + CombatGroup combatGroup = game.getCombat().findGroupOfBlocker(creature.getId()); + if (combatGroup != null + && !game.getBattlefield().getAllActivePermanents(filter, controller.getId(), game).isEmpty()) { + return true; + } + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/s/SoulSculptor.java b/Mage.Sets/src/mage/cards/s/SoulSculptor.java index f82ccd16f1b..710fe7cc5cc 100644 --- a/Mage.Sets/src/mage/cards/s/SoulSculptor.java +++ b/Mage.Sets/src/mage/cards/s/SoulSculptor.java @@ -1,149 +1,149 @@ -package mage.cards.s; - -import java.util.UUID; -import mage.MageInt; -import mage.MageObjectReference; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.Condition; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.DependencyType; -import mage.constants.Duration; -import mage.constants.Layer; -import static mage.constants.Layer.TypeChangingEffects_4; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.stack.StackObject; -import mage.target.common.TargetCreaturePermanent; - -/** - * - * @author jeffwadsworth - */ -public final class SoulSculptor extends CardImpl { - - final String rule = "Target creature becomes an enchantment and loses all abilities until a player casts a creature spell."; - - public SoulSculptor(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); - - this.subtype.add(SubType.HUMAN); - this.power = new MageInt(1); - this.toughness = new MageInt(1); - - // {1}{W}, {tap}: Target creature becomes an enchantment and loses all abilities until a player casts a creature spell. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new SoulSculptorEffect(), SoulSculptorCondition.instance, rule), new ManaCostsImpl("{1}{W}")); - ability.addCost(new TapSourceCost()); - ability.addTarget(new TargetCreaturePermanent()); - this.addAbility(ability); - - } - - public SoulSculptor(final SoulSculptor card) { - super(card); - } - - @Override - public SoulSculptor copy() { - return new SoulSculptor(this); - } -} - -class SoulSculptorEffect extends ContinuousEffectImpl { - - public SoulSculptorEffect() { - super(Duration.Custom, Outcome.LoseAbility); - staticText = "target becomes an Enchantment and loses all abilites"; - dependencyTypes.add(DependencyType.EnchantmentAddingRemoving); - dependencyTypes.add(DependencyType.AddingAbility); - - } - - public SoulSculptorEffect(final SoulSculptorEffect effect) { - super(effect); - } - - @Override - public SoulSculptorEffect copy() { - return new SoulSculptorEffect(this); - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - Permanent targetPermanent = game.getPermanent(source.getFirstTarget()); - if (targetPermanent != null) { - affectedObjectList.add(new MageObjectReference(targetPermanent, game)); - } - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Permanent permanent = affectedObjectList.get(0).getPermanent(game); - if (permanent != null) { - switch (layer) { - case TypeChangingEffects_4: - if (sublayer == SubLayer.NA) { - permanent.getCardType().clear(); - permanent.getSubtype(game).clear(); - if (!permanent.getCardType().contains(CardType.ENCHANTMENT)) { - permanent.getCardType().add(CardType.ENCHANTMENT); - } - } - break; - case AbilityAddingRemovingEffects_6: - if (sublayer == SubLayer.NA) { - permanent.getAbilities().clear(); - } - break; - } - return true; - } - this.discard(); - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return Layer.TypeChangingEffects_4 == layer - || Layer.AbilityAddingRemovingEffects_6 == layer; - } - -} - -enum SoulSculptorCondition implements Condition { - - instance; - - @Override - public boolean apply(Game game, Ability source) { - if (!game.getStack().isEmpty()) { - StackObject stackObject = game.getStack().getFirst(); - if (stackObject != null) { - return !stackObject.getCardType().contains(CardType.CREATURE); - } - } - return true; - } - - @Override - public String toString() { - return "creature spell cast"; - } - -} +package mage.cards.s; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.DependencyType; +import mage.constants.Duration; +import mage.constants.Layer; +import static mage.constants.Layer.TypeChangingEffects_4; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.stack.StackObject; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public final class SoulSculptor extends CardImpl { + + final String rule = "Target creature becomes an enchantment and loses all abilities until a player casts a creature spell."; + + public SoulSculptor(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); + + this.subtype.add(SubType.HUMAN); + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + // {1}{W}, {tap}: Target creature becomes an enchantment and loses all abilities until a player casts a creature spell. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect(new SoulSculptorEffect(), SoulSculptorCondition.instance, rule), new ManaCostsImpl("{1}{W}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + } + + public SoulSculptor(final SoulSculptor card) { + super(card); + } + + @Override + public SoulSculptor copy() { + return new SoulSculptor(this); + } +} + +class SoulSculptorEffect extends ContinuousEffectImpl { + + public SoulSculptorEffect() { + super(Duration.Custom, Outcome.LoseAbility); + staticText = "target becomes an Enchantment and loses all abilites"; + dependencyTypes.add(DependencyType.EnchantmentAddingRemoving); + dependencyTypes.add(DependencyType.AddingAbility); + + } + + public SoulSculptorEffect(final SoulSculptorEffect effect) { + super(effect); + } + + @Override + public SoulSculptorEffect copy() { + return new SoulSculptorEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + Permanent targetPermanent = game.getPermanent(source.getFirstTarget()); + if (targetPermanent != null) { + affectedObjectList.add(new MageObjectReference(targetPermanent, game)); + } + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Permanent permanent = affectedObjectList.get(0).getPermanent(game); + if (permanent != null) { + switch (layer) { + case TypeChangingEffects_4: + if (sublayer == SubLayer.NA) { + permanent.getCardType().clear(); + permanent.getSubtype(game).clear(); + if (!permanent.getCardType().contains(CardType.ENCHANTMENT)) { + permanent.getCardType().add(CardType.ENCHANTMENT); + } + } + break; + case AbilityAddingRemovingEffects_6: + if (sublayer == SubLayer.NA) { + permanent.getAbilities().clear(); + } + break; + } + return true; + } + this.discard(); + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return Layer.TypeChangingEffects_4 == layer + || Layer.AbilityAddingRemovingEffects_6 == layer; + } + +} + +enum SoulSculptorCondition implements Condition { + + instance; + + @Override + public boolean apply(Game game, Ability source) { + if (!game.getStack().isEmpty()) { + StackObject stackObject = game.getStack().getFirst(); + if (stackObject != null) { + return !stackObject.getCardType().contains(CardType.CREATURE); + } + } + return true; + } + + @Override + public String toString() { + return "creature spell cast"; + } + +} diff --git a/Mage.Sets/src/mage/cards/s/Soulshriek.java b/Mage.Sets/src/mage/cards/s/Soulshriek.java index 413ef752cea..9b4af6fe815 100644 --- a/Mage.Sets/src/mage/cards/s/Soulshriek.java +++ b/Mage.Sets/src/mage/cards/s/Soulshriek.java @@ -1,82 +1,82 @@ -package mage.cards.s; - -import java.util.UUID; - -import mage.abilities.Ability; -import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; -import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.Effect; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.SacrificeTargetEffect; -import mage.abilities.effects.common.continuous.BoostTargetEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.targetpointer.FixedTarget; - -/* - * - * @author Ketsuban - */ -public class Soulshriek extends CardImpl { - - protected static final FilterCard filterCard = new FilterCard("creature cards"); - - static { - filterCard.add(CardType.CREATURE.getPredicate()); - } - - public Soulshriek(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{B}"); - - // Target creature you control gets +X/+0 until end of turn, where X is the number of creature cards in your graveyard. Sacrifice that creature at the beginning of the next end step. - this.getSpellAbility().addEffect(new SoulshriekEffect()); - this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); - } - - @Override - public Card copy() { - return null; - } -} - -class SoulshriekEffect extends OneShotEffect { - - public SoulshriekEffect() { - super(Outcome.DestroyPermanent); - this.staticText = "Target creature you control gets +X/+0 until end of turn, where X is the number of creature cards in your graveyard. Sacrifice that creature at the beginning of the next end step"; - } - - public SoulshriekEffect(final SoulshriekEffect effect) { - super(effect); - } - - @Override - public SoulshriekEffect copy() { - return new SoulshriekEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getFirstTarget()); - if (permanent != null) { - ContinuousEffect boost = new BoostTargetEffect(new CardsInControllerGraveyardCount(Soulshriek.filterCard), StaticValue.get(0), Duration.EndOfTurn); - boost.setTargetPointer(new FixedTarget(permanent, game)); - game.addEffect(boost, source); - Effect sacrifice = new SacrificeTargetEffect("Sacrifice that creature at the beginning of the next end step", source.getControllerId()); - sacrifice.setTargetPointer(new FixedTarget(permanent, game)); - game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrifice), source); - return true; - } - return false; - } -} +package mage.cards.s; + +import java.util.UUID; + +import mage.abilities.Ability; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.SacrificeTargetEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/* + * + * @author Ketsuban + */ +public class Soulshriek extends CardImpl { + + protected static final FilterCard filterCard = new FilterCard("creature cards"); + + static { + filterCard.add(CardType.CREATURE.getPredicate()); + } + + public Soulshriek(UUID ownerId, CardSetInfo setInfo) { + super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{B}"); + + // Target creature you control gets +X/+0 until end of turn, where X is the number of creature cards in your graveyard. Sacrifice that creature at the beginning of the next end step. + this.getSpellAbility().addEffect(new SoulshriekEffect()); + this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + } + + @Override + public Card copy() { + return null; + } +} + +class SoulshriekEffect extends OneShotEffect { + + public SoulshriekEffect() { + super(Outcome.DestroyPermanent); + this.staticText = "Target creature you control gets +X/+0 until end of turn, where X is the number of creature cards in your graveyard. Sacrifice that creature at the beginning of the next end step"; + } + + public SoulshriekEffect(final SoulshriekEffect effect) { + super(effect); + } + + @Override + public SoulshriekEffect copy() { + return new SoulshriekEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getFirstTarget()); + if (permanent != null) { + ContinuousEffect boost = new BoostTargetEffect(new CardsInControllerGraveyardCount(Soulshriek.filterCard), StaticValue.get(0), Duration.EndOfTurn); + boost.setTargetPointer(new FixedTarget(permanent, game)); + game.addEffect(boost, source); + Effect sacrifice = new SacrificeTargetEffect("Sacrifice that creature at the beginning of the next end step", source.getControllerId()); + sacrifice.setTargetPointer(new FixedTarget(permanent, game)); + game.addDelayedTriggeredAbility(new AtTheBeginOfNextEndStepDelayedTriggeredAbility(sacrifice), source); + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/s/SpinyStarfish.java b/Mage.Sets/src/mage/cards/s/SpinyStarfish.java index 8c577809ac4..760f56bcf2c 100644 --- a/Mage.Sets/src/mage/cards/s/SpinyStarfish.java +++ b/Mage.Sets/src/mage/cards/s/SpinyStarfish.java @@ -1,141 +1,141 @@ -package mage.cards.s; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfEndStepTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.Condition; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.CreateTokenEffect; -import mage.abilities.effects.common.RegenerateSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.*; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.token.StarfishToken; -import mage.watchers.Watcher; - -import java.util.HashMap; -import java.util.Map; -import java.util.UUID; - -/** - * @author spike - */ -public final class SpinyStarfish extends CardImpl { - - public SpinyStarfish(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); - this.subtype.add(SubType.STARFISH); - this.power = new MageInt(0); - this.toughness = new MageInt(1); - - // {U}: Regenerate Spiny Starfish. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{U}"))); - - // At the beginning of each end step, if Spiny Starfish regenerated this turn, create a 0/1 blue Starfish creature token for each time it regenerated this turn. - this.addAbility( - new ConditionalInterveningIfTriggeredAbility( - new BeginningOfEndStepTriggeredAbility( - new CreateTokenEffect( - new StarfishToken(), - new SpinyStarfishDynamicValue()), - TargetController.ANY, - false), - SpinyStarfishCondition.instance, - "At the beginning of each end step, if {this} regenerated this turn, create a 0/1 blue Starfish creature token for each time it regenerated this turn."), - new SpinyStarfishWatcher()); - } - - public SpinyStarfish(final SpinyStarfish card) { - super(card); - } - - @Override - public SpinyStarfish copy() { - return new SpinyStarfish(this); - } -} - -enum SpinyStarfishCondition implements Condition { - - instance; - - @Override - public boolean apply(Game game, Ability source) { - SpinyStarfishWatcher watcher = game.getState().getWatcher(SpinyStarfishWatcher.class); - return watcher != null && watcher.regeneratedCount(source.getSourceId()) != 0; - } - - @Override - public String toString() { - return "if Spiny Starfish regenerated this turn"; - } - -} - -class SpinyStarfishWatcher extends Watcher { - - // Probably dumb to record all regeneration events, could just record this, - // but not sure how to know what source this watcher is attached to. - private final Map regeneratedCount = new HashMap<>(); - - public SpinyStarfishWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.REGENERATED) { - UUID regeneratedId = event.getTargetId(); - Integer count = regeneratedCount.get(regeneratedId); - if (count == null) { - count = 0; - } - regeneratedCount.put(regeneratedId, ++count); - } - } - - @Override - public void reset() { - super.reset(); - regeneratedCount.clear(); - } - - public int regeneratedCount(UUID sourceId) { - return regeneratedCount.getOrDefault(sourceId, 0); - } - -} - -class SpinyStarfishDynamicValue implements DynamicValue { - - @Override - public int calculate(Game game, Ability sourceAbility, Effect effect) { - SpinyStarfishWatcher watcher = game.getState().getWatcher( - SpinyStarfishWatcher.class); - if (watcher != null) { - return watcher.regeneratedCount(sourceAbility.getSourceId()); - } - return 0; - } - - @Override - public SpinyStarfishDynamicValue copy() { - return new SpinyStarfishDynamicValue(); - } - - @Override - public String toString() { - return "1"; - } - - @Override - public String getMessage() { - return "time {this} regenerated this turn"; - } -} +package mage.cards.s; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.RegenerateSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.*; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.token.StarfishToken; +import mage.watchers.Watcher; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * @author spike + */ +public final class SpinyStarfish extends CardImpl { + + public SpinyStarfish(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); + this.subtype.add(SubType.STARFISH); + this.power = new MageInt(0); + this.toughness = new MageInt(1); + + // {U}: Regenerate Spiny Starfish. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{U}"))); + + // At the beginning of each end step, if Spiny Starfish regenerated this turn, create a 0/1 blue Starfish creature token for each time it regenerated this turn. + this.addAbility( + new ConditionalInterveningIfTriggeredAbility( + new BeginningOfEndStepTriggeredAbility( + new CreateTokenEffect( + new StarfishToken(), + new SpinyStarfishDynamicValue()), + TargetController.ANY, + false), + SpinyStarfishCondition.instance, + "At the beginning of each end step, if {this} regenerated this turn, create a 0/1 blue Starfish creature token for each time it regenerated this turn."), + new SpinyStarfishWatcher()); + } + + public SpinyStarfish(final SpinyStarfish card) { + super(card); + } + + @Override + public SpinyStarfish copy() { + return new SpinyStarfish(this); + } +} + +enum SpinyStarfishCondition implements Condition { + + instance; + + @Override + public boolean apply(Game game, Ability source) { + SpinyStarfishWatcher watcher = game.getState().getWatcher(SpinyStarfishWatcher.class); + return watcher != null && watcher.regeneratedCount(source.getSourceId()) != 0; + } + + @Override + public String toString() { + return "if Spiny Starfish regenerated this turn"; + } + +} + +class SpinyStarfishWatcher extends Watcher { + + // Probably dumb to record all regeneration events, could just record this, + // but not sure how to know what source this watcher is attached to. + private final Map regeneratedCount = new HashMap<>(); + + public SpinyStarfishWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.REGENERATED) { + UUID regeneratedId = event.getTargetId(); + Integer count = regeneratedCount.get(regeneratedId); + if (count == null) { + count = 0; + } + regeneratedCount.put(regeneratedId, ++count); + } + } + + @Override + public void reset() { + super.reset(); + regeneratedCount.clear(); + } + + public int regeneratedCount(UUID sourceId) { + return regeneratedCount.getOrDefault(sourceId, 0); + } + +} + +class SpinyStarfishDynamicValue implements DynamicValue { + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + SpinyStarfishWatcher watcher = game.getState().getWatcher( + SpinyStarfishWatcher.class); + if (watcher != null) { + return watcher.regeneratedCount(sourceAbility.getSourceId()); + } + return 0; + } + + @Override + public SpinyStarfishDynamicValue copy() { + return new SpinyStarfishDynamicValue(); + } + + @Override + public String toString() { + return "1"; + } + + @Override + public String getMessage() { + return "time {this} regenerated this turn"; + } +} diff --git a/Mage.Sets/src/mage/cards/s/StenchOfEvil.java b/Mage.Sets/src/mage/cards/s/StenchOfEvil.java index b20a807469d..6562b791a0f 100644 --- a/Mage.Sets/src/mage/cards/s/StenchOfEvil.java +++ b/Mage.Sets/src/mage/cards/s/StenchOfEvil.java @@ -1,80 +1,80 @@ -package mage.cards.s; - -import mage.abilities.Ability; -import mage.abilities.costs.Cost; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.effects.OneShotEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.filter.common.FilterLandPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class StenchOfEvil extends CardImpl { - - public StenchOfEvil(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}{B}"); - - // Destroy all Plains. For each land destroyed this way, Stench of Evil deals 1 damage to that land's controller unless they pay {2}. - this.getSpellAbility().addEffect(new StenchOfEvilEffect()); - - } - - private StenchOfEvil(final StenchOfEvil card) { - super(card); - } - - @Override - public StenchOfEvil copy() { - return new StenchOfEvil(this); - } -} - -class StenchOfEvilEffect extends OneShotEffect { - - private static final FilterLandPermanent filter = new FilterLandPermanent(); - - static { - filter.add(SubType.PLAINS.getPredicate()); - } - - public StenchOfEvilEffect() { - super(Outcome.Benefit); - this.staticText = "Destroy all Plains. For each land destroyed this way, {this} deals 1 damage to that land's controller unless they pay {2}"; - } - - public StenchOfEvilEffect(final StenchOfEvilEffect effect) { - super(effect); - } - - @Override - public StenchOfEvilEffect copy() { - return new StenchOfEvilEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - for (Permanent land : game.getBattlefield().getAllActivePermanents(filter, game)) { - UUID landControllerId = land.getControllerId(); - if (land.destroy(source.getSourceId(), game, false)) { - Cost cost = new ManaCostsImpl("{2}"); - Player landController = game.getPlayer(landControllerId); - if (landController != null - && cost.canPay(source, source.getSourceId(), landControllerId, game) - && !cost.pay(source, game, source.getSourceId(), landControllerId, false)) { - landController.damage(1, source.getSourceId(), game); - } - } - } - return true; - } -} +package mage.cards.s; + +import mage.abilities.Ability; +import mage.abilities.costs.Cost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.common.FilterLandPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class StenchOfEvil extends CardImpl { + + public StenchOfEvil(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{B}{B}"); + + // Destroy all Plains. For each land destroyed this way, Stench of Evil deals 1 damage to that land's controller unless they pay {2}. + this.getSpellAbility().addEffect(new StenchOfEvilEffect()); + + } + + private StenchOfEvil(final StenchOfEvil card) { + super(card); + } + + @Override + public StenchOfEvil copy() { + return new StenchOfEvil(this); + } +} + +class StenchOfEvilEffect extends OneShotEffect { + + private static final FilterLandPermanent filter = new FilterLandPermanent(); + + static { + filter.add(SubType.PLAINS.getPredicate()); + } + + public StenchOfEvilEffect() { + super(Outcome.Benefit); + this.staticText = "Destroy all Plains. For each land destroyed this way, {this} deals 1 damage to that land's controller unless they pay {2}"; + } + + public StenchOfEvilEffect(final StenchOfEvilEffect effect) { + super(effect); + } + + @Override + public StenchOfEvilEffect copy() { + return new StenchOfEvilEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + for (Permanent land : game.getBattlefield().getAllActivePermanents(filter, game)) { + UUID landControllerId = land.getControllerId(); + if (land.destroy(source.getSourceId(), game, false)) { + Cost cost = new ManaCostsImpl("{2}"); + Player landController = game.getPlayer(landControllerId); + if (landController != null + && cost.canPay(source, source.getSourceId(), landControllerId, game) + && !cost.pay(source, game, source.getSourceId(), landControllerId, false)) { + landController.damage(1, source.getSourceId(), game); + } + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/cards/u/UnmooredEgo.java b/Mage.Sets/src/mage/cards/u/UnmooredEgo.java index 10c481c367e..d502014e6f1 100644 --- a/Mage.Sets/src/mage/cards/u/UnmooredEgo.java +++ b/Mage.Sets/src/mage/cards/u/UnmooredEgo.java @@ -1,124 +1,124 @@ -package mage.cards.u; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ChooseACardNameEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.mageobject.NamePredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; -import mage.target.common.TargetCardInLibrary; -import mage.target.common.TargetOpponent; - -/** - * - * @author LevelX2 - */ -public final class UnmooredEgo extends CardImpl { - - public UnmooredEgo(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}{B}"); - - // Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. That player shuffles their library, then draws a card for each card exiled from their hand this way. - this.getSpellAbility().addEffect((new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL))); - this.getSpellAbility().addEffect(new UnmooredEgoEffect()); - this.getSpellAbility().addTarget(new TargetOpponent()); - } - - public UnmooredEgo(final UnmooredEgo card) { - super(card); - } - - @Override - public UnmooredEgo copy() { - return new UnmooredEgo(this); - } -} - -class UnmooredEgoEffect extends OneShotEffect { - - public UnmooredEgoEffect() { - super(Outcome.Benefit); - this.staticText = "Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. That player shuffles their library, then draws a card for each card exiled from their hand this way"; - } - - public UnmooredEgoEffect(final UnmooredEgoEffect effect) { - super(effect); - } - - @Override - public UnmooredEgoEffect copy() { - return new UnmooredEgoEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - String cardName = (String) game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY); - Player controller = game.getPlayer(source.getControllerId()); - if (cardName != null && controller != null) { - int numberOfCardsStillToRemove = 4; - int numberOfCardsExiledFromHand = 0; - Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); - if (targetPlayer != null) { - FilterCard filter = new FilterCard("card named " + cardName); - filter.add(new NamePredicate(cardName)); - - // cards in Graveyard - int cardsCount = (cardName.isEmpty() ? 0 : targetPlayer.getGraveyard().count(filter, game)); - if (cardsCount > 0) { - filter.setMessage("card named " + cardName + " in the graveyard of " + targetPlayer.getName()); - TargetCard target = new TargetCard(Math.min(cardsCount, numberOfCardsStillToRemove), - Math.min(cardsCount, numberOfCardsStillToRemove), Zone.GRAVEYARD, filter); - if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, game)) { - numberOfCardsStillToRemove -= target.getTargets().size(); - controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); - } - } - - // cards in Hand - if (numberOfCardsStillToRemove > 0) { - cardsCount = (cardName.isEmpty() ? 0 : targetPlayer.getHand().count(filter, game)); - filter.setMessage("card named " + cardName + " in the hand of " + targetPlayer.getName()); - TargetCard target = new TargetCard(0, Math.min(cardsCount, numberOfCardsStillToRemove), Zone.HAND, filter); - if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { - numberOfCardsExiledFromHand = target.getTargets().size(); - numberOfCardsStillToRemove -= target.getTargets().size(); - controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); - } - } - - // cards in Library - if (numberOfCardsStillToRemove > 0) { - Cards cardsInLibrary = new CardsImpl(); - cardsInLibrary.addAll(targetPlayer.getLibrary().getCards(game)); - cardsCount = (cardName.isEmpty() ? 0 : cardsInLibrary.count(filter, game)); - filter.setMessage("card named " + cardName + " in the library of " + targetPlayer.getLogName()); - TargetCardInLibrary targetLib = new TargetCardInLibrary(0, Math.min(cardsCount, numberOfCardsStillToRemove), filter); - if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, game)) { - controller.moveCards(new CardsImpl(targetLib.getTargets()), Zone.EXILED, source, game); - } - } - targetPlayer.shuffleLibrary(source, game); - - if (numberOfCardsExiledFromHand > 0) { - game.getState().applyEffects(game); - targetPlayer.drawCards(numberOfCardsExiledFromHand, source.getSourceId(), game); - } - } - - return true; - } - - return false; - } - -} +package mage.cards.u; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ChooseACardNameEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetOpponent; + +/** + * + * @author LevelX2 + */ +public final class UnmooredEgo extends CardImpl { + + public UnmooredEgo(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{1}{U}{B}"); + + // Choose a card name. Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. That player shuffles their library, then draws a card for each card exiled from their hand this way. + this.getSpellAbility().addEffect((new ChooseACardNameEffect(ChooseACardNameEffect.TypeOfName.ALL))); + this.getSpellAbility().addEffect(new UnmooredEgoEffect()); + this.getSpellAbility().addTarget(new TargetOpponent()); + } + + public UnmooredEgo(final UnmooredEgo card) { + super(card); + } + + @Override + public UnmooredEgo copy() { + return new UnmooredEgo(this); + } +} + +class UnmooredEgoEffect extends OneShotEffect { + + public UnmooredEgoEffect() { + super(Outcome.Benefit); + this.staticText = "Search target opponent's graveyard, hand, and library for up to four cards with that name and exile them. That player shuffles their library, then draws a card for each card exiled from their hand this way"; + } + + public UnmooredEgoEffect(final UnmooredEgoEffect effect) { + super(effect); + } + + @Override + public UnmooredEgoEffect copy() { + return new UnmooredEgoEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + String cardName = (String) game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY); + Player controller = game.getPlayer(source.getControllerId()); + if (cardName != null && controller != null) { + int numberOfCardsStillToRemove = 4; + int numberOfCardsExiledFromHand = 0; + Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); + if (targetPlayer != null) { + FilterCard filter = new FilterCard("card named " + cardName); + filter.add(new NamePredicate(cardName)); + + // cards in Graveyard + int cardsCount = (cardName.isEmpty() ? 0 : targetPlayer.getGraveyard().count(filter, game)); + if (cardsCount > 0) { + filter.setMessage("card named " + cardName + " in the graveyard of " + targetPlayer.getName()); + TargetCard target = new TargetCard(Math.min(cardsCount, numberOfCardsStillToRemove), + Math.min(cardsCount, numberOfCardsStillToRemove), Zone.GRAVEYARD, filter); + if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, game)) { + numberOfCardsStillToRemove -= target.getTargets().size(); + controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); + } + } + + // cards in Hand + if (numberOfCardsStillToRemove > 0) { + cardsCount = (cardName.isEmpty() ? 0 : targetPlayer.getHand().count(filter, game)); + filter.setMessage("card named " + cardName + " in the hand of " + targetPlayer.getName()); + TargetCard target = new TargetCard(0, Math.min(cardsCount, numberOfCardsStillToRemove), Zone.HAND, filter); + if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { + numberOfCardsExiledFromHand = target.getTargets().size(); + numberOfCardsStillToRemove -= target.getTargets().size(); + controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); + } + } + + // cards in Library + if (numberOfCardsStillToRemove > 0) { + Cards cardsInLibrary = new CardsImpl(); + cardsInLibrary.addAll(targetPlayer.getLibrary().getCards(game)); + cardsCount = (cardName.isEmpty() ? 0 : cardsInLibrary.count(filter, game)); + filter.setMessage("card named " + cardName + " in the library of " + targetPlayer.getLogName()); + TargetCardInLibrary targetLib = new TargetCardInLibrary(0, Math.min(cardsCount, numberOfCardsStillToRemove), filter); + if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, game)) { + controller.moveCards(new CardsImpl(targetLib.getTargets()), Zone.EXILED, source, game); + } + } + targetPlayer.shuffleLibrary(source, game); + + if (numberOfCardsExiledFromHand > 0) { + game.getState().applyEffects(game); + targetPlayer.drawCards(numberOfCardsExiledFromHand, source.getSourceId(), game); + } + } + + return true; + } + + return false; + } + +} diff --git a/Mage.Sets/src/mage/cards/u/UrborgPanther.java b/Mage.Sets/src/mage/cards/u/UrborgPanther.java index 657d34d5857..fc0cae69452 100644 --- a/Mage.Sets/src/mage/cards/u/UrborgPanther.java +++ b/Mage.Sets/src/mage/cards/u/UrborgPanther.java @@ -1,81 +1,81 @@ -package mage.cards.u; - -import java.util.UUID; - -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.costs.common.SacrificeSourceCost; -import mage.abilities.costs.common.SacrificeTargetCost; -import mage.abilities.costs.mana.ColoredManaCost; -import mage.abilities.effects.common.DestroyTargetEffect; -import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ColoredManaSymbol; -import mage.constants.SubType; -import mage.filter.FilterCard; -import mage.filter.common.FilterControlledCreaturePermanent; -import mage.filter.common.FilterCreatureCard; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.mageobject.NamePredicate; -import mage.filter.predicate.permanent.BlockingAttackerIdPredicate; -import mage.target.common.TargetCardInLibrary; -import mage.target.common.TargetControlledCreaturePermanent; -import mage.target.common.TargetCreaturePermanent; - -/** - * - * @author Ketsuban - */ -public class UrborgPanther extends CardImpl { - - private static final FilterControlledCreaturePermanent filter1 = new FilterControlledCreaturePermanent("creature named Feral Shadow"); - private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("creature named Breathstealer"); - - private static final FilterCard filterCard = new FilterCreatureCard("card named Spirit of the Night"); - - static { - filter1.add(new NamePredicate("Feral Shadow")); - filter2.add(new NamePredicate("Breathstealer")); - filterCard.add(new NamePredicate("Spirit of the Night")); - } - - public UrborgPanther(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[] { CardType.CREATURE }, "{2}{B}"); - this.subtype.add(SubType.NIGHTSTALKER); - this.subtype.add(SubType.CAT); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - - // B, Sacrifice Urborg Panther: Destroy target creature blocking Urborg Panther. - Ability ability1 = new SimpleActivatedAbility(new DestroyTargetEffect(), - new ColoredManaCost(ColoredManaSymbol.B)); - ability1.addCost(new SacrificeSourceCost()); - FilterCreaturePermanent filter = new FilterCreaturePermanent("creature blocking {this}"); - filter.add(new BlockingAttackerIdPredicate(this.getId())); - ability1.addTarget(new TargetCreaturePermanent(filter)); - this.addAbility(ability1); - - // Sacrifice a creature named Feral Shadow, a creature named Breathstealer, and - // Urborg Panther: Search your library for a card named Spirit of the Night and - // put that card onto the battlefield. Then shuffle your library. - Ability ability2 = new SimpleActivatedAbility( - new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(1, 1, new FilterCard(filterCard))), - new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter1, true))); - ability2.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter2, true))); - ability2.addCost(new SacrificeSourceCost()); - this.addAbility(ability2); - } - - public UrborgPanther(final UrborgPanther card) { - super(card); - } - - @Override - public UrborgPanther copy() { - return new UrborgPanther(this); - } - -} +package mage.cards.u; + +import java.util.UUID; + +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.mana.ColoredManaCost; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.SubType; +import mage.filter.FilterCard; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreatureCard; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.NamePredicate; +import mage.filter.predicate.permanent.BlockingAttackerIdPredicate; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author Ketsuban + */ +public class UrborgPanther extends CardImpl { + + private static final FilterControlledCreaturePermanent filter1 = new FilterControlledCreaturePermanent("creature named Feral Shadow"); + private static final FilterControlledCreaturePermanent filter2 = new FilterControlledCreaturePermanent("creature named Breathstealer"); + + private static final FilterCard filterCard = new FilterCreatureCard("card named Spirit of the Night"); + + static { + filter1.add(new NamePredicate("Feral Shadow")); + filter2.add(new NamePredicate("Breathstealer")); + filterCard.add(new NamePredicate("Spirit of the Night")); + } + + public UrborgPanther(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[] { CardType.CREATURE }, "{2}{B}"); + this.subtype.add(SubType.NIGHTSTALKER); + this.subtype.add(SubType.CAT); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // B, Sacrifice Urborg Panther: Destroy target creature blocking Urborg Panther. + Ability ability1 = new SimpleActivatedAbility(new DestroyTargetEffect(), + new ColoredManaCost(ColoredManaSymbol.B)); + ability1.addCost(new SacrificeSourceCost()); + FilterCreaturePermanent filter = new FilterCreaturePermanent("creature blocking {this}"); + filter.add(new BlockingAttackerIdPredicate(this.getId())); + ability1.addTarget(new TargetCreaturePermanent(filter)); + this.addAbility(ability1); + + // Sacrifice a creature named Feral Shadow, a creature named Breathstealer, and + // Urborg Panther: Search your library for a card named Spirit of the Night and + // put that card onto the battlefield. Then shuffle your library. + Ability ability2 = new SimpleActivatedAbility( + new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(1, 1, new FilterCard(filterCard))), + new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter1, true))); + ability2.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, filter2, true))); + ability2.addCost(new SacrificeSourceCost()); + this.addAbility(ability2); + } + + public UrborgPanther(final UrborgPanther card) { + super(card); + } + + @Override + public UrborgPanther copy() { + return new UrborgPanther(this); + } + +} diff --git a/Mage.Sets/src/mage/cards/v/VeilOfBirds.java b/Mage.Sets/src/mage/cards/v/VeilOfBirds.java index 53e476fca42..ce1739b3e4c 100644 --- a/Mage.Sets/src/mage/cards/v/VeilOfBirds.java +++ b/Mage.Sets/src/mage/cards/v/VeilOfBirds.java @@ -1,66 +1,66 @@ -package mage.cards.v; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.SpellCastOpponentTriggeredAbility; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -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.filter.FilterSpell; -import mage.filter.StaticFilters; -import mage.game.permanent.token.TokenImpl; - -/** - * - * @author jeffwadsworth - */ -public final class VeilOfBirds extends CardImpl { - - private static final FilterSpell filter = new FilterSpell(); - - public VeilOfBirds(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); - - // When an opponent casts a spell, if Veil of Birds is an enchantment, Veil of Birds becomes a 1/1 Bird creature with flying. - TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeilOfBirdsToken(), "", Duration.WhileOnBattlefield, true, false), - filter, false); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), - "Whenever an opponent casts a spell, if Veil of Birds is an enchantment, Veil of Birds becomes a 1/1 Bird creature with flying.")); - } - - public VeilOfBirds(final VeilOfBirds card) { - super(card); - } - - @Override - public VeilOfBirds copy() { - return new VeilOfBirds(this); - } -} - -class VeilOfBirdsToken extends TokenImpl { - - public VeilOfBirdsToken() { - super("Bird", "1/1 creature with flying"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.BIRD); - power = new MageInt(1); - toughness = new MageInt(1); - this.addAbility(FlyingAbility.getInstance()); - } - - public VeilOfBirdsToken(final VeilOfBirdsToken token) { - super(token); - } - - public VeilOfBirdsToken copy() { - return new VeilOfBirdsToken(this); - } -} +package mage.cards.v; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.SpellCastOpponentTriggeredAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +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.filter.FilterSpell; +import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; + +/** + * + * @author jeffwadsworth + */ +public final class VeilOfBirds extends CardImpl { + + private static final FilterSpell filter = new FilterSpell(); + + public VeilOfBirds(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); + + // When an opponent casts a spell, if Veil of Birds is an enchantment, Veil of Birds becomes a 1/1 Bird creature with flying. + TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeilOfBirdsToken(), "", Duration.WhileOnBattlefield, true, false), + filter, false); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), + "Whenever an opponent casts a spell, if Veil of Birds is an enchantment, Veil of Birds becomes a 1/1 Bird creature with flying.")); + } + + public VeilOfBirds(final VeilOfBirds card) { + super(card); + } + + @Override + public VeilOfBirds copy() { + return new VeilOfBirds(this); + } +} + +class VeilOfBirdsToken extends TokenImpl { + + public VeilOfBirdsToken() { + super("Bird", "1/1 creature with flying"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.BIRD); + power = new MageInt(1); + toughness = new MageInt(1); + this.addAbility(FlyingAbility.getInstance()); + } + + public VeilOfBirdsToken(final VeilOfBirdsToken token) { + super(token); + } + + public VeilOfBirdsToken copy() { + return new VeilOfBirdsToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/v/VeiledApparition.java b/Mage.Sets/src/mage/cards/v/VeiledApparition.java index 2bf24f13390..f1adbce2627 100644 --- a/Mage.Sets/src/mage/cards/v/VeiledApparition.java +++ b/Mage.Sets/src/mage/cards/v/VeiledApparition.java @@ -1,74 +1,74 @@ -package mage.cards.v; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.SpellCastOpponentTriggeredAbility; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.common.DoUnlessControllerPaysEffect; -import mage.abilities.effects.common.SacrificeSourceEffect; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -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.FilterSpell; -import mage.filter.StaticFilters; -import mage.game.permanent.token.TokenImpl; - -/** - * - * @author jeffwadsworth - */ -public final class VeiledApparition extends CardImpl { - - private static final FilterSpell filter = new FilterSpell(); - - public VeiledApparition(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); - - - // When an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and "At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}." - TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeilApparitionToken(), "", Duration.WhileOnBattlefield, true, false), - filter, false); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), - "Whenever an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}.")); - - } - - public VeiledApparition(final VeiledApparition card) { - super(card); - } - - @Override - public VeiledApparition copy() { - return new VeiledApparition(this); - } -} - -class VeilApparitionToken extends TokenImpl { - - public VeilApparitionToken() { - super("Illusion", "3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}."); - cardType.add(CardType.CREATURE); - subtype.add(SubType.ILLUSION); - power = new MageInt(3); - toughness = new MageInt(3); - Ability ability = new BeginningOfUpkeepTriggeredAbility(new DoUnlessControllerPaysEffect(new SacrificeSourceEffect(), new ManaCostsImpl("{1}{U}")), TargetController.YOU, false); - this.addAbility(ability); - } - - public VeilApparitionToken(final VeilApparitionToken token) { - super(token); - } - - public VeilApparitionToken copy() { - return new VeilApparitionToken(this); - } +package mage.cards.v; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SpellCastOpponentTriggeredAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.effects.common.DoUnlessControllerPaysEffect; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +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.FilterSpell; +import mage.filter.StaticFilters; +import mage.game.permanent.token.TokenImpl; + +/** + * + * @author jeffwadsworth + */ +public final class VeiledApparition extends CardImpl { + + private static final FilterSpell filter = new FilterSpell(); + + public VeiledApparition(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + + + // When an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and "At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}." + TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeilApparitionToken(), "", Duration.WhileOnBattlefield, true, false), + filter, false); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), + "Whenever an opponent casts a spell, if Veiled Apparition is an enchantment, Veiled Apparition becomes a 3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}.")); + + } + + public VeiledApparition(final VeiledApparition card) { + super(card); + } + + @Override + public VeiledApparition copy() { + return new VeiledApparition(this); + } +} + +class VeilApparitionToken extends TokenImpl { + + public VeilApparitionToken() { + super("Illusion", "3/3 Illusion creature with flying and \"At the beginning of your upkeep, sacrifice Veiled Apparition unless you pay {1}{U}."); + cardType.add(CardType.CREATURE); + subtype.add(SubType.ILLUSION); + power = new MageInt(3); + toughness = new MageInt(3); + Ability ability = new BeginningOfUpkeepTriggeredAbility(new DoUnlessControllerPaysEffect(new SacrificeSourceEffect(), new ManaCostsImpl("{1}{U}")), TargetController.YOU, false); + this.addAbility(ability); + } + + public VeilApparitionToken(final VeilApparitionToken token) { + super(token); + } + + public VeilApparitionToken copy() { + return new VeilApparitionToken(this); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/cards/v/VeiledCrocodile.java b/Mage.Sets/src/mage/cards/v/VeiledCrocodile.java index ba72786c3fd..2819a96a1e2 100644 --- a/Mage.Sets/src/mage/cards/v/VeiledCrocodile.java +++ b/Mage.Sets/src/mage/cards/v/VeiledCrocodile.java @@ -1,126 +1,126 @@ -package mage.cards.v; - -import mage.MageInt; -import mage.abilities.StateTriggeredAbility; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.token.TokenImpl; -import mage.players.Player; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public final class VeiledCrocodile extends CardImpl { - - public VeiledCrocodile(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); - - // When a player has no cards in hand, if Veiled Crocodile is an enchantment, Veiled Crocodile becomes a 4/4 Crocodile creature. - this.addAbility(new VeiledCrocodileStateTriggeredAbility()); - } - - public VeiledCrocodile(final VeiledCrocodile card) { - super(card); - } - - @Override - public VeiledCrocodile copy() { - return new VeiledCrocodile(this); - } -} - -class VeiledCrocodileStateTriggeredAbility extends StateTriggeredAbility { - - public VeiledCrocodileStateTriggeredAbility() { - super(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new VeilCrocodileToken(), "", Duration.Custom, true, false)); - } - - public VeiledCrocodileStateTriggeredAbility(final VeiledCrocodileStateTriggeredAbility ability) { - super(ability); - } - - @Override - public VeiledCrocodileStateTriggeredAbility copy() { - return new VeiledCrocodileStateTriggeredAbility(this); - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - for (UUID playerId : game.getState().getPlayersInRange(controllerId, game)) { - Player player = game.getPlayer(playerId); - if (player != null - && player.getHand().isEmpty()) { - return true; - } - } - return false; - } - - @Override - public boolean checkInterveningIfClause(Game game) { - if (getSourcePermanentIfItStillExists(game) != null) { - return getSourcePermanentIfItStillExists(game).isEnchantment(); - } - return false; - } - - @Override - public boolean canTrigger(Game game) { - //20100716 - 603.8 - return !Boolean.TRUE.equals(game.getState().getValue(getSourceId().toString() + "triggered")); - } - - @Override - public void trigger(Game game, UUID controllerId) { - //20100716 - 603.8 - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.TRUE); - super.trigger(game, controllerId); - } - - @Override - public boolean resolve(Game game) { - //20100716 - 603.8 - boolean result = super.resolve(game); - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); - return result; - } - - @Override - public void counter(Game game) { - game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); - } - - @Override - public String getRule() { - return "When a player has no cards in hand, if {this} is an enchantment, " + super.getRule(); - } - -} - -class VeilCrocodileToken extends TokenImpl { - - public VeilCrocodileToken() { - super("Crocodile", "4/4 Crocodile creature"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.CROCODILE); - power = new MageInt(4); - toughness = new MageInt(4); - } - - public VeilCrocodileToken(final VeilCrocodileToken token) { - super(token); - } - - public VeilCrocodileToken copy() { - return new VeilCrocodileToken(this); - } -} +package mage.cards.v; + +import mage.MageInt; +import mage.abilities.StateTriggeredAbility; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.token.TokenImpl; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public final class VeiledCrocodile extends CardImpl { + + public VeiledCrocodile(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + + // When a player has no cards in hand, if Veiled Crocodile is an enchantment, Veiled Crocodile becomes a 4/4 Crocodile creature. + this.addAbility(new VeiledCrocodileStateTriggeredAbility()); + } + + public VeiledCrocodile(final VeiledCrocodile card) { + super(card); + } + + @Override + public VeiledCrocodile copy() { + return new VeiledCrocodile(this); + } +} + +class VeiledCrocodileStateTriggeredAbility extends StateTriggeredAbility { + + public VeiledCrocodileStateTriggeredAbility() { + super(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new VeilCrocodileToken(), "", Duration.Custom, true, false)); + } + + public VeiledCrocodileStateTriggeredAbility(final VeiledCrocodileStateTriggeredAbility ability) { + super(ability); + } + + @Override + public VeiledCrocodileStateTriggeredAbility copy() { + return new VeiledCrocodileStateTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + for (UUID playerId : game.getState().getPlayersInRange(controllerId, game)) { + Player player = game.getPlayer(playerId); + if (player != null + && player.getHand().isEmpty()) { + return true; + } + } + return false; + } + + @Override + public boolean checkInterveningIfClause(Game game) { + if (getSourcePermanentIfItStillExists(game) != null) { + return getSourcePermanentIfItStillExists(game).isEnchantment(); + } + return false; + } + + @Override + public boolean canTrigger(Game game) { + //20100716 - 603.8 + return !Boolean.TRUE.equals(game.getState().getValue(getSourceId().toString() + "triggered")); + } + + @Override + public void trigger(Game game, UUID controllerId) { + //20100716 - 603.8 + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.TRUE); + super.trigger(game, controllerId); + } + + @Override + public boolean resolve(Game game) { + //20100716 - 603.8 + boolean result = super.resolve(game); + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); + return result; + } + + @Override + public void counter(Game game) { + game.getState().setValue(this.getSourceId().toString() + "triggered", Boolean.FALSE); + } + + @Override + public String getRule() { + return "When a player has no cards in hand, if {this} is an enchantment, " + super.getRule(); + } + +} + +class VeilCrocodileToken extends TokenImpl { + + public VeilCrocodileToken() { + super("Crocodile", "4/4 Crocodile creature"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.CROCODILE); + power = new MageInt(4); + toughness = new MageInt(4); + } + + public VeilCrocodileToken(final VeilCrocodileToken token) { + super(token); + } + + public VeilCrocodileToken copy() { + return new VeilCrocodileToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/v/VeiledSentry.java b/Mage.Sets/src/mage/cards/v/VeiledSentry.java index 3c6ce6f61e4..933b8aaca4c 100644 --- a/Mage.Sets/src/mage/cards/v/VeiledSentry.java +++ b/Mage.Sets/src/mage/cards/v/VeiledSentry.java @@ -1,115 +1,115 @@ -package mage.cards.v; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.SpellCastOpponentTriggeredAbility; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import static mage.constants.Layer.PTChangingEffects_7; -import static mage.constants.Layer.TypeChangingEffects_4; -import mage.constants.Outcome; -import mage.constants.SetTargetPointer; -import mage.constants.SubLayer; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.StaticFilters; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.stack.Spell; - -/** - * - * @author jeffwadsworth - */ -public final class VeiledSentry extends CardImpl { - - public VeiledSentry(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); - - // When an opponent casts a spell, if Veiled Sentry is an enchantment, Veiled Sentry becomes an Illusion creature with power and toughness each equal to that spell's converted mana cost. - TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new VeiledSentryEffect(), new FilterSpell(), false, SetTargetPointer.SPELL); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), - "Whenever an opponent casts a spell, if Veiled Sentry is an enchantment, Veil Sentry becomes an Illusion creature with power and toughness equal to that spell's converted mana cost.")); - - } - - public VeiledSentry(final VeiledSentry card) { - super(card); - } - - @Override - public VeiledSentry copy() { - return new VeiledSentry(this); - } -} - -class VeiledSentryEffect extends ContinuousEffectImpl { - - public VeiledSentryEffect() { - super(Duration.Custom, Outcome.BecomeCreature); - staticText = "{this} becomes an Illusion creature with power and toughness equal to that spell's converted mana cost"; - } - - public VeiledSentryEffect(final VeiledSentryEffect effect) { - super(effect); - } - - @Override - public VeiledSentryEffect copy() { - return new VeiledSentryEffect(this); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Permanent veiledSentry = game.getPermanent(source.getSourceId()); - Spell spellCast = game.getSpell(targetPointer.getFirst(game, source)); - if (spellCast != null) { - game.getState().setValue(source + "cmcSpell", spellCast.getConvertedManaCost()); - } - if (veiledSentry == null) { - return false; - } - switch (layer) { - case TypeChangingEffects_4: - if (sublayer == SubLayer.NA) { - veiledSentry.getCardType().clear(); - if (!veiledSentry.isCreature()) { - veiledSentry.addCardType(CardType.CREATURE); - } - if (!veiledSentry.getSubtype(game).contains(SubType.ILLUSION)) { - veiledSentry.getSubtype(game).add(SubType.ILLUSION); - } - } - break; - - case PTChangingEffects_7: - if (game.getState().getValue(source + "cmcSpell") != null) { - int cmc = (int) game.getState().getValue(source + "cmcSpell"); - if (sublayer == SubLayer.SetPT_7b) { - veiledSentry.addPower(cmc); - veiledSentry.addToughness(cmc); - } - } - } - return true; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.PTChangingEffects_7 - || layer == Layer.TypeChangingEffects_4; - } -} +package mage.cards.v; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.SpellCastOpponentTriggeredAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Layer; +import static mage.constants.Layer.PTChangingEffects_7; +import static mage.constants.Layer.TypeChangingEffects_4; +import mage.constants.Outcome; +import mage.constants.SetTargetPointer; +import mage.constants.SubLayer; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.stack.Spell; + +/** + * + * @author jeffwadsworth + */ +public final class VeiledSentry extends CardImpl { + + public VeiledSentry(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{U}"); + + // When an opponent casts a spell, if Veiled Sentry is an enchantment, Veiled Sentry becomes an Illusion creature with power and toughness each equal to that spell's converted mana cost. + TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(Zone.BATTLEFIELD, new VeiledSentryEffect(), new FilterSpell(), false, SetTargetPointer.SPELL); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), + "Whenever an opponent casts a spell, if Veiled Sentry is an enchantment, Veil Sentry becomes an Illusion creature with power and toughness equal to that spell's converted mana cost.")); + + } + + public VeiledSentry(final VeiledSentry card) { + super(card); + } + + @Override + public VeiledSentry copy() { + return new VeiledSentry(this); + } +} + +class VeiledSentryEffect extends ContinuousEffectImpl { + + public VeiledSentryEffect() { + super(Duration.Custom, Outcome.BecomeCreature); + staticText = "{this} becomes an Illusion creature with power and toughness equal to that spell's converted mana cost"; + } + + public VeiledSentryEffect(final VeiledSentryEffect effect) { + super(effect); + } + + @Override + public VeiledSentryEffect copy() { + return new VeiledSentryEffect(this); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Permanent veiledSentry = game.getPermanent(source.getSourceId()); + Spell spellCast = game.getSpell(targetPointer.getFirst(game, source)); + if (spellCast != null) { + game.getState().setValue(source + "cmcSpell", spellCast.getConvertedManaCost()); + } + if (veiledSentry == null) { + return false; + } + switch (layer) { + case TypeChangingEffects_4: + if (sublayer == SubLayer.NA) { + veiledSentry.getCardType().clear(); + if (!veiledSentry.isCreature()) { + veiledSentry.addCardType(CardType.CREATURE); + } + if (!veiledSentry.getSubtype(game).contains(SubType.ILLUSION)) { + veiledSentry.getSubtype(game).add(SubType.ILLUSION); + } + } + break; + + case PTChangingEffects_7: + if (game.getState().getValue(source + "cmcSpell") != null) { + int cmc = (int) game.getState().getValue(source + "cmcSpell"); + if (sublayer == SubLayer.SetPT_7b) { + veiledSentry.addPower(cmc); + veiledSentry.addToughness(cmc); + } + } + } + return true; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.PTChangingEffects_7 + || layer == Layer.TypeChangingEffects_4; + } +} diff --git a/Mage.Sets/src/mage/cards/v/VeiledSerpent.java b/Mage.Sets/src/mage/cards/v/VeiledSerpent.java index 216133ebfda..9a95b8c023d 100644 --- a/Mage.Sets/src/mage/cards/v/VeiledSerpent.java +++ b/Mage.Sets/src/mage/cards/v/VeiledSerpent.java @@ -1,75 +1,75 @@ -package mage.cards.v; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.common.SpellCastOpponentTriggeredAbility; -import mage.abilities.condition.common.SourceMatchesFilterCondition; -import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.effects.common.combat.CantAttackUnlessDefenderControllsPermanent; -import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; -import mage.abilities.keyword.CyclingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.FilterSpell; -import mage.filter.StaticFilters; -import mage.filter.common.FilterLandPermanent; -import mage.game.permanent.token.TokenImpl; - -/** - * - * @author jeffwadsworth - */ -public final class VeiledSerpent extends CardImpl { - - public VeiledSerpent(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); - - // When an opponent casts a spell, if Veiled Serpent is an enchantment, Veiled Serpent becomes a 4/4 Serpent creature that can't attack unless defending player controls an Island. - TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeiledSerpentToken(), "", Duration.WhileOnBattlefield, true, false), - new FilterSpell(), false); - this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), - "Whenever an opponent casts a spell, if Veiled Serpent is an enchantment, Veiled Serpent becomes a 4/4 Serpent creature that can't attack unless defending player controls an Island.")); - - // Cycling {2} - this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); - - } - - public VeiledSerpent(final VeiledSerpent card) { - super(card); - } - - @Override - public VeiledSerpent copy() { - return new VeiledSerpent(this); - } -} - -class VeiledSerpentToken extends TokenImpl { - - public VeiledSerpentToken() { - super("Serpent", "4/4 Serpent creature"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.SERPENT); - power = new MageInt(4); - toughness = new MageInt(4); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, - new CantAttackUnlessDefenderControllsPermanent( - new FilterLandPermanent(SubType.ISLAND, "an Island")))); - } - - public VeiledSerpentToken(final VeiledSerpentToken token) { - super(token); - } - - public VeiledSerpentToken copy() { - return new VeiledSerpentToken(this); - } -} +package mage.cards.v; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.common.SpellCastOpponentTriggeredAbility; +import mage.abilities.condition.common.SourceMatchesFilterCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.effects.common.combat.CantAttackUnlessDefenderControllsPermanent; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.abilities.keyword.CyclingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.StaticFilters; +import mage.filter.common.FilterLandPermanent; +import mage.game.permanent.token.TokenImpl; + +/** + * + * @author jeffwadsworth + */ +public final class VeiledSerpent extends CardImpl { + + public VeiledSerpent(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + + // When an opponent casts a spell, if Veiled Serpent is an enchantment, Veiled Serpent becomes a 4/4 Serpent creature that can't attack unless defending player controls an Island. + TriggeredAbility ability = new SpellCastOpponentTriggeredAbility(new BecomesCreatureSourceEffect(new VeiledSerpentToken(), "", Duration.WhileOnBattlefield, true, false), + new FilterSpell(), false); + this.addAbility(new ConditionalInterveningIfTriggeredAbility(ability, new SourceMatchesFilterCondition(StaticFilters.FILTER_ENCHANTMENT_PERMANENT), + "Whenever an opponent casts a spell, if Veiled Serpent is an enchantment, Veiled Serpent becomes a 4/4 Serpent creature that can't attack unless defending player controls an Island.")); + + // Cycling {2} + this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); + + } + + public VeiledSerpent(final VeiledSerpent card) { + super(card); + } + + @Override + public VeiledSerpent copy() { + return new VeiledSerpent(this); + } +} + +class VeiledSerpentToken extends TokenImpl { + + public VeiledSerpentToken() { + super("Serpent", "4/4 Serpent creature"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.SERPENT); + power = new MageInt(4); + toughness = new MageInt(4); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new CantAttackUnlessDefenderControllsPermanent( + new FilterLandPermanent(SubType.ISLAND, "an Island")))); + } + + public VeiledSerpentToken(final VeiledSerpentToken token) { + super(token); + } + + public VeiledSerpentToken copy() { + return new VeiledSerpentToken(this); + } +} diff --git a/Mage.Sets/src/mage/cards/v/VenomousFangs.java b/Mage.Sets/src/mage/cards/v/VenomousFangs.java index 1be68f955f2..2cff30f8077 100644 --- a/Mage.Sets/src/mage/cards/v/VenomousFangs.java +++ b/Mage.Sets/src/mage/cards/v/VenomousFangs.java @@ -1,48 +1,48 @@ -package mage.cards.v; - -import java.util.UUID; -import mage.constants.SubType; -import mage.target.common.TargetCreaturePermanent; -import mage.abilities.Ability; -import mage.abilities.common.DealsDamageToACreatureAttachedTriggeredAbility; -import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyTargetEffect; -import mage.constants.Outcome; -import mage.target.TargetPermanent; -import mage.abilities.keyword.EnchantAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; - -/** - * - * @author jeffwadsworth - */ -public final class VenomousFangs extends CardImpl { - - public VenomousFangs(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); - - this.subtype.add(SubType.AURA); - - // Enchant creature - TargetPermanent auraTarget = new TargetCreaturePermanent(); - this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); - Ability ability = new EnchantAbility(auraTarget.getTargetName()); - this.addAbility(ability); - - // Whenever enchanted creature deals damage to a creature, destroy the other creature. - this.addAbility(new DealsDamageToACreatureAttachedTriggeredAbility(new DestroyTargetEffect(), false, "enchanted creature", false, true)); - - } - - public VenomousFangs(final VenomousFangs card) { - super(card); - } - - @Override - public VenomousFangs copy() { - return new VenomousFangs(this); - } -} +package mage.cards.v; + +import java.util.UUID; +import mage.constants.SubType; +import mage.target.common.TargetCreaturePermanent; +import mage.abilities.Ability; +import mage.abilities.common.DealsDamageToACreatureAttachedTriggeredAbility; +import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.constants.Outcome; +import mage.target.TargetPermanent; +import mage.abilities.keyword.EnchantAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; + +/** + * + * @author jeffwadsworth + */ +public final class VenomousFangs extends CardImpl { + + public VenomousFangs(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); + + this.subtype.add(SubType.AURA); + + // Enchant creature + TargetPermanent auraTarget = new TargetCreaturePermanent(); + this.getSpellAbility().addTarget(auraTarget); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.BoostCreature)); + Ability ability = new EnchantAbility(auraTarget.getTargetName()); + this.addAbility(ability); + + // Whenever enchanted creature deals damage to a creature, destroy the other creature. + this.addAbility(new DealsDamageToACreatureAttachedTriggeredAbility(new DestroyTargetEffect(), false, "enchanted creature", false, true)); + + } + + public VenomousFangs(final VenomousFangs card) { + super(card); + } + + @Override + public VenomousFangs copy() { + return new VenomousFangs(this); + } +} diff --git a/Mage.Sets/src/mage/cards/v/ViashinoBey.java b/Mage.Sets/src/mage/cards/v/ViashinoBey.java index fe4c657c4f7..72fc8aff40c 100644 --- a/Mage.Sets/src/mage/cards/v/ViashinoBey.java +++ b/Mage.Sets/src/mage/cards/v/ViashinoBey.java @@ -1,93 +1,93 @@ -package mage.cards.v; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetOpponent; - -/** - * - * @author jeffwadsworth - */ -public final class ViashinoBey extends CardImpl { - - private static final String rule = "If {this} attacks, all creatures you control attack if able."; - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - - static { - filter.add(TargetController.YOU.getControllerPredicate()); - } - - public ViashinoBey(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); - - this.subtype.add(SubType.VIASHINO); - this.power = new MageInt(4); - this.toughness = new MageInt(3); - - // If Viashino Bey attacks, all creatures you control attack if able. - this.addAbility(new AttacksTriggeredAbility(new ViashinoBeyEffect(), false, rule)); - - } - - public ViashinoBey(final ViashinoBey card) { - super(card); - } - - @Override - public ViashinoBey copy() { - return new ViashinoBey(this); - } -} - -class ViashinoBeyEffect extends OneShotEffect { - - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); - - static { - filter.add(TargetController.YOU.getControllerPredicate()); - } - - public ViashinoBeyEffect() { - super(Outcome.Benefit); - } - - public ViashinoBeyEffect(final ViashinoBeyEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - TargetOpponent targetDefender = new TargetOpponent(); - if (controller != null) { - game.getBattlefield().getAllActivePermanents(CardType.CREATURE).stream().filter((permanent) -> (filter.match(permanent, source.getSourceId(), source.getControllerId(), game))).forEachOrdered((permanent) -> { - if (game.getOpponents(controller.getId()).size() > 1) { - controller.choose(outcome.Benefit, targetDefender, source.getSourceId(), game); - } else { - targetDefender.add(game.getOpponents(controller.getId()).iterator().next(), game); - } - if (permanent.canAttack(targetDefender.getFirstTarget(), game)) { - controller.declareAttacker(permanent.getId(), targetDefender.getFirstTarget(), game, false); - } - }); - } - return false; - } - - @Override - public ViashinoBeyEffect copy() { - return new ViashinoBeyEffect(this); - } -} +package mage.cards.v; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author jeffwadsworth + */ +public final class ViashinoBey extends CardImpl { + + private static final String rule = "If {this} attacks, all creatures you control attack if able."; + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(TargetController.YOU.getControllerPredicate()); + } + + public ViashinoBey(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{R}{R}"); + + this.subtype.add(SubType.VIASHINO); + this.power = new MageInt(4); + this.toughness = new MageInt(3); + + // If Viashino Bey attacks, all creatures you control attack if able. + this.addAbility(new AttacksTriggeredAbility(new ViashinoBeyEffect(), false, rule)); + + } + + public ViashinoBey(final ViashinoBey card) { + super(card); + } + + @Override + public ViashinoBey copy() { + return new ViashinoBey(this); + } +} + +class ViashinoBeyEffect extends OneShotEffect { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent(); + + static { + filter.add(TargetController.YOU.getControllerPredicate()); + } + + public ViashinoBeyEffect() { + super(Outcome.Benefit); + } + + public ViashinoBeyEffect(final ViashinoBeyEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + TargetOpponent targetDefender = new TargetOpponent(); + if (controller != null) { + game.getBattlefield().getAllActivePermanents(CardType.CREATURE).stream().filter((permanent) -> (filter.match(permanent, source.getSourceId(), source.getControllerId(), game))).forEachOrdered((permanent) -> { + if (game.getOpponents(controller.getId()).size() > 1) { + controller.choose(outcome.Benefit, targetDefender, source.getSourceId(), game); + } else { + targetDefender.add(game.getOpponents(controller.getId()).iterator().next(), game); + } + if (permanent.canAttack(targetDefender.getFirstTarget(), game)) { + controller.declareAttacker(permanent.getId(), targetDefender.getFirstTarget(), game, false); + } + }); + } + return false; + } + + @Override + public ViashinoBeyEffect copy() { + return new ViashinoBeyEffect(this); + } +} diff --git a/Mage.Sets/src/mage/cards/w/WalkingDream.java b/Mage.Sets/src/mage/cards/w/WalkingDream.java index 30cacb3dae8..cd74d6f396b 100644 --- a/Mage.Sets/src/mage/cards/w/WalkingDream.java +++ b/Mage.Sets/src/mage/cards/w/WalkingDream.java @@ -1,59 +1,59 @@ -package mage.cards.w; - -import java.util.UUID; -import mage.MageInt; -import mage.abilities.Ability; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.OpponentControlsPermanentCondition; -import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; -import mage.abilities.effects.ContinuousRuleModifyingEffect; -import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; -import mage.abilities.keyword.CantBeBlockedSourceAbility; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ComparisonType; -import mage.constants.Zone; -import mage.filter.common.FilterCreaturePermanent; - -/** - * - * @author jeffwadsworth - */ -public final class WalkingDream extends CardImpl { - - private static final String rule = "{this} doesn't untap during your untap step if an opponent controls two or more creatures."; - - public WalkingDream(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); - - this.subtype.add(SubType.ILLUSION); - this.power = new MageInt(3); - this.toughness = new MageInt(3); - - // Walking Dream is unblockable. - this.addAbility(new CantBeBlockedSourceAbility()); - - // Walking Dream doesn't untap during your untap step if an opponent controls two or more creatures. - ContinuousRuleModifyingEffect dontUntap = new DontUntapInControllersUntapStepSourceEffect(false, true); - dontUntap.setText(rule); - Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, - new ConditionalContinuousRuleModifyingEffect( - dontUntap, - new OpponentControlsPermanentCondition( - new FilterCreaturePermanent(), - ComparisonType.MORE_THAN, 1))); - this.addAbility(ability); - - } - - public WalkingDream(final WalkingDream card) { - super(card); - } - - @Override - public WalkingDream copy() { - return new WalkingDream(this); - } -} +package mage.cards.w; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.OpponentControlsPermanentCondition; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.ContinuousRuleModifyingEffect; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.keyword.CantBeBlockedSourceAbility; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; + +/** + * + * @author jeffwadsworth + */ +public final class WalkingDream extends CardImpl { + + private static final String rule = "{this} doesn't untap during your untap step if an opponent controls two or more creatures."; + + public WalkingDream(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{U}"); + + this.subtype.add(SubType.ILLUSION); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Walking Dream is unblockable. + this.addAbility(new CantBeBlockedSourceAbility()); + + // Walking Dream doesn't untap during your untap step if an opponent controls two or more creatures. + ContinuousRuleModifyingEffect dontUntap = new DontUntapInControllersUntapStepSourceEffect(false, true); + dontUntap.setText(rule); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, + new ConditionalContinuousRuleModifyingEffect( + dontUntap, + new OpponentControlsPermanentCondition( + new FilterCreaturePermanent(), + ComparisonType.MORE_THAN, 1))); + this.addAbility(ability); + + } + + public WalkingDream(final WalkingDream card) { + super(card); + } + + @Override + public WalkingDream copy() { + return new WalkingDream(this); + } +} diff --git a/Mage.Sets/src/mage/cards/w/Wiitigo.java b/Mage.Sets/src/mage/cards/w/Wiitigo.java index 74ba69202aa..ce0ba21ec08 100644 --- a/Mage.Sets/src/mage/cards/w/Wiitigo.java +++ b/Mage.Sets/src/mage/cards/w/Wiitigo.java @@ -1,123 +1,123 @@ -package mage.cards.w; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; -import java.util.UUID; -import mage.MageInt; -import mage.MageObjectReference; -import mage.abilities.Ability; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.EntersBattlefieldAbility; -import mage.abilities.condition.Condition; -import mage.abilities.decorator.ConditionalOneShotEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; -import mage.constants.SubType; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.TargetController; -import mage.constants.WatcherScope; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.watchers.Watcher; - -/** - * - * @author jeffwadsworth - */ -public final class Wiitigo extends CardImpl { - - public Wiitigo(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}{G}"); - - this.subtype.add(SubType.YETI); - this.power = new MageInt(0); - this.toughness = new MageInt(0); - - // Wiitigo enters the battlefield with six +1/+1 counters on it. - this.addAbility(new EntersBattlefieldAbility( - new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)))); - - // At the beginning of your upkeep, put a +1/+1 counter on Wiitigo if it has blocked or been blocked since your last upkeep. Otherwise, remove a +1/+1 counter from it. - Ability triggeredAbility = new BeginningOfUpkeepTriggeredAbility( - new ConditionalOneShotEffect( - new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), - new RemoveCounterSourceEffect(CounterType.P1P1.createInstance(1)), - new BlockedOrBeenBlockedSinceYourLastUpkeepCondition(), - "put a +1/+1 counter on enchanted creature if it blocked or been blocked since your last " - + "upkeep. Otherwise, remove a +1/+1 counter from it"), - TargetController.YOU, - false); - triggeredAbility.addWatcher(new BlockedOrBeenBlockedSinceYourLastUpkeepWatcher()); - this.addAbility(triggeredAbility); - } - - private Wiitigo(final Wiitigo card) { - super(card); - } - - @Override - public Wiitigo copy() { - return new Wiitigo(this); - } -} - -class BlockedOrBeenBlockedSinceYourLastUpkeepCondition implements Condition { - - @Override - public boolean apply(Game game, Ability source) { - Permanent wiitigo = game.getBattlefield().getPermanent(source.getSourceId()); - BlockedOrBeenBlockedSinceYourLastUpkeepWatcher watcher = game.getState().getWatcher( - BlockedOrBeenBlockedSinceYourLastUpkeepWatcher.class); - if (wiitigo != null - && watcher != null) { - return watcher.blockedOrBeenBlockedSinceLastUpkeep( - new MageObjectReference(wiitigo.getId(), - wiitigo.getZoneChangeCounter(game), - game), - wiitigo.getControllerId()); - } - return false; - } - - @Override - public String toString() { - return "it blocked or was blocked since your last upkeep"; - } -} - -class BlockedOrBeenBlockedSinceYourLastUpkeepWatcher extends Watcher { - - private final Map> blockedOrBeenBlockedCreatures = new HashMap<>(); - - public BlockedOrBeenBlockedSinceYourLastUpkeepWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.UPKEEP_STEP_POST) { - blockedOrBeenBlockedCreatures.put(event.getPlayerId(), new HashSet<>()); // clear the watcher after upkeep - } else if (event.getType() == GameEvent.EventType.BLOCKER_DECLARED) { - MageObjectReference morBlocker = new MageObjectReference(event.getSourceId(), game); // store blocker - MageObjectReference morAttackerBlocked = new MageObjectReference(event.getTargetId(), game); // store attacker blocked - for (UUID player : game.getPlayerList()) { - if (!blockedOrBeenBlockedCreatures.containsKey(player)) { - blockedOrBeenBlockedCreatures.put(player, new HashSet<>()); - } - blockedOrBeenBlockedCreatures.get(player).add(morBlocker); - blockedOrBeenBlockedCreatures.get(player).add(morAttackerBlocked); - } - } - } - - public boolean blockedOrBeenBlockedSinceLastUpkeep(MageObjectReference mor, UUID player) { - return (blockedOrBeenBlockedCreatures.get(player) != null) - && blockedOrBeenBlockedCreatures.get(player).contains(mor); - } -} +package mage.cards.w; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import mage.MageInt; +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldAbility; +import mage.abilities.condition.Condition; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.constants.SubType; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.TargetController; +import mage.constants.WatcherScope; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.watchers.Watcher; + +/** + * + * @author jeffwadsworth + */ +public final class Wiitigo extends CardImpl { + + public Wiitigo(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{G}{G}{G}"); + + this.subtype.add(SubType.YETI); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Wiitigo enters the battlefield with six +1/+1 counters on it. + this.addAbility(new EntersBattlefieldAbility( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(6)))); + + // At the beginning of your upkeep, put a +1/+1 counter on Wiitigo if it has blocked or been blocked since your last upkeep. Otherwise, remove a +1/+1 counter from it. + Ability triggeredAbility = new BeginningOfUpkeepTriggeredAbility( + new ConditionalOneShotEffect( + new AddCountersSourceEffect(CounterType.P1P1.createInstance(1)), + new RemoveCounterSourceEffect(CounterType.P1P1.createInstance(1)), + new BlockedOrBeenBlockedSinceYourLastUpkeepCondition(), + "put a +1/+1 counter on enchanted creature if it blocked or been blocked since your last " + + "upkeep. Otherwise, remove a +1/+1 counter from it"), + TargetController.YOU, + false); + triggeredAbility.addWatcher(new BlockedOrBeenBlockedSinceYourLastUpkeepWatcher()); + this.addAbility(triggeredAbility); + } + + private Wiitigo(final Wiitigo card) { + super(card); + } + + @Override + public Wiitigo copy() { + return new Wiitigo(this); + } +} + +class BlockedOrBeenBlockedSinceYourLastUpkeepCondition implements Condition { + + @Override + public boolean apply(Game game, Ability source) { + Permanent wiitigo = game.getBattlefield().getPermanent(source.getSourceId()); + BlockedOrBeenBlockedSinceYourLastUpkeepWatcher watcher = game.getState().getWatcher( + BlockedOrBeenBlockedSinceYourLastUpkeepWatcher.class); + if (wiitigo != null + && watcher != null) { + return watcher.blockedOrBeenBlockedSinceLastUpkeep( + new MageObjectReference(wiitigo.getId(), + wiitigo.getZoneChangeCounter(game), + game), + wiitigo.getControllerId()); + } + return false; + } + + @Override + public String toString() { + return "it blocked or was blocked since your last upkeep"; + } +} + +class BlockedOrBeenBlockedSinceYourLastUpkeepWatcher extends Watcher { + + private final Map> blockedOrBeenBlockedCreatures = new HashMap<>(); + + public BlockedOrBeenBlockedSinceYourLastUpkeepWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.UPKEEP_STEP_POST) { + blockedOrBeenBlockedCreatures.put(event.getPlayerId(), new HashSet<>()); // clear the watcher after upkeep + } else if (event.getType() == GameEvent.EventType.BLOCKER_DECLARED) { + MageObjectReference morBlocker = new MageObjectReference(event.getSourceId(), game); // store blocker + MageObjectReference morAttackerBlocked = new MageObjectReference(event.getTargetId(), game); // store attacker blocked + for (UUID player : game.getPlayerList()) { + if (!blockedOrBeenBlockedCreatures.containsKey(player)) { + blockedOrBeenBlockedCreatures.put(player, new HashSet<>()); + } + blockedOrBeenBlockedCreatures.get(player).add(morBlocker); + blockedOrBeenBlockedCreatures.get(player).add(morAttackerBlocked); + } + } + } + + public boolean blockedOrBeenBlockedSinceLastUpkeep(MageObjectReference mor, UUID player) { + return (blockedOrBeenBlockedCreatures.get(player) != null) + && blockedOrBeenBlockedCreatures.get(player).contains(mor); + } +} diff --git a/Mage.Sets/src/mage/sets/Alliances.java b/Mage.Sets/src/mage/sets/Alliances.java index a93161e7257..b96c3e42f89 100644 --- a/Mage.Sets/src/mage/sets/Alliances.java +++ b/Mage.Sets/src/mage/sets/Alliances.java @@ -1,220 +1,220 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -public final class Alliances extends ExpansionSet { - - private static final Alliances instance = new Alliances(); - - public static Alliances getInstance() { - return instance; - } - - private Alliances() { - super("Alliances", "ALL", ExpansionSet.buildDate(1996, 6, 10), SetType.EXPANSION); - this.blockName = "Ice Age"; - this.parentSet = IceAge.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 8; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Aesthir Glider", "116a", Rarity.COMMON, mage.cards.a.AesthirGlider.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Aesthir Glider", "116b", Rarity.COMMON, mage.cards.a.AesthirGlider.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Agent of Stromgald", "64a", Rarity.COMMON, mage.cards.a.AgentOfStromgald.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Agent of Stromgald", "64b", Rarity.COMMON, mage.cards.a.AgentOfStromgald.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Arcane Denial", "22a", Rarity.COMMON, mage.cards.a.ArcaneDenial.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Arcane Denial", "22b", Rarity.COMMON, mage.cards.a.ArcaneDenial.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ashnod's Cylix", 117, Rarity.RARE, mage.cards.a.AshnodsCylix.class)); - cards.add(new SetCardInfo("Astrolabe", "118a", Rarity.COMMON, mage.cards.a.Astrolabe.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Astrolabe", "118b", Rarity.COMMON, mage.cards.a.Astrolabe.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Awesome Presence", "23a", Rarity.COMMON, mage.cards.a.AwesomePresence.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Awesome Presence", "23b", Rarity.COMMON, mage.cards.a.AwesomePresence.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Balduvian Dead", 43, Rarity.UNCOMMON, mage.cards.b.BalduvianDead.class)); - cards.add(new SetCardInfo("Balduvian Horde", 65, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); - cards.add(new SetCardInfo("Balduvian Trading Post", 137, Rarity.RARE, mage.cards.b.BalduvianTradingPost.class)); - cards.add(new SetCardInfo("Balduvian War-Makers", "66a", Rarity.COMMON, mage.cards.b.BalduvianWarMakers.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Balduvian War-Makers", "66b", Rarity.COMMON, mage.cards.b.BalduvianWarMakers.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Benthic Explorers", "24a", Rarity.COMMON, mage.cards.b.BenthicExplorers.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Benthic Explorers", "24b", Rarity.COMMON, mage.cards.b.BenthicExplorers.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bestial Fury", "67a", Rarity.COMMON, mage.cards.b.BestialFury.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bestial Fury", "67b", Rarity.COMMON, mage.cards.b.BestialFury.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Bounty of the Hunt", 85, Rarity.UNCOMMON, mage.cards.b.BountyOfTheHunt.class)); - cards.add(new SetCardInfo("Browse", 25, Rarity.UNCOMMON, mage.cards.b.Browse.class)); - cards.add(new SetCardInfo("Burnout", 68, Rarity.UNCOMMON, mage.cards.b.Burnout.class)); - cards.add(new SetCardInfo("Carrier Pigeons", "1a", Rarity.COMMON, mage.cards.c.CarrierPigeons.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Carrier Pigeons", "1b", Rarity.COMMON, mage.cards.c.CarrierPigeons.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Casting of Bones", "44a", Rarity.COMMON, mage.cards.c.CastingOfBones.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Casting of Bones", "44b", Rarity.COMMON, mage.cards.c.CastingOfBones.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Chaos Harlequin", 69, Rarity.RARE, mage.cards.c.ChaosHarlequin.class)); - cards.add(new SetCardInfo("Contagion", 45, Rarity.UNCOMMON, mage.cards.c.Contagion.class)); - cards.add(new SetCardInfo("Deadly Insect", "86a", Rarity.COMMON, mage.cards.d.DeadlyInsect.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Deadly Insect", "86b", Rarity.COMMON, mage.cards.d.DeadlyInsect.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Death Spark", 70, Rarity.UNCOMMON, mage.cards.d.DeathSpark.class)); - cards.add(new SetCardInfo("Diminishing Returns", 26, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); - cards.add(new SetCardInfo("Diseased Vermin", 46, Rarity.UNCOMMON, mage.cards.d.DiseasedVermin.class)); - cards.add(new SetCardInfo("Dystopia", 47, Rarity.RARE, mage.cards.d.Dystopia.class)); - cards.add(new SetCardInfo("Elvish Bard", 87, Rarity.UNCOMMON, mage.cards.e.ElvishBard.class)); - cards.add(new SetCardInfo("Elvish Ranger", "88a", Rarity.COMMON, mage.cards.e.ElvishRanger.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Elvish Ranger", "88b", Rarity.COMMON, mage.cards.e.ElvishRanger.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Elvish Spirit Guide", 89, Rarity.UNCOMMON, mage.cards.e.ElvishSpiritGuide.class)); - cards.add(new SetCardInfo("Energy Arc", 106, Rarity.UNCOMMON, mage.cards.e.EnergyArc.class)); - cards.add(new SetCardInfo("Enslaved Scout", "71a", Rarity.COMMON, mage.cards.e.EnslavedScout.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Enslaved Scout", "71b", Rarity.COMMON, mage.cards.e.EnslavedScout.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Errand of Duty", "2a", Rarity.COMMON, mage.cards.e.ErrandOfDuty.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Errand of Duty", "2b", Rarity.COMMON, mage.cards.e.ErrandOfDuty.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Exile", 3, Rarity.RARE, mage.cards.e.Exile.class)); - cards.add(new SetCardInfo("False Demise", "27a", Rarity.COMMON, mage.cards.f.FalseDemise.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("False Demise", "27b", Rarity.COMMON, mage.cards.f.FalseDemise.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fatal Lore", 48, Rarity.RARE, mage.cards.f.FatalLore.class)); - cards.add(new SetCardInfo("Feast or Famine", "49a", Rarity.COMMON, mage.cards.f.FeastOrFamine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Feast or Famine", "49b", Rarity.COMMON, mage.cards.f.FeastOrFamine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fevered Strength", "50a", Rarity.COMMON, mage.cards.f.FeveredStrength.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fevered Strength", "50b", Rarity.COMMON, mage.cards.f.FeveredStrength.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Floodwater Dam", 119, Rarity.RARE, mage.cards.f.FloodwaterDam.class)); - cards.add(new SetCardInfo("Force of Will", 28, Rarity.UNCOMMON, mage.cards.f.ForceOfWill.class)); - cards.add(new SetCardInfo("Foresight", "29a", Rarity.COMMON, mage.cards.f.Foresight.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Foresight", "29b", Rarity.COMMON, mage.cards.f.Foresight.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fyndhorn Druid", "90a", Rarity.COMMON, mage.cards.f.FyndhornDruid.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fyndhorn Druid", "90b", Rarity.COMMON, mage.cards.f.FyndhornDruid.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gargantuan Gorilla", 91, Rarity.RARE, mage.cards.g.GargantuanGorilla.class)); - cards.add(new SetCardInfo("Gift of the Woods", "92a", Rarity.COMMON, mage.cards.g.GiftOfTheWoods.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gift of the Woods", "92b", Rarity.COMMON, mage.cards.g.GiftOfTheWoods.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gorilla Berserkers", "93a", Rarity.COMMON, mage.cards.g.GorillaBerserkers.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gorilla Berserkers", "93b", Rarity.COMMON, mage.cards.g.GorillaBerserkers.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gorilla Chieftain", "94a", Rarity.COMMON, mage.cards.g.GorillaChieftain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gorilla Chieftain", "94b", Rarity.COMMON, mage.cards.g.GorillaChieftain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gorilla Shaman", "72a", Rarity.COMMON, mage.cards.g.GorillaShaman.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gorilla Shaman", "72b", Rarity.COMMON, mage.cards.g.GorillaShaman.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gorilla War Cry", "73a", Rarity.COMMON, mage.cards.g.GorillaWarCry.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gorilla War Cry", "73b", Rarity.COMMON, mage.cards.g.GorillaWarCry.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Guerrilla Tactics", "74a", Rarity.COMMON, mage.cards.g.GuerrillaTactics.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Guerrilla Tactics", "74b", Rarity.COMMON, mage.cards.g.GuerrillaTactics.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gustha's Scepter", 120, Rarity.RARE, mage.cards.g.GusthasScepter.class)); - cards.add(new SetCardInfo("Hail Storm", 95, Rarity.UNCOMMON, mage.cards.h.HailStorm.class)); - cards.add(new SetCardInfo("Heart of Yavimaya", 138, Rarity.RARE, mage.cards.h.HeartOfYavimaya.class)); - cards.add(new SetCardInfo("Helm of Obedience", 121, Rarity.RARE, mage.cards.h.HelmOfObedience.class)); - cards.add(new SetCardInfo("Inheritance", 4, Rarity.UNCOMMON, mage.cards.i.Inheritance.class)); - cards.add(new SetCardInfo("Insidious Bookworms", "51a", Rarity.COMMON, mage.cards.i.InsidiousBookworms.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Insidious Bookworms", "51b", Rarity.COMMON, mage.cards.i.InsidiousBookworms.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ivory Gargoyle", 5, Rarity.RARE, mage.cards.i.IvoryGargoyle.class)); - cards.add(new SetCardInfo("Juniper Order Advocate", 6, Rarity.UNCOMMON, mage.cards.j.JuniperOrderAdvocate.class)); - cards.add(new SetCardInfo("Kaysa", 96, Rarity.RARE, mage.cards.k.Kaysa.class)); - cards.add(new SetCardInfo("Keeper of Tresserhorn", 52, Rarity.RARE, mage.cards.k.KeeperOfTresserhorn.class)); - cards.add(new SetCardInfo("Kjeldoran Escort", "7a", Rarity.COMMON, mage.cards.k.KjeldoranEscort.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Kjeldoran Escort", "7b", Rarity.COMMON, mage.cards.k.KjeldoranEscort.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Kjeldoran Pride", "9a", Rarity.COMMON, mage.cards.k.KjeldoranPride.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Kjeldoran Pride", "9b", Rarity.COMMON, mage.cards.k.KjeldoranPride.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Kjeldoran Home Guard", 8, Rarity.UNCOMMON, mage.cards.k.KjeldoranHomeGuard.class)); - cards.add(new SetCardInfo("Kjeldoran Outpost", 139, Rarity.RARE, mage.cards.k.KjeldoranOutpost.class)); - cards.add(new SetCardInfo("Krovikan Horror", 53, Rarity.RARE, mage.cards.k.KrovikanHorror.class)); - cards.add(new SetCardInfo("Krovikan Plague", 54, Rarity.UNCOMMON, mage.cards.k.KrovikanPlague.class)); - cards.add(new SetCardInfo("Lake of the Dead", 140, Rarity.RARE, mage.cards.l.LakeOfTheDead.class)); - cards.add(new SetCardInfo("Lat-Nam's Legacy", "30a", Rarity.COMMON, mage.cards.l.LatNamsLegacy.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lat-Nam's Legacy", "30b", Rarity.COMMON, mage.cards.l.LatNamsLegacy.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Library of Lat-Nam", 31, Rarity.RARE, mage.cards.l.LibraryOfLatNam.class)); - cards.add(new SetCardInfo("Lim-Dul's High Guard", "55a", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lim-Dul's High Guard", "55b", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Lim-Dul's Paladin", 108, Rarity.UNCOMMON, mage.cards.l.LimDulsPaladin.class)); - cards.add(new SetCardInfo("Lim-Dul's Vault", 107, Rarity.UNCOMMON, mage.cards.l.LimDulsVault.class)); - cards.add(new SetCardInfo("Lodestone Bauble", 122, Rarity.RARE, mage.cards.l.LodestoneBauble.class)); - cards.add(new SetCardInfo("Lord of Tresserhorn", 112, Rarity.RARE, mage.cards.l.LordOfTresserhorn.class)); - cards.add(new SetCardInfo("Martyrdom", "10a", Rarity.COMMON, mage.cards.m.Martyrdom.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Martyrdom", "10b", Rarity.COMMON, mage.cards.m.Martyrdom.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Misfortune", 113, Rarity.RARE, mage.cards.m.Misfortune.class)); - cards.add(new SetCardInfo("Mishra's Groundbreaker", 123, Rarity.UNCOMMON, mage.cards.m.MishrasGroundbreaker.class)); - cards.add(new SetCardInfo("Misinformation", 56, Rarity.UNCOMMON, mage.cards.m.Misinformation.class)); - cards.add(new SetCardInfo("Mystic Compass", 124, Rarity.UNCOMMON, mage.cards.m.MysticCompass.class)); - cards.add(new SetCardInfo("Nature's Blessing", 110, Rarity.UNCOMMON, mage.cards.n.NaturesBlessing.class)); - cards.add(new SetCardInfo("Nature's Chosen", 97, Rarity.UNCOMMON, mage.cards.n.NaturesChosen.class)); - cards.add(new SetCardInfo("Nature's Wrath", 98, Rarity.RARE, mage.cards.n.NaturesWrath.class)); - cards.add(new SetCardInfo("Noble Steeds", "11a", Rarity.COMMON, mage.cards.n.NobleSteeds.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Noble Steeds", "11b", Rarity.COMMON, mage.cards.n.NobleSteeds.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Omen of Fire", 75, Rarity.RARE, mage.cards.o.OmenOfFire.class)); - cards.add(new SetCardInfo("Phantasmal Fiend", "57a", Rarity.COMMON, mage.cards.p.PhantasmalFiend.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Phantasmal Fiend", "57b", Rarity.COMMON, mage.cards.p.PhantasmalFiend.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Phantasmal Sphere", 32, Rarity.RARE, mage.cards.p.PhantasmalSphere.class)); - cards.add(new SetCardInfo("Phelddagrif", 115, Rarity.RARE, mage.cards.p.Phelddagrif.class)); - cards.add(new SetCardInfo("Phyrexian Boon", "58a", Rarity.COMMON, mage.cards.p.PhyrexianBoon.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Phyrexian Boon", "58b", Rarity.COMMON, mage.cards.p.PhyrexianBoon.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Phyrexian Devourer", 125, Rarity.RARE, mage.cards.p.PhyrexianDevourer.class)); - cards.add(new SetCardInfo("Phyrexian Portal", 126, Rarity.RARE, mage.cards.p.PhyrexianPortal.class)); - cards.add(new SetCardInfo("Phyrexian War Beast", "127a", Rarity.COMMON, mage.cards.p.PhyrexianWarBeast.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Phyrexian War Beast", "127b", Rarity.COMMON, mage.cards.p.PhyrexianWarBeast.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Pillage", 76, Rarity.UNCOMMON, mage.cards.p.Pillage.class)); - cards.add(new SetCardInfo("Pyrokinesis", 78, Rarity.UNCOMMON, mage.cards.p.Pyrokinesis.class)); - cards.add(new SetCardInfo("Reinforcements", "12a", Rarity.COMMON, mage.cards.r.Reinforcements.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Reinforcements", "12b", Rarity.COMMON, mage.cards.r.Reinforcements.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Reprisal", "13a", Rarity.COMMON, mage.cards.r.Reprisal.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Reprisal", "13b", Rarity.COMMON, mage.cards.r.Reprisal.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ritual of the Machine", 59, Rarity.RARE, mage.cards.r.RitualOfTheMachine.class)); - cards.add(new SetCardInfo("Rogue Skycaptain", 79, Rarity.RARE, mage.cards.r.RogueSkycaptain.class)); - cards.add(new SetCardInfo("Royal Decree", 14, Rarity.RARE, mage.cards.r.RoyalDecree.class)); - cards.add(new SetCardInfo("Royal Herbalist", "15a", Rarity.COMMON, mage.cards.r.RoyalHerbalist.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Royal Herbalist", "15b", Rarity.COMMON, mage.cards.r.RoyalHerbalist.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Scarab of the Unseen", 128, Rarity.UNCOMMON, mage.cards.s.ScarabOfTheUnseen.class)); - cards.add(new SetCardInfo("School of the Unseen", 141, Rarity.UNCOMMON, mage.cards.s.SchoolOfTheUnseen.class)); - cards.add(new SetCardInfo("Seasoned Tactician", 17, Rarity.UNCOMMON, mage.cards.s.SeasonedTactician.class)); - cards.add(new SetCardInfo("Sheltered Valley", 142, Rarity.RARE, mage.cards.s.ShelteredValley.class)); - cards.add(new SetCardInfo("Shield Sphere", 129, Rarity.UNCOMMON, mage.cards.s.ShieldSphere.class)); - cards.add(new SetCardInfo("Sol Grail", 130, Rarity.UNCOMMON, mage.cards.s.SolGrail.class)); - cards.add(new SetCardInfo("Soldevi Adnate", "60a", Rarity.COMMON, mage.cards.s.SoldeviAdnate.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Adnate", "60b", Rarity.COMMON, mage.cards.s.SoldeviAdnate.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Digger", 131, Rarity.RARE, mage.cards.s.SoldeviDigger.class)); - cards.add(new SetCardInfo("Soldevi Excavations", 143, Rarity.RARE, mage.cards.s.SoldeviExcavations.class)); - cards.add(new SetCardInfo("Soldevi Heretic", "33a", Rarity.COMMON, mage.cards.s.SoldeviHeretic.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Heretic", "33b", Rarity.COMMON, mage.cards.s.SoldeviHeretic.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Sage", "34a", Rarity.COMMON, mage.cards.s.SoldeviSage.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Sage", "34b", Rarity.COMMON, mage.cards.s.SoldeviSage.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Sentry", "132a", Rarity.COMMON, mage.cards.s.SoldeviSentry.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Sentry", "132b", Rarity.COMMON, mage.cards.s.SoldeviSentry.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Steam Beast", "133a", Rarity.COMMON, mage.cards.s.SoldeviSteamBeast.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldevi Steam Beast", "133b", Rarity.COMMON, mage.cards.s.SoldeviSteamBeast.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Soldier of Fortune", 80, Rarity.UNCOMMON, mage.cards.s.SoldierOfFortune.class)); - cards.add(new SetCardInfo("Spiny Starfish", 35, Rarity.UNCOMMON, mage.cards.s.SpinyStarfish.class)); - cards.add(new SetCardInfo("Splintering Wind", 99, Rarity.RARE, mage.cards.s.SplinteringWind.class)); - cards.add(new SetCardInfo("Stench of Decay", "61a", Rarity.COMMON, mage.cards.s.StenchOfDecay.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Stench of Decay", "61b", Rarity.COMMON, mage.cards.s.StenchOfDecay.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Storm Cauldron", 134, Rarity.RARE, mage.cards.s.StormCauldron.class)); - cards.add(new SetCardInfo("Storm Crow", "36a", Rarity.COMMON, mage.cards.s.StormCrow.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Storm Crow", "36b", Rarity.COMMON, mage.cards.s.StormCrow.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Storm Elemental", 37, Rarity.UNCOMMON, mage.cards.s.StormElemental.class)); - cards.add(new SetCardInfo("Storm Shaman", "81a", Rarity.COMMON, mage.cards.s.StormShaman.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Storm Shaman", "81b", Rarity.COMMON, mage.cards.s.StormShaman.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Stromgald Spy", 62, Rarity.UNCOMMON, mage.cards.s.StromgaldSpy.class)); - cards.add(new SetCardInfo("Surge of Strength", 109, Rarity.UNCOMMON, mage.cards.s.SurgeOfStrength.class)); - cards.add(new SetCardInfo("Sustaining Spirit", 18, Rarity.RARE, mage.cards.s.SustainingSpirit.class)); - cards.add(new SetCardInfo("Swamp Mosquito", "63a", Rarity.COMMON, mage.cards.s.SwampMosquito.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp Mosquito", "63b", Rarity.COMMON, mage.cards.s.SwampMosquito.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sworn Defender", 19, Rarity.RARE, mage.cards.s.SwornDefender.class)); - cards.add(new SetCardInfo("Thawing Glaciers", 144, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); - cards.add(new SetCardInfo("Thought Lash", 39, Rarity.RARE, mage.cards.t.ThoughtLash.class)); - cards.add(new SetCardInfo("Tidal Control", 40, Rarity.RARE, mage.cards.t.TidalControl.class)); - cards.add(new SetCardInfo("Tornado", 101, Rarity.RARE, mage.cards.t.Tornado.class)); - cards.add(new SetCardInfo("Unlikely Alliance", 20, Rarity.UNCOMMON, mage.cards.u.UnlikelyAlliance.class)); - cards.add(new SetCardInfo("Urza's Engine", 135, Rarity.UNCOMMON, mage.cards.u.UrzasEngine.class)); - cards.add(new SetCardInfo("Varchild's Crusader", "82a", Rarity.COMMON, mage.cards.v.VarchildsCrusader.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Varchild's Crusader", "82b", Rarity.COMMON, mage.cards.v.VarchildsCrusader.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Varchild's War-Riders", 83, Rarity.RARE, mage.cards.v.VarchildsWarRiders.class)); - cards.add(new SetCardInfo("Veteran's Voice", "84a", Rarity.COMMON, mage.cards.v.VeteransVoice.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Veteran's Voice", "84b", Rarity.COMMON, mage.cards.v.VeteransVoice.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Viscerid Armor", "41a", Rarity.COMMON, mage.cards.v.VisceridArmor.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Viscerid Armor", "41b", Rarity.COMMON, mage.cards.v.VisceridArmor.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Viscerid Drone", 42, Rarity.UNCOMMON, mage.cards.v.VisceridDrone.class)); - cards.add(new SetCardInfo("Wandering Mage", 111, Rarity.RARE, mage.cards.w.WanderingMage.class)); - cards.add(new SetCardInfo("Whip Vine", "103a", Rarity.COMMON, mage.cards.w.WhipVine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Whip Vine", "103b", Rarity.COMMON, mage.cards.w.WhipVine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Whirling Catapult", 136, Rarity.UNCOMMON, mage.cards.w.WhirlingCatapult.class)); - cards.add(new SetCardInfo("Wild Aesthir", "21a", Rarity.COMMON, mage.cards.w.WildAesthir.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Wild Aesthir", "21b", Rarity.COMMON, mage.cards.w.WildAesthir.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Winter's Night", 114, Rarity.RARE, mage.cards.w.WintersNight.class)); - cards.add(new SetCardInfo("Yavimaya Ancients", "104a", Rarity.COMMON, mage.cards.y.YavimayaAncients.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Yavimaya Ancients", "104b", Rarity.COMMON, mage.cards.y.YavimayaAncients.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Yavimaya Ants", 105, Rarity.UNCOMMON, mage.cards.y.YavimayaAnts.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +public final class Alliances extends ExpansionSet { + + private static final Alliances instance = new Alliances(); + + public static Alliances getInstance() { + return instance; + } + + private Alliances() { + super("Alliances", "ALL", ExpansionSet.buildDate(1996, 6, 10), SetType.EXPANSION); + this.blockName = "Ice Age"; + this.parentSet = IceAge.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 8; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Aesthir Glider", "116a", Rarity.COMMON, mage.cards.a.AesthirGlider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Aesthir Glider", "116b", Rarity.COMMON, mage.cards.a.AesthirGlider.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Agent of Stromgald", "64a", Rarity.COMMON, mage.cards.a.AgentOfStromgald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Agent of Stromgald", "64b", Rarity.COMMON, mage.cards.a.AgentOfStromgald.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arcane Denial", "22a", Rarity.COMMON, mage.cards.a.ArcaneDenial.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Arcane Denial", "22b", Rarity.COMMON, mage.cards.a.ArcaneDenial.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ashnod's Cylix", 117, Rarity.RARE, mage.cards.a.AshnodsCylix.class)); + cards.add(new SetCardInfo("Astrolabe", "118a", Rarity.COMMON, mage.cards.a.Astrolabe.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Astrolabe", "118b", Rarity.COMMON, mage.cards.a.Astrolabe.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Awesome Presence", "23a", Rarity.COMMON, mage.cards.a.AwesomePresence.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Awesome Presence", "23b", Rarity.COMMON, mage.cards.a.AwesomePresence.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balduvian Dead", 43, Rarity.UNCOMMON, mage.cards.b.BalduvianDead.class)); + cards.add(new SetCardInfo("Balduvian Horde", 65, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); + cards.add(new SetCardInfo("Balduvian Trading Post", 137, Rarity.RARE, mage.cards.b.BalduvianTradingPost.class)); + cards.add(new SetCardInfo("Balduvian War-Makers", "66a", Rarity.COMMON, mage.cards.b.BalduvianWarMakers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Balduvian War-Makers", "66b", Rarity.COMMON, mage.cards.b.BalduvianWarMakers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Benthic Explorers", "24a", Rarity.COMMON, mage.cards.b.BenthicExplorers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Benthic Explorers", "24b", Rarity.COMMON, mage.cards.b.BenthicExplorers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bestial Fury", "67a", Rarity.COMMON, mage.cards.b.BestialFury.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bestial Fury", "67b", Rarity.COMMON, mage.cards.b.BestialFury.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Bounty of the Hunt", 85, Rarity.UNCOMMON, mage.cards.b.BountyOfTheHunt.class)); + cards.add(new SetCardInfo("Browse", 25, Rarity.UNCOMMON, mage.cards.b.Browse.class)); + cards.add(new SetCardInfo("Burnout", 68, Rarity.UNCOMMON, mage.cards.b.Burnout.class)); + cards.add(new SetCardInfo("Carrier Pigeons", "1a", Rarity.COMMON, mage.cards.c.CarrierPigeons.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Carrier Pigeons", "1b", Rarity.COMMON, mage.cards.c.CarrierPigeons.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Casting of Bones", "44a", Rarity.COMMON, mage.cards.c.CastingOfBones.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Casting of Bones", "44b", Rarity.COMMON, mage.cards.c.CastingOfBones.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Chaos Harlequin", 69, Rarity.RARE, mage.cards.c.ChaosHarlequin.class)); + cards.add(new SetCardInfo("Contagion", 45, Rarity.UNCOMMON, mage.cards.c.Contagion.class)); + cards.add(new SetCardInfo("Deadly Insect", "86a", Rarity.COMMON, mage.cards.d.DeadlyInsect.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Deadly Insect", "86b", Rarity.COMMON, mage.cards.d.DeadlyInsect.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Death Spark", 70, Rarity.UNCOMMON, mage.cards.d.DeathSpark.class)); + cards.add(new SetCardInfo("Diminishing Returns", 26, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); + cards.add(new SetCardInfo("Diseased Vermin", 46, Rarity.UNCOMMON, mage.cards.d.DiseasedVermin.class)); + cards.add(new SetCardInfo("Dystopia", 47, Rarity.RARE, mage.cards.d.Dystopia.class)); + cards.add(new SetCardInfo("Elvish Bard", 87, Rarity.UNCOMMON, mage.cards.e.ElvishBard.class)); + cards.add(new SetCardInfo("Elvish Ranger", "88a", Rarity.COMMON, mage.cards.e.ElvishRanger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elvish Ranger", "88b", Rarity.COMMON, mage.cards.e.ElvishRanger.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Elvish Spirit Guide", 89, Rarity.UNCOMMON, mage.cards.e.ElvishSpiritGuide.class)); + cards.add(new SetCardInfo("Energy Arc", 106, Rarity.UNCOMMON, mage.cards.e.EnergyArc.class)); + cards.add(new SetCardInfo("Enslaved Scout", "71a", Rarity.COMMON, mage.cards.e.EnslavedScout.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Enslaved Scout", "71b", Rarity.COMMON, mage.cards.e.EnslavedScout.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Errand of Duty", "2a", Rarity.COMMON, mage.cards.e.ErrandOfDuty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Errand of Duty", "2b", Rarity.COMMON, mage.cards.e.ErrandOfDuty.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Exile", 3, Rarity.RARE, mage.cards.e.Exile.class)); + cards.add(new SetCardInfo("False Demise", "27a", Rarity.COMMON, mage.cards.f.FalseDemise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("False Demise", "27b", Rarity.COMMON, mage.cards.f.FalseDemise.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fatal Lore", 48, Rarity.RARE, mage.cards.f.FatalLore.class)); + cards.add(new SetCardInfo("Feast or Famine", "49a", Rarity.COMMON, mage.cards.f.FeastOrFamine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Feast or Famine", "49b", Rarity.COMMON, mage.cards.f.FeastOrFamine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fevered Strength", "50a", Rarity.COMMON, mage.cards.f.FeveredStrength.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fevered Strength", "50b", Rarity.COMMON, mage.cards.f.FeveredStrength.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Floodwater Dam", 119, Rarity.RARE, mage.cards.f.FloodwaterDam.class)); + cards.add(new SetCardInfo("Force of Will", 28, Rarity.UNCOMMON, mage.cards.f.ForceOfWill.class)); + cards.add(new SetCardInfo("Foresight", "29a", Rarity.COMMON, mage.cards.f.Foresight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Foresight", "29b", Rarity.COMMON, mage.cards.f.Foresight.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fyndhorn Druid", "90a", Rarity.COMMON, mage.cards.f.FyndhornDruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fyndhorn Druid", "90b", Rarity.COMMON, mage.cards.f.FyndhornDruid.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gargantuan Gorilla", 91, Rarity.RARE, mage.cards.g.GargantuanGorilla.class)); + cards.add(new SetCardInfo("Gift of the Woods", "92a", Rarity.COMMON, mage.cards.g.GiftOfTheWoods.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gift of the Woods", "92b", Rarity.COMMON, mage.cards.g.GiftOfTheWoods.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorilla Berserkers", "93a", Rarity.COMMON, mage.cards.g.GorillaBerserkers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorilla Berserkers", "93b", Rarity.COMMON, mage.cards.g.GorillaBerserkers.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorilla Chieftain", "94a", Rarity.COMMON, mage.cards.g.GorillaChieftain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorilla Chieftain", "94b", Rarity.COMMON, mage.cards.g.GorillaChieftain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorilla Shaman", "72a", Rarity.COMMON, mage.cards.g.GorillaShaman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorilla Shaman", "72b", Rarity.COMMON, mage.cards.g.GorillaShaman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorilla War Cry", "73a", Rarity.COMMON, mage.cards.g.GorillaWarCry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gorilla War Cry", "73b", Rarity.COMMON, mage.cards.g.GorillaWarCry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Guerrilla Tactics", "74a", Rarity.COMMON, mage.cards.g.GuerrillaTactics.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Guerrilla Tactics", "74b", Rarity.COMMON, mage.cards.g.GuerrillaTactics.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gustha's Scepter", 120, Rarity.RARE, mage.cards.g.GusthasScepter.class)); + cards.add(new SetCardInfo("Hail Storm", 95, Rarity.UNCOMMON, mage.cards.h.HailStorm.class)); + cards.add(new SetCardInfo("Heart of Yavimaya", 138, Rarity.RARE, mage.cards.h.HeartOfYavimaya.class)); + cards.add(new SetCardInfo("Helm of Obedience", 121, Rarity.RARE, mage.cards.h.HelmOfObedience.class)); + cards.add(new SetCardInfo("Inheritance", 4, Rarity.UNCOMMON, mage.cards.i.Inheritance.class)); + cards.add(new SetCardInfo("Insidious Bookworms", "51a", Rarity.COMMON, mage.cards.i.InsidiousBookworms.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Insidious Bookworms", "51b", Rarity.COMMON, mage.cards.i.InsidiousBookworms.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Gargoyle", 5, Rarity.RARE, mage.cards.i.IvoryGargoyle.class)); + cards.add(new SetCardInfo("Juniper Order Advocate", 6, Rarity.UNCOMMON, mage.cards.j.JuniperOrderAdvocate.class)); + cards.add(new SetCardInfo("Kaysa", 96, Rarity.RARE, mage.cards.k.Kaysa.class)); + cards.add(new SetCardInfo("Keeper of Tresserhorn", 52, Rarity.RARE, mage.cards.k.KeeperOfTresserhorn.class)); + cards.add(new SetCardInfo("Kjeldoran Escort", "7a", Rarity.COMMON, mage.cards.k.KjeldoranEscort.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kjeldoran Escort", "7b", Rarity.COMMON, mage.cards.k.KjeldoranEscort.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kjeldoran Pride", "9a", Rarity.COMMON, mage.cards.k.KjeldoranPride.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kjeldoran Pride", "9b", Rarity.COMMON, mage.cards.k.KjeldoranPride.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Kjeldoran Home Guard", 8, Rarity.UNCOMMON, mage.cards.k.KjeldoranHomeGuard.class)); + cards.add(new SetCardInfo("Kjeldoran Outpost", 139, Rarity.RARE, mage.cards.k.KjeldoranOutpost.class)); + cards.add(new SetCardInfo("Krovikan Horror", 53, Rarity.RARE, mage.cards.k.KrovikanHorror.class)); + cards.add(new SetCardInfo("Krovikan Plague", 54, Rarity.UNCOMMON, mage.cards.k.KrovikanPlague.class)); + cards.add(new SetCardInfo("Lake of the Dead", 140, Rarity.RARE, mage.cards.l.LakeOfTheDead.class)); + cards.add(new SetCardInfo("Lat-Nam's Legacy", "30a", Rarity.COMMON, mage.cards.l.LatNamsLegacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lat-Nam's Legacy", "30b", Rarity.COMMON, mage.cards.l.LatNamsLegacy.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Library of Lat-Nam", 31, Rarity.RARE, mage.cards.l.LibraryOfLatNam.class)); + cards.add(new SetCardInfo("Lim-Dul's High Guard", "55a", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lim-Dul's High Guard", "55b", Rarity.COMMON, mage.cards.l.LimDulsHighGuard.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Lim-Dul's Paladin", 108, Rarity.UNCOMMON, mage.cards.l.LimDulsPaladin.class)); + cards.add(new SetCardInfo("Lim-Dul's Vault", 107, Rarity.UNCOMMON, mage.cards.l.LimDulsVault.class)); + cards.add(new SetCardInfo("Lodestone Bauble", 122, Rarity.RARE, mage.cards.l.LodestoneBauble.class)); + cards.add(new SetCardInfo("Lord of Tresserhorn", 112, Rarity.RARE, mage.cards.l.LordOfTresserhorn.class)); + cards.add(new SetCardInfo("Martyrdom", "10a", Rarity.COMMON, mage.cards.m.Martyrdom.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Martyrdom", "10b", Rarity.COMMON, mage.cards.m.Martyrdom.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Misfortune", 113, Rarity.RARE, mage.cards.m.Misfortune.class)); + cards.add(new SetCardInfo("Mishra's Groundbreaker", 123, Rarity.UNCOMMON, mage.cards.m.MishrasGroundbreaker.class)); + cards.add(new SetCardInfo("Misinformation", 56, Rarity.UNCOMMON, mage.cards.m.Misinformation.class)); + cards.add(new SetCardInfo("Mystic Compass", 124, Rarity.UNCOMMON, mage.cards.m.MysticCompass.class)); + cards.add(new SetCardInfo("Nature's Blessing", 110, Rarity.UNCOMMON, mage.cards.n.NaturesBlessing.class)); + cards.add(new SetCardInfo("Nature's Chosen", 97, Rarity.UNCOMMON, mage.cards.n.NaturesChosen.class)); + cards.add(new SetCardInfo("Nature's Wrath", 98, Rarity.RARE, mage.cards.n.NaturesWrath.class)); + cards.add(new SetCardInfo("Noble Steeds", "11a", Rarity.COMMON, mage.cards.n.NobleSteeds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Noble Steeds", "11b", Rarity.COMMON, mage.cards.n.NobleSteeds.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Omen of Fire", 75, Rarity.RARE, mage.cards.o.OmenOfFire.class)); + cards.add(new SetCardInfo("Phantasmal Fiend", "57a", Rarity.COMMON, mage.cards.p.PhantasmalFiend.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phantasmal Fiend", "57b", Rarity.COMMON, mage.cards.p.PhantasmalFiend.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phantasmal Sphere", 32, Rarity.RARE, mage.cards.p.PhantasmalSphere.class)); + cards.add(new SetCardInfo("Phelddagrif", 115, Rarity.RARE, mage.cards.p.Phelddagrif.class)); + cards.add(new SetCardInfo("Phyrexian Boon", "58a", Rarity.COMMON, mage.cards.p.PhyrexianBoon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian Boon", "58b", Rarity.COMMON, mage.cards.p.PhyrexianBoon.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian Devourer", 125, Rarity.RARE, mage.cards.p.PhyrexianDevourer.class)); + cards.add(new SetCardInfo("Phyrexian Portal", 126, Rarity.RARE, mage.cards.p.PhyrexianPortal.class)); + cards.add(new SetCardInfo("Phyrexian War Beast", "127a", Rarity.COMMON, mage.cards.p.PhyrexianWarBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Phyrexian War Beast", "127b", Rarity.COMMON, mage.cards.p.PhyrexianWarBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pillage", 76, Rarity.UNCOMMON, mage.cards.p.Pillage.class)); + cards.add(new SetCardInfo("Pyrokinesis", 78, Rarity.UNCOMMON, mage.cards.p.Pyrokinesis.class)); + cards.add(new SetCardInfo("Reinforcements", "12a", Rarity.COMMON, mage.cards.r.Reinforcements.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Reinforcements", "12b", Rarity.COMMON, mage.cards.r.Reinforcements.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Reprisal", "13a", Rarity.COMMON, mage.cards.r.Reprisal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Reprisal", "13b", Rarity.COMMON, mage.cards.r.Reprisal.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ritual of the Machine", 59, Rarity.RARE, mage.cards.r.RitualOfTheMachine.class)); + cards.add(new SetCardInfo("Rogue Skycaptain", 79, Rarity.RARE, mage.cards.r.RogueSkycaptain.class)); + cards.add(new SetCardInfo("Royal Decree", 14, Rarity.RARE, mage.cards.r.RoyalDecree.class)); + cards.add(new SetCardInfo("Royal Herbalist", "15a", Rarity.COMMON, mage.cards.r.RoyalHerbalist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Royal Herbalist", "15b", Rarity.COMMON, mage.cards.r.RoyalHerbalist.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Scarab of the Unseen", 128, Rarity.UNCOMMON, mage.cards.s.ScarabOfTheUnseen.class)); + cards.add(new SetCardInfo("School of the Unseen", 141, Rarity.UNCOMMON, mage.cards.s.SchoolOfTheUnseen.class)); + cards.add(new SetCardInfo("Seasoned Tactician", 17, Rarity.UNCOMMON, mage.cards.s.SeasonedTactician.class)); + cards.add(new SetCardInfo("Sheltered Valley", 142, Rarity.RARE, mage.cards.s.ShelteredValley.class)); + cards.add(new SetCardInfo("Shield Sphere", 129, Rarity.UNCOMMON, mage.cards.s.ShieldSphere.class)); + cards.add(new SetCardInfo("Sol Grail", 130, Rarity.UNCOMMON, mage.cards.s.SolGrail.class)); + cards.add(new SetCardInfo("Soldevi Adnate", "60a", Rarity.COMMON, mage.cards.s.SoldeviAdnate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Adnate", "60b", Rarity.COMMON, mage.cards.s.SoldeviAdnate.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Digger", 131, Rarity.RARE, mage.cards.s.SoldeviDigger.class)); + cards.add(new SetCardInfo("Soldevi Excavations", 143, Rarity.RARE, mage.cards.s.SoldeviExcavations.class)); + cards.add(new SetCardInfo("Soldevi Heretic", "33a", Rarity.COMMON, mage.cards.s.SoldeviHeretic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Heretic", "33b", Rarity.COMMON, mage.cards.s.SoldeviHeretic.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Sage", "34a", Rarity.COMMON, mage.cards.s.SoldeviSage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Sage", "34b", Rarity.COMMON, mage.cards.s.SoldeviSage.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Sentry", "132a", Rarity.COMMON, mage.cards.s.SoldeviSentry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Sentry", "132b", Rarity.COMMON, mage.cards.s.SoldeviSentry.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Steam Beast", "133a", Rarity.COMMON, mage.cards.s.SoldeviSteamBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldevi Steam Beast", "133b", Rarity.COMMON, mage.cards.s.SoldeviSteamBeast.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Soldier of Fortune", 80, Rarity.UNCOMMON, mage.cards.s.SoldierOfFortune.class)); + cards.add(new SetCardInfo("Spiny Starfish", 35, Rarity.UNCOMMON, mage.cards.s.SpinyStarfish.class)); + cards.add(new SetCardInfo("Splintering Wind", 99, Rarity.RARE, mage.cards.s.SplinteringWind.class)); + cards.add(new SetCardInfo("Stench of Decay", "61a", Rarity.COMMON, mage.cards.s.StenchOfDecay.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stench of Decay", "61b", Rarity.COMMON, mage.cards.s.StenchOfDecay.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm Cauldron", 134, Rarity.RARE, mage.cards.s.StormCauldron.class)); + cards.add(new SetCardInfo("Storm Crow", "36a", Rarity.COMMON, mage.cards.s.StormCrow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm Crow", "36b", Rarity.COMMON, mage.cards.s.StormCrow.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm Elemental", 37, Rarity.UNCOMMON, mage.cards.s.StormElemental.class)); + cards.add(new SetCardInfo("Storm Shaman", "81a", Rarity.COMMON, mage.cards.s.StormShaman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Storm Shaman", "81b", Rarity.COMMON, mage.cards.s.StormShaman.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Stromgald Spy", 62, Rarity.UNCOMMON, mage.cards.s.StromgaldSpy.class)); + cards.add(new SetCardInfo("Surge of Strength", 109, Rarity.UNCOMMON, mage.cards.s.SurgeOfStrength.class)); + cards.add(new SetCardInfo("Sustaining Spirit", 18, Rarity.RARE, mage.cards.s.SustainingSpirit.class)); + cards.add(new SetCardInfo("Swamp Mosquito", "63a", Rarity.COMMON, mage.cards.s.SwampMosquito.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp Mosquito", "63b", Rarity.COMMON, mage.cards.s.SwampMosquito.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sworn Defender", 19, Rarity.RARE, mage.cards.s.SwornDefender.class)); + cards.add(new SetCardInfo("Thawing Glaciers", 144, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); + cards.add(new SetCardInfo("Thought Lash", 39, Rarity.RARE, mage.cards.t.ThoughtLash.class)); + cards.add(new SetCardInfo("Tidal Control", 40, Rarity.RARE, mage.cards.t.TidalControl.class)); + cards.add(new SetCardInfo("Tornado", 101, Rarity.RARE, mage.cards.t.Tornado.class)); + cards.add(new SetCardInfo("Unlikely Alliance", 20, Rarity.UNCOMMON, mage.cards.u.UnlikelyAlliance.class)); + cards.add(new SetCardInfo("Urza's Engine", 135, Rarity.UNCOMMON, mage.cards.u.UrzasEngine.class)); + cards.add(new SetCardInfo("Varchild's Crusader", "82a", Rarity.COMMON, mage.cards.v.VarchildsCrusader.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Varchild's Crusader", "82b", Rarity.COMMON, mage.cards.v.VarchildsCrusader.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Varchild's War-Riders", 83, Rarity.RARE, mage.cards.v.VarchildsWarRiders.class)); + cards.add(new SetCardInfo("Veteran's Voice", "84a", Rarity.COMMON, mage.cards.v.VeteransVoice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Veteran's Voice", "84b", Rarity.COMMON, mage.cards.v.VeteransVoice.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Viscerid Armor", "41a", Rarity.COMMON, mage.cards.v.VisceridArmor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Viscerid Armor", "41b", Rarity.COMMON, mage.cards.v.VisceridArmor.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Viscerid Drone", 42, Rarity.UNCOMMON, mage.cards.v.VisceridDrone.class)); + cards.add(new SetCardInfo("Wandering Mage", 111, Rarity.RARE, mage.cards.w.WanderingMage.class)); + cards.add(new SetCardInfo("Whip Vine", "103a", Rarity.COMMON, mage.cards.w.WhipVine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Whip Vine", "103b", Rarity.COMMON, mage.cards.w.WhipVine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Whirling Catapult", 136, Rarity.UNCOMMON, mage.cards.w.WhirlingCatapult.class)); + cards.add(new SetCardInfo("Wild Aesthir", "21a", Rarity.COMMON, mage.cards.w.WildAesthir.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Wild Aesthir", "21b", Rarity.COMMON, mage.cards.w.WildAesthir.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Winter's Night", 114, Rarity.RARE, mage.cards.w.WintersNight.class)); + cards.add(new SetCardInfo("Yavimaya Ancients", "104a", Rarity.COMMON, mage.cards.y.YavimayaAncients.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yavimaya Ancients", "104b", Rarity.COMMON, mage.cards.y.YavimayaAncients.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Yavimaya Ants", 105, Rarity.UNCOMMON, mage.cards.y.YavimayaAnts.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Chronicles.java b/Mage.Sets/src/mage/sets/Chronicles.java index 2d84e37739f..abfa44a566a 100644 --- a/Mage.Sets/src/mage/sets/Chronicles.java +++ b/Mage.Sets/src/mage/sets/Chronicles.java @@ -1,154 +1,154 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author LevelX2 - */ -public final class Chronicles extends ExpansionSet { - - private static final Chronicles instance = new Chronicles(); - - public static Chronicles getInstance() { - return instance; - } - - private Chronicles() { - super("Chronicles", "CHR", ExpansionSet.buildDate(1995, 6, 1), SetType.SUPPLEMENTAL); - this.blockName = "Reprint"; - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 9; - this.numBoosterUncommon = 2; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Abu Ja'far", 1, Rarity.UNCOMMON, mage.cards.a.AbuJafar.class)); - cards.add(new SetCardInfo("Active Volcano", 43, Rarity.COMMON, mage.cards.a.ActiveVolcano.class)); - cards.add(new SetCardInfo("Akron Legionnaire", 2, Rarity.RARE, mage.cards.a.AkronLegionnaire.class)); - cards.add(new SetCardInfo("Aladdin", 44, Rarity.UNCOMMON, mage.cards.a.Aladdin.class)); - cards.add(new SetCardInfo("Angelic Voices", 3, Rarity.RARE, mage.cards.a.AngelicVoices.class)); - cards.add(new SetCardInfo("Arcades Sabboth", 71, Rarity.RARE, mage.cards.a.ArcadesSabboth.class)); - cards.add(new SetCardInfo("Arena of the Ancients", 91, Rarity.RARE, mage.cards.a.ArenaOfTheAncients.class)); - cards.add(new SetCardInfo("Argothian Pixies", 57, Rarity.COMMON, mage.cards.a.ArgothianPixies.class)); - cards.add(new SetCardInfo("Ashnod's Altar", 92, Rarity.COMMON, mage.cards.a.AshnodsAltar.class)); - cards.add(new SetCardInfo("Ashnod's Transmogrant", 93, Rarity.COMMON, mage.cards.a.AshnodsTransmogrant.class)); - cards.add(new SetCardInfo("Axelrod Gunnarson", 72, Rarity.RARE, mage.cards.a.AxelrodGunnarson.class)); - cards.add(new SetCardInfo("Ayesha Tanaka", 73, Rarity.RARE, mage.cards.a.AyeshaTanaka.class)); - cards.add(new SetCardInfo("Azure Drake", 15, Rarity.UNCOMMON, mage.cards.a.AzureDrake.class)); - cards.add(new SetCardInfo("Banshee", 29, Rarity.UNCOMMON, mage.cards.b.Banshee.class)); - cards.add(new SetCardInfo("Barl's Cage", 94, Rarity.RARE, mage.cards.b.BarlsCage.class)); - cards.add(new SetCardInfo("Beasts of Bogardan", 45, Rarity.UNCOMMON, mage.cards.b.BeastsOfBogardan.class)); - cards.add(new SetCardInfo("Blood Moon", 46, Rarity.RARE, mage.cards.b.BloodMoon.class)); - cards.add(new SetCardInfo("Blood of the Martyr", 4, Rarity.UNCOMMON, mage.cards.b.BloodOfTheMartyr.class)); - cards.add(new SetCardInfo("Bog Rats", 30, Rarity.COMMON, mage.cards.b.BogRats.class)); - cards.add(new SetCardInfo("Book of Rass", 95, Rarity.RARE, mage.cards.b.BookOfRass.class)); - cards.add(new SetCardInfo("Boomerang", 16, Rarity.COMMON, mage.cards.b.Boomerang.class)); - cards.add(new SetCardInfo("Bronze Horse", 96, Rarity.RARE, mage.cards.b.BronzeHorse.class)); - cards.add(new SetCardInfo("Cat Warriors", 58, Rarity.COMMON, mage.cards.c.CatWarriors.class)); - cards.add(new SetCardInfo("Chromium", 74, Rarity.RARE, mage.cards.c.Chromium.class)); - cards.add(new SetCardInfo("City of Brass", 112, Rarity.RARE, mage.cards.c.CityOfBrass.class)); - cards.add(new SetCardInfo("Cocoon", 59, Rarity.UNCOMMON, mage.cards.c.Cocoon.class)); - cards.add(new SetCardInfo("Concordant Crossroads", 60, Rarity.RARE, mage.cards.c.ConcordantCrossroads.class)); - cards.add(new SetCardInfo("Craw Giant", 61, Rarity.UNCOMMON, mage.cards.c.CrawGiant.class)); - cards.add(new SetCardInfo("Cuombajj Witches", 31, Rarity.COMMON, mage.cards.c.CuombajjWitches.class)); - cards.add(new SetCardInfo("Cyclone", 62, Rarity.RARE, mage.cards.c.Cyclone.class)); - cards.add(new SetCardInfo("D'Avenant Archer", 5, Rarity.COMMON, mage.cards.d.DAvenantArcher.class)); - cards.add(new SetCardInfo("Dakkon Blackblade", 75, Rarity.RARE, mage.cards.d.DakkonBlackblade.class)); - cards.add(new SetCardInfo("Dance of Many", 17, Rarity.RARE, mage.cards.d.DanceOfMany.class)); - cards.add(new SetCardInfo("Dandan", 18, Rarity.COMMON, mage.cards.d.Dandan.class)); - cards.add(new SetCardInfo("Divine Offering", 6, Rarity.COMMON, mage.cards.d.DivineOffering.class)); - cards.add(new SetCardInfo("Emerald Dragonfly", 63, Rarity.COMMON, mage.cards.e.EmeraldDragonfly.class)); - cards.add(new SetCardInfo("Enchantment Alteration", 19, Rarity.UNCOMMON, mage.cards.e.EnchantmentAlteration.class)); - cards.add(new SetCardInfo("Erhnam Djinn", 64, Rarity.UNCOMMON, mage.cards.e.ErhnamDjinn.class)); - cards.add(new SetCardInfo("Fallen Angel", 32, Rarity.UNCOMMON, mage.cards.f.FallenAngel.class)); - cards.add(new SetCardInfo("Feldon's Cane", 97, Rarity.COMMON, mage.cards.f.FeldonsCane.class)); - cards.add(new SetCardInfo("Fire Drake", 47, Rarity.UNCOMMON, mage.cards.f.FireDrake.class)); - cards.add(new SetCardInfo("Fishliver Oil", 20, Rarity.COMMON, mage.cards.f.FishliverOil.class)); - cards.add(new SetCardInfo("Flash Flood", 21, Rarity.COMMON, mage.cards.f.FlashFlood.class)); - cards.add(new SetCardInfo("Fountain of Youth", 98, Rarity.COMMON, mage.cards.f.FountainOfYouth.class)); - cards.add(new SetCardInfo("Gabriel Angelfire", 76, Rarity.RARE, mage.cards.g.GabrielAngelfire.class)); - cards.add(new SetCardInfo("Gauntlets of Chaos", 99, Rarity.RARE, mage.cards.g.GauntletsOfChaos.class)); - cards.add(new SetCardInfo("Ghazban Ogre", 65, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); - cards.add(new SetCardInfo("Giant Slug", 33, Rarity.COMMON, mage.cards.g.GiantSlug.class)); - cards.add(new SetCardInfo("Goblin Artisans", 48, Rarity.UNCOMMON, mage.cards.g.GoblinArtisans.class)); - cards.add(new SetCardInfo("Goblin Digging Team", 49, Rarity.COMMON, mage.cards.g.GoblinDiggingTeam.class)); - cards.add(new SetCardInfo("Goblin Shrine", 50, Rarity.COMMON, mage.cards.g.GoblinShrine.class)); - cards.add(new SetCardInfo("Goblins of the Flarg", 51, Rarity.COMMON, mage.cards.g.GoblinsOfTheFlarg.class)); - cards.add(new SetCardInfo("Hasran Ogress", 34, Rarity.COMMON, mage.cards.h.HasranOgress.class)); - cards.add(new SetCardInfo("Hell's Caretaker", 35, Rarity.RARE, mage.cards.h.HellsCaretaker.class)); - cards.add(new SetCardInfo("Horn of Deafening", 100, Rarity.RARE, mage.cards.h.HornOfDeafening.class)); - cards.add(new SetCardInfo("Indestructible Aura", 7, Rarity.COMMON, mage.cards.i.IndestructibleAura.class)); - cards.add(new SetCardInfo("Ivory Guardians", 8, Rarity.UNCOMMON, mage.cards.i.IvoryGuardians.class)); - cards.add(new SetCardInfo("Jalum Tome", 101, Rarity.RARE, mage.cards.j.JalumTome.class)); - cards.add(new SetCardInfo("Johan", 77, Rarity.RARE, mage.cards.j.Johan.class)); - cards.add(new SetCardInfo("Juxtapose", 22, Rarity.RARE, mage.cards.j.Juxtapose.class)); - cards.add(new SetCardInfo("Keepers of the Faith", 9, Rarity.COMMON, mage.cards.k.KeepersOfTheFaith.class)); - cards.add(new SetCardInfo("Kei Takahashi", 78, Rarity.UNCOMMON, mage.cards.k.KeiTakahashi.class)); - cards.add(new SetCardInfo("Land's Edge", 52, Rarity.RARE, mage.cards.l.LandsEdge.class)); - cards.add(new SetCardInfo("Living Armor", 103, Rarity.COMMON, mage.cards.l.LivingArmor.class)); - cards.add(new SetCardInfo("Marhault Elsdragon", 79, Rarity.UNCOMMON, mage.cards.m.MarhaultElsdragon.class)); - cards.add(new SetCardInfo("Metamorphosis", 66, Rarity.COMMON, mage.cards.m.Metamorphosis.class)); - cards.add(new SetCardInfo("Mountain Yeti", 53, Rarity.COMMON, mage.cards.m.MountainYeti.class)); - cards.add(new SetCardInfo("Nebuchadnezzar", 80, Rarity.RARE, mage.cards.n.Nebuchadnezzar.class)); - cards.add(new SetCardInfo("Nicol Bolas", 81, Rarity.RARE, mage.cards.n.NicolBolas.class)); - cards.add(new SetCardInfo("Obelisk of Undoing", 104, Rarity.RARE, mage.cards.o.ObeliskOfUndoing.class)); - cards.add(new SetCardInfo("Palladia-Mors", 82, Rarity.RARE, mage.cards.p.PalladiaMors.class)); - cards.add(new SetCardInfo("Petra Sphinx", 10, Rarity.RARE, mage.cards.p.PetraSphinx.class)); - cards.add(new SetCardInfo("Primordial Ooze", 54, Rarity.UNCOMMON, mage.cards.p.PrimordialOoze.class)); - cards.add(new SetCardInfo("Puppet Master", 23, Rarity.UNCOMMON, mage.cards.p.PuppetMaster.class)); - cards.add(new SetCardInfo("Rabid Wombat", 67, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); - cards.add(new SetCardInfo("Rakalite", 105, Rarity.RARE, mage.cards.r.Rakalite.class)); - cards.add(new SetCardInfo("Recall", 24, Rarity.UNCOMMON, mage.cards.r.Recall.class)); - cards.add(new SetCardInfo("Remove Soul", 25, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); - cards.add(new SetCardInfo("Repentant Blacksmith", 11, Rarity.COMMON, mage.cards.r.RepentantBlacksmith.class)); - cards.add(new SetCardInfo("Revelation", 68, Rarity.RARE, mage.cards.r.Revelation.class)); - cards.add(new SetCardInfo("Rubinia Soulsinger", 83, Rarity.RARE, mage.cards.r.RubiniaSoulsinger.class)); - cards.add(new SetCardInfo("Runesword", 106, Rarity.COMMON, mage.cards.r.Runesword.class)); - cards.add(new SetCardInfo("Safe Haven", 113, Rarity.RARE, mage.cards.s.SafeHaven.class)); - cards.add(new SetCardInfo("Scavenger Folk", 69, Rarity.COMMON, mage.cards.s.ScavengerFolk.class)); - cards.add(new SetCardInfo("Sentinel", 107, Rarity.RARE, mage.cards.s.Sentinel.class)); - cards.add(new SetCardInfo("Serpent Generator", 108, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); - cards.add(new SetCardInfo("Shield Wall", 12, Rarity.UNCOMMON, mage.cards.s.ShieldWall.class)); - cards.add(new SetCardInfo("Shimian Night Stalker", 36, Rarity.UNCOMMON, mage.cards.s.ShimianNightStalker.class)); - cards.add(new SetCardInfo("Sivitri Scarzam", 84, Rarity.UNCOMMON, mage.cards.s.SivitriScarzam.class)); - cards.add(new SetCardInfo("Sol'kanar the Swamp King", 85, Rarity.RARE, mage.cards.s.SolkanarTheSwampKing.class)); - cards.add(new SetCardInfo("Stangg", 86, Rarity.RARE, mage.cards.s.Stangg.class)); - cards.add(new SetCardInfo("Storm Seeker", 70, Rarity.UNCOMMON, mage.cards.s.StormSeeker.class)); - cards.add(new SetCardInfo("Teleport", 26, Rarity.RARE, mage.cards.t.Teleport.class)); - cards.add(new SetCardInfo("The Fallen", 38, Rarity.UNCOMMON, mage.cards.t.TheFallen.class)); - cards.add(new SetCardInfo("The Wretched", 39, Rarity.RARE, mage.cards.t.TheWretched.class)); - cards.add(new SetCardInfo("Tobias Andrion", 87, Rarity.UNCOMMON, mage.cards.t.TobiasAndrion.class)); - cards.add(new SetCardInfo("Tor Wauki", 88, Rarity.UNCOMMON, mage.cards.t.TorWauki.class)); - cards.add(new SetCardInfo("Tormod's Crypt", 109, Rarity.COMMON, mage.cards.t.TormodsCrypt.class)); - cards.add(new SetCardInfo("Transmutation", 40, Rarity.COMMON, mage.cards.t.Transmutation.class)); - cards.add(new SetCardInfo("Triassic Egg", 110, Rarity.RARE, mage.cards.t.TriassicEgg.class)); - cards.add(new SetCardInfo("Urza's Mine", "114a", Rarity.UNCOMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Mine", "114b", Rarity.UNCOMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Mine", "114c", Rarity.UNCOMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Mine", "114d", Rarity.UNCOMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Power Plant", "115a", Rarity.UNCOMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Power Plant", "115b", Rarity.UNCOMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Power Plant", "115c", Rarity.UNCOMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Power Plant", "115d", Rarity.UNCOMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Tower", "116a", Rarity.UNCOMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Tower", "116b", Rarity.UNCOMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Tower", "116c", Rarity.UNCOMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Tower", "116d", Rarity.UNCOMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Vaevictis Asmadi", 89, Rarity.RARE, mage.cards.v.VaevictisAsmadi.class)); - cards.add(new SetCardInfo("Voodoo Doll", 111, Rarity.RARE, mage.cards.v.VoodooDoll.class)); - cards.add(new SetCardInfo("Wall of Heat", 55, Rarity.COMMON, mage.cards.w.WallOfHeat.class)); - cards.add(new SetCardInfo("Wall of Opposition", 56, Rarity.UNCOMMON, mage.cards.w.WallOfOpposition.class)); - cards.add(new SetCardInfo("Wall of Shadows", 41, Rarity.COMMON, mage.cards.w.WallOfShadows.class)); - cards.add(new SetCardInfo("Wall of Vapor", 27, Rarity.COMMON, mage.cards.w.WallOfVapor.class)); - cards.add(new SetCardInfo("Wall of Wonder", 28, Rarity.UNCOMMON, mage.cards.w.WallOfWonder.class)); - cards.add(new SetCardInfo("War Elephant", 13, Rarity.COMMON, mage.cards.w.WarElephant.class)); - cards.add(new SetCardInfo("Witch Hunter", 14, Rarity.UNCOMMON, mage.cards.w.WitchHunter.class)); - cards.add(new SetCardInfo("Xira Arien", 90, Rarity.RARE, mage.cards.x.XiraArien.class)); - cards.add(new SetCardInfo("Yawgmoth Demon", 42, Rarity.RARE, mage.cards.y.YawgmothDemon.class)); - } - -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author LevelX2 + */ +public final class Chronicles extends ExpansionSet { + + private static final Chronicles instance = new Chronicles(); + + public static Chronicles getInstance() { + return instance; + } + + private Chronicles() { + super("Chronicles", "CHR", ExpansionSet.buildDate(1995, 6, 1), SetType.SUPPLEMENTAL); + this.blockName = "Reprint"; + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 9; + this.numBoosterUncommon = 2; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Abu Ja'far", 1, Rarity.UNCOMMON, mage.cards.a.AbuJafar.class)); + cards.add(new SetCardInfo("Active Volcano", 43, Rarity.COMMON, mage.cards.a.ActiveVolcano.class)); + cards.add(new SetCardInfo("Akron Legionnaire", 2, Rarity.RARE, mage.cards.a.AkronLegionnaire.class)); + cards.add(new SetCardInfo("Aladdin", 44, Rarity.UNCOMMON, mage.cards.a.Aladdin.class)); + cards.add(new SetCardInfo("Angelic Voices", 3, Rarity.RARE, mage.cards.a.AngelicVoices.class)); + cards.add(new SetCardInfo("Arcades Sabboth", 71, Rarity.RARE, mage.cards.a.ArcadesSabboth.class)); + cards.add(new SetCardInfo("Arena of the Ancients", 91, Rarity.RARE, mage.cards.a.ArenaOfTheAncients.class)); + cards.add(new SetCardInfo("Argothian Pixies", 57, Rarity.COMMON, mage.cards.a.ArgothianPixies.class)); + cards.add(new SetCardInfo("Ashnod's Altar", 92, Rarity.COMMON, mage.cards.a.AshnodsAltar.class)); + cards.add(new SetCardInfo("Ashnod's Transmogrant", 93, Rarity.COMMON, mage.cards.a.AshnodsTransmogrant.class)); + cards.add(new SetCardInfo("Axelrod Gunnarson", 72, Rarity.RARE, mage.cards.a.AxelrodGunnarson.class)); + cards.add(new SetCardInfo("Ayesha Tanaka", 73, Rarity.RARE, mage.cards.a.AyeshaTanaka.class)); + cards.add(new SetCardInfo("Azure Drake", 15, Rarity.UNCOMMON, mage.cards.a.AzureDrake.class)); + cards.add(new SetCardInfo("Banshee", 29, Rarity.UNCOMMON, mage.cards.b.Banshee.class)); + cards.add(new SetCardInfo("Barl's Cage", 94, Rarity.RARE, mage.cards.b.BarlsCage.class)); + cards.add(new SetCardInfo("Beasts of Bogardan", 45, Rarity.UNCOMMON, mage.cards.b.BeastsOfBogardan.class)); + cards.add(new SetCardInfo("Blood Moon", 46, Rarity.RARE, mage.cards.b.BloodMoon.class)); + cards.add(new SetCardInfo("Blood of the Martyr", 4, Rarity.UNCOMMON, mage.cards.b.BloodOfTheMartyr.class)); + cards.add(new SetCardInfo("Bog Rats", 30, Rarity.COMMON, mage.cards.b.BogRats.class)); + cards.add(new SetCardInfo("Book of Rass", 95, Rarity.RARE, mage.cards.b.BookOfRass.class)); + cards.add(new SetCardInfo("Boomerang", 16, Rarity.COMMON, mage.cards.b.Boomerang.class)); + cards.add(new SetCardInfo("Bronze Horse", 96, Rarity.RARE, mage.cards.b.BronzeHorse.class)); + cards.add(new SetCardInfo("Cat Warriors", 58, Rarity.COMMON, mage.cards.c.CatWarriors.class)); + cards.add(new SetCardInfo("Chromium", 74, Rarity.RARE, mage.cards.c.Chromium.class)); + cards.add(new SetCardInfo("City of Brass", 112, Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Cocoon", 59, Rarity.UNCOMMON, mage.cards.c.Cocoon.class)); + cards.add(new SetCardInfo("Concordant Crossroads", 60, Rarity.RARE, mage.cards.c.ConcordantCrossroads.class)); + cards.add(new SetCardInfo("Craw Giant", 61, Rarity.UNCOMMON, mage.cards.c.CrawGiant.class)); + cards.add(new SetCardInfo("Cuombajj Witches", 31, Rarity.COMMON, mage.cards.c.CuombajjWitches.class)); + cards.add(new SetCardInfo("Cyclone", 62, Rarity.RARE, mage.cards.c.Cyclone.class)); + cards.add(new SetCardInfo("D'Avenant Archer", 5, Rarity.COMMON, mage.cards.d.DAvenantArcher.class)); + cards.add(new SetCardInfo("Dakkon Blackblade", 75, Rarity.RARE, mage.cards.d.DakkonBlackblade.class)); + cards.add(new SetCardInfo("Dance of Many", 17, Rarity.RARE, mage.cards.d.DanceOfMany.class)); + cards.add(new SetCardInfo("Dandan", 18, Rarity.COMMON, mage.cards.d.Dandan.class)); + cards.add(new SetCardInfo("Divine Offering", 6, Rarity.COMMON, mage.cards.d.DivineOffering.class)); + cards.add(new SetCardInfo("Emerald Dragonfly", 63, Rarity.COMMON, mage.cards.e.EmeraldDragonfly.class)); + cards.add(new SetCardInfo("Enchantment Alteration", 19, Rarity.UNCOMMON, mage.cards.e.EnchantmentAlteration.class)); + cards.add(new SetCardInfo("Erhnam Djinn", 64, Rarity.UNCOMMON, mage.cards.e.ErhnamDjinn.class)); + cards.add(new SetCardInfo("Fallen Angel", 32, Rarity.UNCOMMON, mage.cards.f.FallenAngel.class)); + cards.add(new SetCardInfo("Feldon's Cane", 97, Rarity.COMMON, mage.cards.f.FeldonsCane.class)); + cards.add(new SetCardInfo("Fire Drake", 47, Rarity.UNCOMMON, mage.cards.f.FireDrake.class)); + cards.add(new SetCardInfo("Fishliver Oil", 20, Rarity.COMMON, mage.cards.f.FishliverOil.class)); + cards.add(new SetCardInfo("Flash Flood", 21, Rarity.COMMON, mage.cards.f.FlashFlood.class)); + cards.add(new SetCardInfo("Fountain of Youth", 98, Rarity.COMMON, mage.cards.f.FountainOfYouth.class)); + cards.add(new SetCardInfo("Gabriel Angelfire", 76, Rarity.RARE, mage.cards.g.GabrielAngelfire.class)); + cards.add(new SetCardInfo("Gauntlets of Chaos", 99, Rarity.RARE, mage.cards.g.GauntletsOfChaos.class)); + cards.add(new SetCardInfo("Ghazban Ogre", 65, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); + cards.add(new SetCardInfo("Giant Slug", 33, Rarity.COMMON, mage.cards.g.GiantSlug.class)); + cards.add(new SetCardInfo("Goblin Artisans", 48, Rarity.UNCOMMON, mage.cards.g.GoblinArtisans.class)); + cards.add(new SetCardInfo("Goblin Digging Team", 49, Rarity.COMMON, mage.cards.g.GoblinDiggingTeam.class)); + cards.add(new SetCardInfo("Goblin Shrine", 50, Rarity.COMMON, mage.cards.g.GoblinShrine.class)); + cards.add(new SetCardInfo("Goblins of the Flarg", 51, Rarity.COMMON, mage.cards.g.GoblinsOfTheFlarg.class)); + cards.add(new SetCardInfo("Hasran Ogress", 34, Rarity.COMMON, mage.cards.h.HasranOgress.class)); + cards.add(new SetCardInfo("Hell's Caretaker", 35, Rarity.RARE, mage.cards.h.HellsCaretaker.class)); + cards.add(new SetCardInfo("Horn of Deafening", 100, Rarity.RARE, mage.cards.h.HornOfDeafening.class)); + cards.add(new SetCardInfo("Indestructible Aura", 7, Rarity.COMMON, mage.cards.i.IndestructibleAura.class)); + cards.add(new SetCardInfo("Ivory Guardians", 8, Rarity.UNCOMMON, mage.cards.i.IvoryGuardians.class)); + cards.add(new SetCardInfo("Jalum Tome", 101, Rarity.RARE, mage.cards.j.JalumTome.class)); + cards.add(new SetCardInfo("Johan", 77, Rarity.RARE, mage.cards.j.Johan.class)); + cards.add(new SetCardInfo("Juxtapose", 22, Rarity.RARE, mage.cards.j.Juxtapose.class)); + cards.add(new SetCardInfo("Keepers of the Faith", 9, Rarity.COMMON, mage.cards.k.KeepersOfTheFaith.class)); + cards.add(new SetCardInfo("Kei Takahashi", 78, Rarity.UNCOMMON, mage.cards.k.KeiTakahashi.class)); + cards.add(new SetCardInfo("Land's Edge", 52, Rarity.RARE, mage.cards.l.LandsEdge.class)); + cards.add(new SetCardInfo("Living Armor", 103, Rarity.COMMON, mage.cards.l.LivingArmor.class)); + cards.add(new SetCardInfo("Marhault Elsdragon", 79, Rarity.UNCOMMON, mage.cards.m.MarhaultElsdragon.class)); + cards.add(new SetCardInfo("Metamorphosis", 66, Rarity.COMMON, mage.cards.m.Metamorphosis.class)); + cards.add(new SetCardInfo("Mountain Yeti", 53, Rarity.COMMON, mage.cards.m.MountainYeti.class)); + cards.add(new SetCardInfo("Nebuchadnezzar", 80, Rarity.RARE, mage.cards.n.Nebuchadnezzar.class)); + cards.add(new SetCardInfo("Nicol Bolas", 81, Rarity.RARE, mage.cards.n.NicolBolas.class)); + cards.add(new SetCardInfo("Obelisk of Undoing", 104, Rarity.RARE, mage.cards.o.ObeliskOfUndoing.class)); + cards.add(new SetCardInfo("Palladia-Mors", 82, Rarity.RARE, mage.cards.p.PalladiaMors.class)); + cards.add(new SetCardInfo("Petra Sphinx", 10, Rarity.RARE, mage.cards.p.PetraSphinx.class)); + cards.add(new SetCardInfo("Primordial Ooze", 54, Rarity.UNCOMMON, mage.cards.p.PrimordialOoze.class)); + cards.add(new SetCardInfo("Puppet Master", 23, Rarity.UNCOMMON, mage.cards.p.PuppetMaster.class)); + cards.add(new SetCardInfo("Rabid Wombat", 67, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); + cards.add(new SetCardInfo("Rakalite", 105, Rarity.RARE, mage.cards.r.Rakalite.class)); + cards.add(new SetCardInfo("Recall", 24, Rarity.UNCOMMON, mage.cards.r.Recall.class)); + cards.add(new SetCardInfo("Remove Soul", 25, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); + cards.add(new SetCardInfo("Repentant Blacksmith", 11, Rarity.COMMON, mage.cards.r.RepentantBlacksmith.class)); + cards.add(new SetCardInfo("Revelation", 68, Rarity.RARE, mage.cards.r.Revelation.class)); + cards.add(new SetCardInfo("Rubinia Soulsinger", 83, Rarity.RARE, mage.cards.r.RubiniaSoulsinger.class)); + cards.add(new SetCardInfo("Runesword", 106, Rarity.COMMON, mage.cards.r.Runesword.class)); + cards.add(new SetCardInfo("Safe Haven", 113, Rarity.RARE, mage.cards.s.SafeHaven.class)); + cards.add(new SetCardInfo("Scavenger Folk", 69, Rarity.COMMON, mage.cards.s.ScavengerFolk.class)); + cards.add(new SetCardInfo("Sentinel", 107, Rarity.RARE, mage.cards.s.Sentinel.class)); + cards.add(new SetCardInfo("Serpent Generator", 108, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); + cards.add(new SetCardInfo("Shield Wall", 12, Rarity.UNCOMMON, mage.cards.s.ShieldWall.class)); + cards.add(new SetCardInfo("Shimian Night Stalker", 36, Rarity.UNCOMMON, mage.cards.s.ShimianNightStalker.class)); + cards.add(new SetCardInfo("Sivitri Scarzam", 84, Rarity.UNCOMMON, mage.cards.s.SivitriScarzam.class)); + cards.add(new SetCardInfo("Sol'kanar the Swamp King", 85, Rarity.RARE, mage.cards.s.SolkanarTheSwampKing.class)); + cards.add(new SetCardInfo("Stangg", 86, Rarity.RARE, mage.cards.s.Stangg.class)); + cards.add(new SetCardInfo("Storm Seeker", 70, Rarity.UNCOMMON, mage.cards.s.StormSeeker.class)); + cards.add(new SetCardInfo("Teleport", 26, Rarity.RARE, mage.cards.t.Teleport.class)); + cards.add(new SetCardInfo("The Fallen", 38, Rarity.UNCOMMON, mage.cards.t.TheFallen.class)); + cards.add(new SetCardInfo("The Wretched", 39, Rarity.RARE, mage.cards.t.TheWretched.class)); + cards.add(new SetCardInfo("Tobias Andrion", 87, Rarity.UNCOMMON, mage.cards.t.TobiasAndrion.class)); + cards.add(new SetCardInfo("Tor Wauki", 88, Rarity.UNCOMMON, mage.cards.t.TorWauki.class)); + cards.add(new SetCardInfo("Tormod's Crypt", 109, Rarity.COMMON, mage.cards.t.TormodsCrypt.class)); + cards.add(new SetCardInfo("Transmutation", 40, Rarity.COMMON, mage.cards.t.Transmutation.class)); + cards.add(new SetCardInfo("Triassic Egg", 110, Rarity.RARE, mage.cards.t.TriassicEgg.class)); + cards.add(new SetCardInfo("Urza's Mine", "114a", Rarity.UNCOMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Mine", "114b", Rarity.UNCOMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Mine", "114c", Rarity.UNCOMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Mine", "114d", Rarity.UNCOMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Power Plant", "115a", Rarity.UNCOMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Power Plant", "115b", Rarity.UNCOMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Power Plant", "115c", Rarity.UNCOMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Power Plant", "115d", Rarity.UNCOMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Tower", "116a", Rarity.UNCOMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Tower", "116b", Rarity.UNCOMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Tower", "116c", Rarity.UNCOMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Tower", "116d", Rarity.UNCOMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Vaevictis Asmadi", 89, Rarity.RARE, mage.cards.v.VaevictisAsmadi.class)); + cards.add(new SetCardInfo("Voodoo Doll", 111, Rarity.RARE, mage.cards.v.VoodooDoll.class)); + cards.add(new SetCardInfo("Wall of Heat", 55, Rarity.COMMON, mage.cards.w.WallOfHeat.class)); + cards.add(new SetCardInfo("Wall of Opposition", 56, Rarity.UNCOMMON, mage.cards.w.WallOfOpposition.class)); + cards.add(new SetCardInfo("Wall of Shadows", 41, Rarity.COMMON, mage.cards.w.WallOfShadows.class)); + cards.add(new SetCardInfo("Wall of Vapor", 27, Rarity.COMMON, mage.cards.w.WallOfVapor.class)); + cards.add(new SetCardInfo("Wall of Wonder", 28, Rarity.UNCOMMON, mage.cards.w.WallOfWonder.class)); + cards.add(new SetCardInfo("War Elephant", 13, Rarity.COMMON, mage.cards.w.WarElephant.class)); + cards.add(new SetCardInfo("Witch Hunter", 14, Rarity.UNCOMMON, mage.cards.w.WitchHunter.class)); + cards.add(new SetCardInfo("Xira Arien", 90, Rarity.RARE, mage.cards.x.XiraArien.class)); + cards.add(new SetCardInfo("Yawgmoth Demon", 42, Rarity.RARE, mage.cards.y.YawgmothDemon.class)); + } + +} diff --git a/Mage.Sets/src/mage/sets/Exodus.java b/Mage.Sets/src/mage/sets/Exodus.java index a7d5dcb6b34..072d1e0c9bb 100644 --- a/Mage.Sets/src/mage/sets/Exodus.java +++ b/Mage.Sets/src/mage/sets/Exodus.java @@ -1,175 +1,175 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author North - */ -public final class Exodus extends ExpansionSet { - - private static final Exodus instance = new Exodus(); - - public static Exodus getInstance() { - return instance; - } - - private Exodus() { - super("Exodus", "EXO", ExpansionSet.buildDate(1998, 6, 15), SetType.EXPANSION); - this.blockName = "Tempest"; - this.parentSet = Tempest.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Aether Tide", 27, Rarity.COMMON, mage.cards.a.AetherTide.class)); - cards.add(new SetCardInfo("Allay", 1, Rarity.COMMON, mage.cards.a.Allay.class)); - cards.add(new SetCardInfo("Anarchist", 79, Rarity.COMMON, mage.cards.a.Anarchist.class)); - cards.add(new SetCardInfo("Angelic Blessing", 2, Rarity.COMMON, mage.cards.a.AngelicBlessing.class)); - cards.add(new SetCardInfo("Avenging Druid", 105, Rarity.COMMON, mage.cards.a.AvengingDruid.class)); - cards.add(new SetCardInfo("Bequeathal", 106, Rarity.COMMON, mage.cards.b.Bequeathal.class)); - cards.add(new SetCardInfo("Carnophage", 53, Rarity.COMMON, mage.cards.c.Carnophage.class)); - cards.add(new SetCardInfo("Cartographer", 107, Rarity.UNCOMMON, mage.cards.c.Cartographer.class)); - cards.add(new SetCardInfo("Cataclysm", 3, Rarity.RARE, mage.cards.c.Cataclysm.class)); - cards.add(new SetCardInfo("Cat Burglar", 54, Rarity.COMMON, mage.cards.c.CatBurglar.class)); - cards.add(new SetCardInfo("Charging Paladin", 4, Rarity.COMMON, mage.cards.c.ChargingPaladin.class)); - cards.add(new SetCardInfo("Cinder Crawler", 80, Rarity.COMMON, mage.cards.c.CinderCrawler.class)); - cards.add(new SetCardInfo("City of Traitors", 143, Rarity.RARE, mage.cards.c.CityOfTraitors.class)); - cards.add(new SetCardInfo("Coat of Arms", 131, Rarity.RARE, mage.cards.c.CoatOfArms.class)); - cards.add(new SetCardInfo("Convalescence", 5, Rarity.RARE, mage.cards.c.Convalescence.class)); - cards.add(new SetCardInfo("Crashing Boars", 108, Rarity.UNCOMMON, mage.cards.c.CrashingBoars.class)); - cards.add(new SetCardInfo("Culling the Weak", 55, Rarity.COMMON, mage.cards.c.CullingTheWeak.class)); - cards.add(new SetCardInfo("Cunning", 28, Rarity.COMMON, mage.cards.c.Cunning.class)); - cards.add(new SetCardInfo("Curiosity", 29, Rarity.UNCOMMON, mage.cards.c.Curiosity.class)); - cards.add(new SetCardInfo("Cursed Flesh", 56, Rarity.COMMON, mage.cards.c.CursedFlesh.class)); - cards.add(new SetCardInfo("Dauthi Cutthroat", 57, Rarity.UNCOMMON, mage.cards.d.DauthiCutthroat.class)); - cards.add(new SetCardInfo("Dauthi Jackal", 58, Rarity.COMMON, mage.cards.d.DauthiJackal.class)); - cards.add(new SetCardInfo("Dauthi Warlord", 59, Rarity.UNCOMMON, mage.cards.d.DauthiWarlord.class)); - cards.add(new SetCardInfo("Death's Duet", 60, Rarity.COMMON, mage.cards.d.DeathsDuet.class)); - cards.add(new SetCardInfo("Dizzying Gaze", 81, Rarity.COMMON, mage.cards.d.DizzyingGaze.class)); - cards.add(new SetCardInfo("Dominating Licid", 30, Rarity.RARE, mage.cards.d.DominatingLicid.class)); - cards.add(new SetCardInfo("Elven Palisade", 109, Rarity.UNCOMMON, mage.cards.e.ElvenPalisade.class)); - cards.add(new SetCardInfo("Elvish Berserker", 110, Rarity.COMMON, mage.cards.e.ElvishBerserker.class)); - cards.add(new SetCardInfo("Entropic Specter", 61, Rarity.RARE, mage.cards.e.EntropicSpecter.class)); - cards.add(new SetCardInfo("Ephemeron", 31, Rarity.RARE, mage.cards.e.Ephemeron.class)); - cards.add(new SetCardInfo("Equilibrium", 32, Rarity.RARE, mage.cards.e.Equilibrium.class)); - cards.add(new SetCardInfo("Erratic Portal", 132, Rarity.RARE, mage.cards.e.ErraticPortal.class)); - cards.add(new SetCardInfo("Ertai, Wizard Adept", 33, Rarity.RARE, mage.cards.e.ErtaiWizardAdept.class)); - cards.add(new SetCardInfo("Exalted Dragon", 6, Rarity.RARE, mage.cards.e.ExaltedDragon.class)); - cards.add(new SetCardInfo("Fade Away", 34, Rarity.COMMON, mage.cards.f.FadeAway.class)); - cards.add(new SetCardInfo("Fighting Chance", 82, Rarity.RARE, mage.cards.f.FightingChance.class)); - cards.add(new SetCardInfo("Flowstone Flood", 83, Rarity.UNCOMMON, mage.cards.f.FlowstoneFlood.class)); - cards.add(new SetCardInfo("Forbid", 35, Rarity.UNCOMMON, mage.cards.f.Forbid.class)); - cards.add(new SetCardInfo("Fugue", 62, Rarity.UNCOMMON, mage.cards.f.Fugue.class)); - cards.add(new SetCardInfo("Furnace Brood", 84, Rarity.COMMON, mage.cards.f.FurnaceBrood.class)); - cards.add(new SetCardInfo("Grollub", 63, Rarity.COMMON, mage.cards.g.Grollub.class)); - cards.add(new SetCardInfo("Hatred", 64, Rarity.RARE, mage.cards.h.Hatred.class)); - cards.add(new SetCardInfo("High Ground", 7, Rarity.UNCOMMON, mage.cards.h.HighGround.class)); - cards.add(new SetCardInfo("Jackalope Herd", 111, Rarity.COMMON, mage.cards.j.JackalopeHerd.class)); - cards.add(new SetCardInfo("Keeper of the Beasts", 112, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheBeasts.class)); - cards.add(new SetCardInfo("Keeper of the Dead", 65, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheDead.class)); - cards.add(new SetCardInfo("Keeper of the Flame", 85, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheFlame.class)); - cards.add(new SetCardInfo("Keeper of the Light", 8, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheLight.class)); - cards.add(new SetCardInfo("Keeper of the Mind", 36, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheMind.class)); - cards.add(new SetCardInfo("Killer Whale", 37, Rarity.UNCOMMON, mage.cards.k.KillerWhale.class)); - cards.add(new SetCardInfo("Kor Chant", 9, Rarity.COMMON, mage.cards.k.KorChant.class)); - cards.add(new SetCardInfo("Limited Resources", 10, Rarity.RARE, mage.cards.l.LimitedResources.class)); - cards.add(new SetCardInfo("Mage il-Vec", 86, Rarity.COMMON, mage.cards.m.MageIlVec.class)); - cards.add(new SetCardInfo("Manabond", 113, Rarity.RARE, mage.cards.m.Manabond.class)); - cards.add(new SetCardInfo("Mana Breach", 38, Rarity.UNCOMMON, mage.cards.m.ManaBreach.class)); - cards.add(new SetCardInfo("Maniacal Rage", 87, Rarity.COMMON, mage.cards.m.ManiacalRage.class)); - cards.add(new SetCardInfo("Medicine Bag", 133, Rarity.UNCOMMON, mage.cards.m.MedicineBag.class)); - cards.add(new SetCardInfo("Memory Crystal", 134, Rarity.RARE, mage.cards.m.MemoryCrystal.class)); - cards.add(new SetCardInfo("Merfolk Looter", 39, Rarity.COMMON, mage.cards.m.MerfolkLooter.class)); - cards.add(new SetCardInfo("Mind Maggots", 66, Rarity.UNCOMMON, mage.cards.m.MindMaggots.class)); - cards.add(new SetCardInfo("Mindless Automaton", 135, Rarity.RARE, mage.cards.m.MindlessAutomaton.class)); - cards.add(new SetCardInfo("Mind Over Matter", 40, Rarity.RARE, mage.cards.m.MindOverMatter.class)); - cards.add(new SetCardInfo("Mirozel", 41, Rarity.UNCOMMON, mage.cards.m.Mirozel.class)); - cards.add(new SetCardInfo("Mirri, Cat Warrior", 114, Rarity.RARE, mage.cards.m.MirriCatWarrior.class)); - cards.add(new SetCardInfo("Mogg Assassin", 88, Rarity.UNCOMMON, mage.cards.m.MoggAssassin.class)); - cards.add(new SetCardInfo("Monstrous Hound", 89, Rarity.RARE, mage.cards.m.MonstrousHound.class)); - cards.add(new SetCardInfo("Nausea", 67, Rarity.COMMON, mage.cards.n.Nausea.class)); - cards.add(new SetCardInfo("Necrologia", 68, Rarity.UNCOMMON, mage.cards.n.Necrologia.class)); - cards.add(new SetCardInfo("Null Brooch", 136, Rarity.RARE, mage.cards.n.NullBrooch.class)); - cards.add(new SetCardInfo("Oath of Druids", 115, Rarity.RARE, mage.cards.o.OathOfDruids.class)); - cards.add(new SetCardInfo("Oath of Ghouls", 69, Rarity.RARE, mage.cards.o.OathOfGhouls.class)); - cards.add(new SetCardInfo("Oath of Lieges", 11, Rarity.RARE, mage.cards.o.OathOfLieges.class)); - cards.add(new SetCardInfo("Oath of Mages", 90, Rarity.RARE, mage.cards.o.OathOfMages.class)); - cards.add(new SetCardInfo("Oath of Scholars", 42, Rarity.RARE, mage.cards.o.OathOfScholars.class)); - cards.add(new SetCardInfo("Ogre Shaman", 91, Rarity.RARE, mage.cards.o.OgreShaman.class)); - cards.add(new SetCardInfo("Onslaught", 92, Rarity.COMMON, mage.cards.o.Onslaught.class)); - cards.add(new SetCardInfo("Paladin en-Vec", 12, Rarity.RARE, mage.cards.p.PaladinEnVec.class)); - cards.add(new SetCardInfo("Pandemonium", 93, Rarity.RARE, mage.cards.p.Pandemonium.class)); - cards.add(new SetCardInfo("Paroxysm", 94, Rarity.UNCOMMON, mage.cards.p.Paroxysm.class)); - cards.add(new SetCardInfo("Peace of Mind", 13, Rarity.UNCOMMON, mage.cards.p.PeaceOfMind.class)); - cards.add(new SetCardInfo("Pegasus Stampede", 14, Rarity.UNCOMMON, mage.cards.p.PegasusStampede.class)); - cards.add(new SetCardInfo("Penance", 15, Rarity.UNCOMMON, mage.cards.p.Penance.class)); - cards.add(new SetCardInfo("Pit Spawn", 70, Rarity.RARE, mage.cards.p.PitSpawn.class)); - cards.add(new SetCardInfo("Plaguebearer", 71, Rarity.RARE, mage.cards.p.Plaguebearer.class)); - cards.add(new SetCardInfo("Plated Rootwalla", 116, Rarity.COMMON, mage.cards.p.PlatedRootwalla.class)); - cards.add(new SetCardInfo("Predatory Hunger", 117, Rarity.COMMON, mage.cards.p.PredatoryHunger.class)); - cards.add(new SetCardInfo("Price of Progress", 95, Rarity.UNCOMMON, mage.cards.p.PriceOfProgress.class)); - cards.add(new SetCardInfo("Pygmy Troll", 118, Rarity.COMMON, mage.cards.p.PygmyTroll.class)); - cards.add(new SetCardInfo("Rabid Wolverines", 119, Rarity.COMMON, mage.cards.r.RabidWolverines.class)); - cards.add(new SetCardInfo("Raging Goblin", 96, Rarity.COMMON, mage.cards.r.RagingGoblin.class)); - cards.add(new SetCardInfo("Ravenous Baboons", 97, Rarity.RARE, mage.cards.r.RavenousBaboons.class)); - cards.add(new SetCardInfo("Reaping the Rewards", 16, Rarity.COMMON, mage.cards.r.ReapingTheRewards.class)); - cards.add(new SetCardInfo("Reckless Ogre", 98, Rarity.COMMON, mage.cards.r.RecklessOgre.class)); - cards.add(new SetCardInfo("Reclaim", 120, Rarity.COMMON, mage.cards.r.Reclaim.class)); - cards.add(new SetCardInfo("Reconnaissance", 17, Rarity.UNCOMMON, mage.cards.r.Reconnaissance.class)); - cards.add(new SetCardInfo("Recurring Nightmare", 72, Rarity.RARE, mage.cards.r.RecurringNightmare.class)); - cards.add(new SetCardInfo("Resuscitate", 121, Rarity.UNCOMMON, mage.cards.r.Resuscitate.class)); - cards.add(new SetCardInfo("Robe of Mirrors", 43, Rarity.COMMON, mage.cards.r.RobeOfMirrors.class)); - cards.add(new SetCardInfo("Rootwater Alligator", 122, Rarity.COMMON, mage.cards.r.RootwaterAlligator.class)); - cards.add(new SetCardInfo("Rootwater Mystic", 44, Rarity.COMMON, mage.cards.r.RootwaterMystic.class)); - cards.add(new SetCardInfo("Sabertooth Wyvern", 99, Rarity.UNCOMMON, mage.cards.s.SabertoothWyvern.class)); - cards.add(new SetCardInfo("Scalding Salamander", 100, Rarity.UNCOMMON, mage.cards.s.ScaldingSalamander.class)); - cards.add(new SetCardInfo("Scare Tactics", 73, Rarity.COMMON, mage.cards.s.ScareTactics.class)); - cards.add(new SetCardInfo("School of Piranha", 45, Rarity.COMMON, mage.cards.s.SchoolOfPiranha.class)); - cards.add(new SetCardInfo("Scrivener", 46, Rarity.UNCOMMON, mage.cards.s.Scrivener.class)); - cards.add(new SetCardInfo("Seismic Assault", 101, Rarity.RARE, mage.cards.s.SeismicAssault.class)); - cards.add(new SetCardInfo("Shackles", 18, Rarity.COMMON, mage.cards.s.Shackles.class)); - cards.add(new SetCardInfo("Shattering Pulse", 102, Rarity.COMMON, mage.cards.s.ShatteringPulse.class)); - cards.add(new SetCardInfo("Shield Mate", 19, Rarity.COMMON, mage.cards.s.ShieldMate.class)); - cards.add(new SetCardInfo("Skyshaper", 137, Rarity.UNCOMMON, mage.cards.s.Skyshaper.class)); - cards.add(new SetCardInfo("Skyshroud Elite", 123, Rarity.UNCOMMON, mage.cards.s.SkyshroudElite.class)); - cards.add(new SetCardInfo("Skyshroud War Beast", 124, Rarity.RARE, mage.cards.s.SkyshroudWarBeast.class)); - cards.add(new SetCardInfo("Slaughter", 74, Rarity.UNCOMMON, mage.cards.s.Slaughter.class)); - cards.add(new SetCardInfo("Soltari Visionary", 20, Rarity.COMMON, mage.cards.s.SoltariVisionary.class)); - cards.add(new SetCardInfo("Song of Serenity", 125, Rarity.UNCOMMON, mage.cards.s.SongOfSerenity.class)); - cards.add(new SetCardInfo("Sonic Burst", 103, Rarity.COMMON, mage.cards.s.SonicBurst.class)); - cards.add(new SetCardInfo("Soul Warden", 21, Rarity.COMMON, mage.cards.s.SoulWarden.class)); - cards.add(new SetCardInfo("Spellbook", 138, Rarity.UNCOMMON, mage.cards.s.Spellbook.class)); - cards.add(new SetCardInfo("Spellshock", 104, Rarity.UNCOMMON, mage.cards.s.Spellshock.class)); - cards.add(new SetCardInfo("Sphere of Resistance", 139, Rarity.RARE, mage.cards.s.SphereOfResistance.class)); - cards.add(new SetCardInfo("Spike Cannibal", 75, Rarity.UNCOMMON, mage.cards.s.SpikeCannibal.class)); - cards.add(new SetCardInfo("Spike Hatcher", 126, Rarity.RARE, mage.cards.s.SpikeHatcher.class)); - cards.add(new SetCardInfo("Spike Rogue", 127, Rarity.UNCOMMON, mage.cards.s.SpikeRogue.class)); - cards.add(new SetCardInfo("Spike Weaver", 128, Rarity.RARE, mage.cards.s.SpikeWeaver.class)); - cards.add(new SetCardInfo("Standing Troops", 22, Rarity.COMMON, mage.cards.s.StandingTroops.class)); - cards.add(new SetCardInfo("Survival of the Fittest", 129, Rarity.RARE, mage.cards.s.SurvivalOfTheFittest.class)); - cards.add(new SetCardInfo("Thalakos Drifters", 47, Rarity.RARE, mage.cards.t.ThalakosDrifters.class)); - cards.add(new SetCardInfo("Thalakos Scout", 48, Rarity.COMMON, mage.cards.t.ThalakosScout.class)); - cards.add(new SetCardInfo("Theft of Dreams", 49, Rarity.COMMON, mage.cards.t.TheftOfDreams.class)); - cards.add(new SetCardInfo("Thopter Squadron", 140, Rarity.RARE, mage.cards.t.ThopterSquadron.class)); - cards.add(new SetCardInfo("Thrull Surgeon", 76, Rarity.COMMON, mage.cards.t.ThrullSurgeon.class)); - cards.add(new SetCardInfo("Transmogrifying Licid", 141, Rarity.UNCOMMON, mage.cards.t.TransmogrifyingLicid.class)); - cards.add(new SetCardInfo("Treasure Hunter", 23, Rarity.UNCOMMON, mage.cards.t.TreasureHunter.class)); - cards.add(new SetCardInfo("Treasure Trove", 50, Rarity.UNCOMMON, mage.cards.t.TreasureTrove.class)); - cards.add(new SetCardInfo("Vampire Hounds", 77, Rarity.COMMON, mage.cards.v.VampireHounds.class)); - cards.add(new SetCardInfo("Volrath's Dungeon", 78, Rarity.RARE, mage.cards.v.VolrathsDungeon.class)); - cards.add(new SetCardInfo("Wall of Nets", 24, Rarity.RARE, mage.cards.w.WallOfNets.class)); - cards.add(new SetCardInfo("Wayward Soul", 51, Rarity.COMMON, mage.cards.w.WaywardSoul.class)); - cards.add(new SetCardInfo("Welkin Hawk", 25, Rarity.COMMON, mage.cards.w.WelkinHawk.class)); - cards.add(new SetCardInfo("Whiptongue Frog", 52, Rarity.COMMON, mage.cards.w.WhiptongueFrog.class)); - cards.add(new SetCardInfo("Wood Elves", 130, Rarity.COMMON, mage.cards.w.WoodElves.class)); - cards.add(new SetCardInfo("Workhorse", 142, Rarity.RARE, mage.cards.w.Workhorse.class)); - cards.add(new SetCardInfo("Zealots en-Dal", 26, Rarity.UNCOMMON, mage.cards.z.ZealotsEnDal.class)); - } -} + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author North + */ +public final class Exodus extends ExpansionSet { + + private static final Exodus instance = new Exodus(); + + public static Exodus getInstance() { + return instance; + } + + private Exodus() { + super("Exodus", "EXO", ExpansionSet.buildDate(1998, 6, 15), SetType.EXPANSION); + this.blockName = "Tempest"; + this.parentSet = Tempest.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Aether Tide", 27, Rarity.COMMON, mage.cards.a.AetherTide.class)); + cards.add(new SetCardInfo("Allay", 1, Rarity.COMMON, mage.cards.a.Allay.class)); + cards.add(new SetCardInfo("Anarchist", 79, Rarity.COMMON, mage.cards.a.Anarchist.class)); + cards.add(new SetCardInfo("Angelic Blessing", 2, Rarity.COMMON, mage.cards.a.AngelicBlessing.class)); + cards.add(new SetCardInfo("Avenging Druid", 105, Rarity.COMMON, mage.cards.a.AvengingDruid.class)); + cards.add(new SetCardInfo("Bequeathal", 106, Rarity.COMMON, mage.cards.b.Bequeathal.class)); + cards.add(new SetCardInfo("Carnophage", 53, Rarity.COMMON, mage.cards.c.Carnophage.class)); + cards.add(new SetCardInfo("Cartographer", 107, Rarity.UNCOMMON, mage.cards.c.Cartographer.class)); + cards.add(new SetCardInfo("Cataclysm", 3, Rarity.RARE, mage.cards.c.Cataclysm.class)); + cards.add(new SetCardInfo("Cat Burglar", 54, Rarity.COMMON, mage.cards.c.CatBurglar.class)); + cards.add(new SetCardInfo("Charging Paladin", 4, Rarity.COMMON, mage.cards.c.ChargingPaladin.class)); + cards.add(new SetCardInfo("Cinder Crawler", 80, Rarity.COMMON, mage.cards.c.CinderCrawler.class)); + cards.add(new SetCardInfo("City of Traitors", 143, Rarity.RARE, mage.cards.c.CityOfTraitors.class)); + cards.add(new SetCardInfo("Coat of Arms", 131, Rarity.RARE, mage.cards.c.CoatOfArms.class)); + cards.add(new SetCardInfo("Convalescence", 5, Rarity.RARE, mage.cards.c.Convalescence.class)); + cards.add(new SetCardInfo("Crashing Boars", 108, Rarity.UNCOMMON, mage.cards.c.CrashingBoars.class)); + cards.add(new SetCardInfo("Culling the Weak", 55, Rarity.COMMON, mage.cards.c.CullingTheWeak.class)); + cards.add(new SetCardInfo("Cunning", 28, Rarity.COMMON, mage.cards.c.Cunning.class)); + cards.add(new SetCardInfo("Curiosity", 29, Rarity.UNCOMMON, mage.cards.c.Curiosity.class)); + cards.add(new SetCardInfo("Cursed Flesh", 56, Rarity.COMMON, mage.cards.c.CursedFlesh.class)); + cards.add(new SetCardInfo("Dauthi Cutthroat", 57, Rarity.UNCOMMON, mage.cards.d.DauthiCutthroat.class)); + cards.add(new SetCardInfo("Dauthi Jackal", 58, Rarity.COMMON, mage.cards.d.DauthiJackal.class)); + cards.add(new SetCardInfo("Dauthi Warlord", 59, Rarity.UNCOMMON, mage.cards.d.DauthiWarlord.class)); + cards.add(new SetCardInfo("Death's Duet", 60, Rarity.COMMON, mage.cards.d.DeathsDuet.class)); + cards.add(new SetCardInfo("Dizzying Gaze", 81, Rarity.COMMON, mage.cards.d.DizzyingGaze.class)); + cards.add(new SetCardInfo("Dominating Licid", 30, Rarity.RARE, mage.cards.d.DominatingLicid.class)); + cards.add(new SetCardInfo("Elven Palisade", 109, Rarity.UNCOMMON, mage.cards.e.ElvenPalisade.class)); + cards.add(new SetCardInfo("Elvish Berserker", 110, Rarity.COMMON, mage.cards.e.ElvishBerserker.class)); + cards.add(new SetCardInfo("Entropic Specter", 61, Rarity.RARE, mage.cards.e.EntropicSpecter.class)); + cards.add(new SetCardInfo("Ephemeron", 31, Rarity.RARE, mage.cards.e.Ephemeron.class)); + cards.add(new SetCardInfo("Equilibrium", 32, Rarity.RARE, mage.cards.e.Equilibrium.class)); + cards.add(new SetCardInfo("Erratic Portal", 132, Rarity.RARE, mage.cards.e.ErraticPortal.class)); + cards.add(new SetCardInfo("Ertai, Wizard Adept", 33, Rarity.RARE, mage.cards.e.ErtaiWizardAdept.class)); + cards.add(new SetCardInfo("Exalted Dragon", 6, Rarity.RARE, mage.cards.e.ExaltedDragon.class)); + cards.add(new SetCardInfo("Fade Away", 34, Rarity.COMMON, mage.cards.f.FadeAway.class)); + cards.add(new SetCardInfo("Fighting Chance", 82, Rarity.RARE, mage.cards.f.FightingChance.class)); + cards.add(new SetCardInfo("Flowstone Flood", 83, Rarity.UNCOMMON, mage.cards.f.FlowstoneFlood.class)); + cards.add(new SetCardInfo("Forbid", 35, Rarity.UNCOMMON, mage.cards.f.Forbid.class)); + cards.add(new SetCardInfo("Fugue", 62, Rarity.UNCOMMON, mage.cards.f.Fugue.class)); + cards.add(new SetCardInfo("Furnace Brood", 84, Rarity.COMMON, mage.cards.f.FurnaceBrood.class)); + cards.add(new SetCardInfo("Grollub", 63, Rarity.COMMON, mage.cards.g.Grollub.class)); + cards.add(new SetCardInfo("Hatred", 64, Rarity.RARE, mage.cards.h.Hatred.class)); + cards.add(new SetCardInfo("High Ground", 7, Rarity.UNCOMMON, mage.cards.h.HighGround.class)); + cards.add(new SetCardInfo("Jackalope Herd", 111, Rarity.COMMON, mage.cards.j.JackalopeHerd.class)); + cards.add(new SetCardInfo("Keeper of the Beasts", 112, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheBeasts.class)); + cards.add(new SetCardInfo("Keeper of the Dead", 65, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheDead.class)); + cards.add(new SetCardInfo("Keeper of the Flame", 85, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheFlame.class)); + cards.add(new SetCardInfo("Keeper of the Light", 8, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheLight.class)); + cards.add(new SetCardInfo("Keeper of the Mind", 36, Rarity.UNCOMMON, mage.cards.k.KeeperOfTheMind.class)); + cards.add(new SetCardInfo("Killer Whale", 37, Rarity.UNCOMMON, mage.cards.k.KillerWhale.class)); + cards.add(new SetCardInfo("Kor Chant", 9, Rarity.COMMON, mage.cards.k.KorChant.class)); + cards.add(new SetCardInfo("Limited Resources", 10, Rarity.RARE, mage.cards.l.LimitedResources.class)); + cards.add(new SetCardInfo("Mage il-Vec", 86, Rarity.COMMON, mage.cards.m.MageIlVec.class)); + cards.add(new SetCardInfo("Manabond", 113, Rarity.RARE, mage.cards.m.Manabond.class)); + cards.add(new SetCardInfo("Mana Breach", 38, Rarity.UNCOMMON, mage.cards.m.ManaBreach.class)); + cards.add(new SetCardInfo("Maniacal Rage", 87, Rarity.COMMON, mage.cards.m.ManiacalRage.class)); + cards.add(new SetCardInfo("Medicine Bag", 133, Rarity.UNCOMMON, mage.cards.m.MedicineBag.class)); + cards.add(new SetCardInfo("Memory Crystal", 134, Rarity.RARE, mage.cards.m.MemoryCrystal.class)); + cards.add(new SetCardInfo("Merfolk Looter", 39, Rarity.COMMON, mage.cards.m.MerfolkLooter.class)); + cards.add(new SetCardInfo("Mind Maggots", 66, Rarity.UNCOMMON, mage.cards.m.MindMaggots.class)); + cards.add(new SetCardInfo("Mindless Automaton", 135, Rarity.RARE, mage.cards.m.MindlessAutomaton.class)); + cards.add(new SetCardInfo("Mind Over Matter", 40, Rarity.RARE, mage.cards.m.MindOverMatter.class)); + cards.add(new SetCardInfo("Mirozel", 41, Rarity.UNCOMMON, mage.cards.m.Mirozel.class)); + cards.add(new SetCardInfo("Mirri, Cat Warrior", 114, Rarity.RARE, mage.cards.m.MirriCatWarrior.class)); + cards.add(new SetCardInfo("Mogg Assassin", 88, Rarity.UNCOMMON, mage.cards.m.MoggAssassin.class)); + cards.add(new SetCardInfo("Monstrous Hound", 89, Rarity.RARE, mage.cards.m.MonstrousHound.class)); + cards.add(new SetCardInfo("Nausea", 67, Rarity.COMMON, mage.cards.n.Nausea.class)); + cards.add(new SetCardInfo("Necrologia", 68, Rarity.UNCOMMON, mage.cards.n.Necrologia.class)); + cards.add(new SetCardInfo("Null Brooch", 136, Rarity.RARE, mage.cards.n.NullBrooch.class)); + cards.add(new SetCardInfo("Oath of Druids", 115, Rarity.RARE, mage.cards.o.OathOfDruids.class)); + cards.add(new SetCardInfo("Oath of Ghouls", 69, Rarity.RARE, mage.cards.o.OathOfGhouls.class)); + cards.add(new SetCardInfo("Oath of Lieges", 11, Rarity.RARE, mage.cards.o.OathOfLieges.class)); + cards.add(new SetCardInfo("Oath of Mages", 90, Rarity.RARE, mage.cards.o.OathOfMages.class)); + cards.add(new SetCardInfo("Oath of Scholars", 42, Rarity.RARE, mage.cards.o.OathOfScholars.class)); + cards.add(new SetCardInfo("Ogre Shaman", 91, Rarity.RARE, mage.cards.o.OgreShaman.class)); + cards.add(new SetCardInfo("Onslaught", 92, Rarity.COMMON, mage.cards.o.Onslaught.class)); + cards.add(new SetCardInfo("Paladin en-Vec", 12, Rarity.RARE, mage.cards.p.PaladinEnVec.class)); + cards.add(new SetCardInfo("Pandemonium", 93, Rarity.RARE, mage.cards.p.Pandemonium.class)); + cards.add(new SetCardInfo("Paroxysm", 94, Rarity.UNCOMMON, mage.cards.p.Paroxysm.class)); + cards.add(new SetCardInfo("Peace of Mind", 13, Rarity.UNCOMMON, mage.cards.p.PeaceOfMind.class)); + cards.add(new SetCardInfo("Pegasus Stampede", 14, Rarity.UNCOMMON, mage.cards.p.PegasusStampede.class)); + cards.add(new SetCardInfo("Penance", 15, Rarity.UNCOMMON, mage.cards.p.Penance.class)); + cards.add(new SetCardInfo("Pit Spawn", 70, Rarity.RARE, mage.cards.p.PitSpawn.class)); + cards.add(new SetCardInfo("Plaguebearer", 71, Rarity.RARE, mage.cards.p.Plaguebearer.class)); + cards.add(new SetCardInfo("Plated Rootwalla", 116, Rarity.COMMON, mage.cards.p.PlatedRootwalla.class)); + cards.add(new SetCardInfo("Predatory Hunger", 117, Rarity.COMMON, mage.cards.p.PredatoryHunger.class)); + cards.add(new SetCardInfo("Price of Progress", 95, Rarity.UNCOMMON, mage.cards.p.PriceOfProgress.class)); + cards.add(new SetCardInfo("Pygmy Troll", 118, Rarity.COMMON, mage.cards.p.PygmyTroll.class)); + cards.add(new SetCardInfo("Rabid Wolverines", 119, Rarity.COMMON, mage.cards.r.RabidWolverines.class)); + cards.add(new SetCardInfo("Raging Goblin", 96, Rarity.COMMON, mage.cards.r.RagingGoblin.class)); + cards.add(new SetCardInfo("Ravenous Baboons", 97, Rarity.RARE, mage.cards.r.RavenousBaboons.class)); + cards.add(new SetCardInfo("Reaping the Rewards", 16, Rarity.COMMON, mage.cards.r.ReapingTheRewards.class)); + cards.add(new SetCardInfo("Reckless Ogre", 98, Rarity.COMMON, mage.cards.r.RecklessOgre.class)); + cards.add(new SetCardInfo("Reclaim", 120, Rarity.COMMON, mage.cards.r.Reclaim.class)); + cards.add(new SetCardInfo("Reconnaissance", 17, Rarity.UNCOMMON, mage.cards.r.Reconnaissance.class)); + cards.add(new SetCardInfo("Recurring Nightmare", 72, Rarity.RARE, mage.cards.r.RecurringNightmare.class)); + cards.add(new SetCardInfo("Resuscitate", 121, Rarity.UNCOMMON, mage.cards.r.Resuscitate.class)); + cards.add(new SetCardInfo("Robe of Mirrors", 43, Rarity.COMMON, mage.cards.r.RobeOfMirrors.class)); + cards.add(new SetCardInfo("Rootwater Alligator", 122, Rarity.COMMON, mage.cards.r.RootwaterAlligator.class)); + cards.add(new SetCardInfo("Rootwater Mystic", 44, Rarity.COMMON, mage.cards.r.RootwaterMystic.class)); + cards.add(new SetCardInfo("Sabertooth Wyvern", 99, Rarity.UNCOMMON, mage.cards.s.SabertoothWyvern.class)); + cards.add(new SetCardInfo("Scalding Salamander", 100, Rarity.UNCOMMON, mage.cards.s.ScaldingSalamander.class)); + cards.add(new SetCardInfo("Scare Tactics", 73, Rarity.COMMON, mage.cards.s.ScareTactics.class)); + cards.add(new SetCardInfo("School of Piranha", 45, Rarity.COMMON, mage.cards.s.SchoolOfPiranha.class)); + cards.add(new SetCardInfo("Scrivener", 46, Rarity.UNCOMMON, mage.cards.s.Scrivener.class)); + cards.add(new SetCardInfo("Seismic Assault", 101, Rarity.RARE, mage.cards.s.SeismicAssault.class)); + cards.add(new SetCardInfo("Shackles", 18, Rarity.COMMON, mage.cards.s.Shackles.class)); + cards.add(new SetCardInfo("Shattering Pulse", 102, Rarity.COMMON, mage.cards.s.ShatteringPulse.class)); + cards.add(new SetCardInfo("Shield Mate", 19, Rarity.COMMON, mage.cards.s.ShieldMate.class)); + cards.add(new SetCardInfo("Skyshaper", 137, Rarity.UNCOMMON, mage.cards.s.Skyshaper.class)); + cards.add(new SetCardInfo("Skyshroud Elite", 123, Rarity.UNCOMMON, mage.cards.s.SkyshroudElite.class)); + cards.add(new SetCardInfo("Skyshroud War Beast", 124, Rarity.RARE, mage.cards.s.SkyshroudWarBeast.class)); + cards.add(new SetCardInfo("Slaughter", 74, Rarity.UNCOMMON, mage.cards.s.Slaughter.class)); + cards.add(new SetCardInfo("Soltari Visionary", 20, Rarity.COMMON, mage.cards.s.SoltariVisionary.class)); + cards.add(new SetCardInfo("Song of Serenity", 125, Rarity.UNCOMMON, mage.cards.s.SongOfSerenity.class)); + cards.add(new SetCardInfo("Sonic Burst", 103, Rarity.COMMON, mage.cards.s.SonicBurst.class)); + cards.add(new SetCardInfo("Soul Warden", 21, Rarity.COMMON, mage.cards.s.SoulWarden.class)); + cards.add(new SetCardInfo("Spellbook", 138, Rarity.UNCOMMON, mage.cards.s.Spellbook.class)); + cards.add(new SetCardInfo("Spellshock", 104, Rarity.UNCOMMON, mage.cards.s.Spellshock.class)); + cards.add(new SetCardInfo("Sphere of Resistance", 139, Rarity.RARE, mage.cards.s.SphereOfResistance.class)); + cards.add(new SetCardInfo("Spike Cannibal", 75, Rarity.UNCOMMON, mage.cards.s.SpikeCannibal.class)); + cards.add(new SetCardInfo("Spike Hatcher", 126, Rarity.RARE, mage.cards.s.SpikeHatcher.class)); + cards.add(new SetCardInfo("Spike Rogue", 127, Rarity.UNCOMMON, mage.cards.s.SpikeRogue.class)); + cards.add(new SetCardInfo("Spike Weaver", 128, Rarity.RARE, mage.cards.s.SpikeWeaver.class)); + cards.add(new SetCardInfo("Standing Troops", 22, Rarity.COMMON, mage.cards.s.StandingTroops.class)); + cards.add(new SetCardInfo("Survival of the Fittest", 129, Rarity.RARE, mage.cards.s.SurvivalOfTheFittest.class)); + cards.add(new SetCardInfo("Thalakos Drifters", 47, Rarity.RARE, mage.cards.t.ThalakosDrifters.class)); + cards.add(new SetCardInfo("Thalakos Scout", 48, Rarity.COMMON, mage.cards.t.ThalakosScout.class)); + cards.add(new SetCardInfo("Theft of Dreams", 49, Rarity.COMMON, mage.cards.t.TheftOfDreams.class)); + cards.add(new SetCardInfo("Thopter Squadron", 140, Rarity.RARE, mage.cards.t.ThopterSquadron.class)); + cards.add(new SetCardInfo("Thrull Surgeon", 76, Rarity.COMMON, mage.cards.t.ThrullSurgeon.class)); + cards.add(new SetCardInfo("Transmogrifying Licid", 141, Rarity.UNCOMMON, mage.cards.t.TransmogrifyingLicid.class)); + cards.add(new SetCardInfo("Treasure Hunter", 23, Rarity.UNCOMMON, mage.cards.t.TreasureHunter.class)); + cards.add(new SetCardInfo("Treasure Trove", 50, Rarity.UNCOMMON, mage.cards.t.TreasureTrove.class)); + cards.add(new SetCardInfo("Vampire Hounds", 77, Rarity.COMMON, mage.cards.v.VampireHounds.class)); + cards.add(new SetCardInfo("Volrath's Dungeon", 78, Rarity.RARE, mage.cards.v.VolrathsDungeon.class)); + cards.add(new SetCardInfo("Wall of Nets", 24, Rarity.RARE, mage.cards.w.WallOfNets.class)); + cards.add(new SetCardInfo("Wayward Soul", 51, Rarity.COMMON, mage.cards.w.WaywardSoul.class)); + cards.add(new SetCardInfo("Welkin Hawk", 25, Rarity.COMMON, mage.cards.w.WelkinHawk.class)); + cards.add(new SetCardInfo("Whiptongue Frog", 52, Rarity.COMMON, mage.cards.w.WhiptongueFrog.class)); + cards.add(new SetCardInfo("Wood Elves", 130, Rarity.COMMON, mage.cards.w.WoodElves.class)); + cards.add(new SetCardInfo("Workhorse", 142, Rarity.RARE, mage.cards.w.Workhorse.class)); + cards.add(new SetCardInfo("Zealots en-Dal", 26, Rarity.UNCOMMON, mage.cards.z.ZealotsEnDal.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/FifthEdition.java b/Mage.Sets/src/mage/sets/FifthEdition.java index 5c5fb5f6dfb..781bd4c2591 100644 --- a/Mage.Sets/src/mage/sets/FifthEdition.java +++ b/Mage.Sets/src/mage/sets/FifthEdition.java @@ -1,468 +1,468 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -public final class FifthEdition extends ExpansionSet { - - private static final FifthEdition instance = new FifthEdition(); - - public static FifthEdition getInstance() { - return instance; - } - - private FifthEdition() { - super("Fifth Edition", "5ED", ExpansionSet.buildDate(1997, 3, 1), SetType.CORE); - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Abbey Gargoyles", 1, Rarity.UNCOMMON, mage.cards.a.AbbeyGargoyles.class)); - cards.add(new SetCardInfo("Abyssal Specter", 139, Rarity.UNCOMMON, mage.cards.a.AbyssalSpecter.class)); - cards.add(new SetCardInfo("Adarkar Wastes", 410, Rarity.RARE, mage.cards.a.AdarkarWastes.class)); - cards.add(new SetCardInfo("Aether Storm", 70, Rarity.UNCOMMON, mage.cards.a.AetherStorm.class)); - cards.add(new SetCardInfo("Air Elemental", 71, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); - cards.add(new SetCardInfo("Akron Legionnaire", 2, Rarity.RARE, mage.cards.a.AkronLegionnaire.class)); - cards.add(new SetCardInfo("Alabaster Potion", 3, Rarity.COMMON, mage.cards.a.AlabasterPotion.class)); - cards.add(new SetCardInfo("Aladdin's Ring", 346, Rarity.RARE, mage.cards.a.AladdinsRing.class)); - cards.add(new SetCardInfo("Ambush Party", 208, Rarity.COMMON, mage.cards.a.AmbushParty.class)); - cards.add(new SetCardInfo("Amulet of Kroog", 347, Rarity.COMMON, mage.cards.a.AmuletOfKroog.class)); - cards.add(new SetCardInfo("An-Havva Constable", 277, Rarity.RARE, mage.cards.a.AnHavvaConstable.class)); - cards.add(new SetCardInfo("Angry Mob", 4, Rarity.UNCOMMON, mage.cards.a.AngryMob.class)); - cards.add(new SetCardInfo("Animate Dead", 140, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); - cards.add(new SetCardInfo("Animate Wall", 5, Rarity.RARE, mage.cards.a.AnimateWall.class)); - cards.add(new SetCardInfo("Ankh of Mishra", 348, Rarity.RARE, mage.cards.a.AnkhOfMishra.class)); - cards.add(new SetCardInfo("Anti-Magic Aura", 72, Rarity.UNCOMMON, mage.cards.a.AntiMagicAura.class)); - cards.add(new SetCardInfo("Arenson's Aura", 6, Rarity.UNCOMMON, mage.cards.a.ArensonsAura.class)); - cards.add(new SetCardInfo("Armageddon", 7, Rarity.RARE, mage.cards.a.Armageddon.class)); - cards.add(new SetCardInfo("Armor of Faith", 8, Rarity.COMMON, mage.cards.a.ArmorOfFaith.class)); - cards.add(new SetCardInfo("Ashes to Ashes", 141, Rarity.UNCOMMON, mage.cards.a.AshesToAshes.class)); - cards.add(new SetCardInfo("Ashnod's Altar", 349, Rarity.UNCOMMON, mage.cards.a.AshnodsAltar.class)); - cards.add(new SetCardInfo("Ashnod's Transmogrant", 350, Rarity.COMMON, mage.cards.a.AshnodsTransmogrant.class)); - cards.add(new SetCardInfo("Aspect of Wolf", 278, Rarity.RARE, mage.cards.a.AspectOfWolf.class)); - cards.add(new SetCardInfo("Atog", 209, Rarity.UNCOMMON, mage.cards.a.Atog.class)); - cards.add(new SetCardInfo("Aurochs", 279, Rarity.COMMON, mage.cards.a.Aurochs.class)); - cards.add(new SetCardInfo("Aysen Bureaucrats", 9, Rarity.COMMON, mage.cards.a.AysenBureaucrats.class)); - cards.add(new SetCardInfo("Azure Drake", 73, Rarity.UNCOMMON, mage.cards.a.AzureDrake.class)); - cards.add(new SetCardInfo("Bad Moon", 142, Rarity.RARE, mage.cards.b.BadMoon.class)); - cards.add(new SetCardInfo("Ball Lightning", 210, Rarity.RARE, mage.cards.b.BallLightning.class)); - cards.add(new SetCardInfo("Barbed Sextant", 351, Rarity.COMMON, mage.cards.b.BarbedSextant.class)); - cards.add(new SetCardInfo("Barl's Cage", 352, Rarity.RARE, mage.cards.b.BarlsCage.class)); - cards.add(new SetCardInfo("Battering Ram", 353, Rarity.COMMON, mage.cards.b.BatteringRam.class)); - cards.add(new SetCardInfo("Benalish Hero", 10, Rarity.COMMON, mage.cards.b.BenalishHero.class)); - cards.add(new SetCardInfo("Binding Grasp", 74, Rarity.UNCOMMON, mage.cards.b.BindingGrasp.class)); - cards.add(new SetCardInfo("Bird Maiden", 211, Rarity.COMMON, mage.cards.b.BirdMaiden.class)); - cards.add(new SetCardInfo("Birds of Paradise", 280, Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); - cards.add(new SetCardInfo("Black Knight", 143, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); - cards.add(new SetCardInfo("Blessed Wine", 11, Rarity.COMMON, mage.cards.b.BlessedWine.class)); - cards.add(new SetCardInfo("Blight", 144, Rarity.UNCOMMON, mage.cards.b.Blight.class)); - cards.add(new SetCardInfo("Blinking Spirit", 12, Rarity.RARE, mage.cards.b.BlinkingSpirit.class)); - cards.add(new SetCardInfo("Blood Lust", 212, Rarity.COMMON, mage.cards.b.BloodLust.class)); - cards.add(new SetCardInfo("Bog Imp", 145, Rarity.COMMON, mage.cards.b.BogImp.class)); - cards.add(new SetCardInfo("Bog Rats", 146, Rarity.COMMON, mage.cards.b.BogRats.class)); - cards.add(new SetCardInfo("Bog Wraith", 147, Rarity.UNCOMMON, mage.cards.b.BogWraith.class)); - cards.add(new SetCardInfo("Boomerang", 75, Rarity.COMMON, mage.cards.b.Boomerang.class)); - cards.add(new SetCardInfo("Bottle of Suleiman", 354, Rarity.RARE, mage.cards.b.BottleOfSuleiman.class)); - cards.add(new SetCardInfo("Bottomless Vault", 411, Rarity.RARE, mage.cards.b.BottomlessVault.class)); - cards.add(new SetCardInfo("Brainstorm", 76, Rarity.COMMON, mage.cards.b.Brainstorm.class)); - cards.add(new SetCardInfo("Brainwash", 13, Rarity.COMMON, mage.cards.b.Brainwash.class)); - cards.add(new SetCardInfo("Brassclaw Orcs", 213, Rarity.COMMON, mage.cards.b.BrassclawOrcs.class)); - cards.add(new SetCardInfo("Breeding Pit", 148, Rarity.UNCOMMON, mage.cards.b.BreedingPit.class)); - cards.add(new SetCardInfo("Broken Visage", 149, Rarity.RARE, mage.cards.b.BrokenVisage.class)); - cards.add(new SetCardInfo("Brothers of Fire", 214, Rarity.COMMON, mage.cards.b.BrothersOfFire.class)); - cards.add(new SetCardInfo("Brushland", 412, Rarity.RARE, mage.cards.b.Brushland.class)); - cards.add(new SetCardInfo("Carapace", 281, Rarity.COMMON, mage.cards.c.Carapace.class)); - cards.add(new SetCardInfo("Caribou Range", 14, Rarity.RARE, mage.cards.c.CaribouRange.class)); - cards.add(new SetCardInfo("Carrion Ants", 150, Rarity.UNCOMMON, mage.cards.c.CarrionAnts.class)); - cards.add(new SetCardInfo("Castle", 15, Rarity.UNCOMMON, mage.cards.c.Castle.class)); - cards.add(new SetCardInfo("Cat Warriors", 282, Rarity.COMMON, mage.cards.c.CatWarriors.class)); - cards.add(new SetCardInfo("Cave People", 215, Rarity.UNCOMMON, mage.cards.c.CavePeople.class)); - cards.add(new SetCardInfo("Chub Toad", 283, Rarity.COMMON, mage.cards.c.ChubToad.class)); - cards.add(new SetCardInfo("Circle of Protection: Artifacts", 16, Rarity.UNCOMMON, mage.cards.c.CircleOfProtectionArtifacts.class)); - cards.add(new SetCardInfo("Circle of Protection: Black", 17, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); - cards.add(new SetCardInfo("Circle of Protection: Blue", 18, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlue.class)); - cards.add(new SetCardInfo("Circle of Protection: Green", 19, Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class)); - cards.add(new SetCardInfo("Circle of Protection: Red", 20, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); - cards.add(new SetCardInfo("Circle of Protection: White", 21, Rarity.COMMON, mage.cards.c.CircleOfProtectionWhite.class)); - cards.add(new SetCardInfo("City of Brass", 413, Rarity.RARE, mage.cards.c.CityOfBrass.class)); - cards.add(new SetCardInfo("Clay Statue", 355, Rarity.COMMON, mage.cards.c.ClayStatue.class)); - cards.add(new SetCardInfo("Cloak of Confusion", 151, Rarity.COMMON, mage.cards.c.CloakOfConfusion.class)); - cards.add(new SetCardInfo("Clockwork Beast", 356, Rarity.RARE, mage.cards.c.ClockworkBeast.class)); - cards.add(new SetCardInfo("Clockwork Steed", 357, Rarity.UNCOMMON, mage.cards.c.ClockworkSteed.class)); - cards.add(new SetCardInfo("Cockatrice", 284, Rarity.RARE, mage.cards.c.Cockatrice.class)); - cards.add(new SetCardInfo("Colossus of Sardia", 358, Rarity.RARE, mage.cards.c.ColossusOfSardia.class)); - cards.add(new SetCardInfo("Conquer", 216, Rarity.UNCOMMON, mage.cards.c.Conquer.class)); - cards.add(new SetCardInfo("Coral Helm", 359, Rarity.RARE, mage.cards.c.CoralHelm.class)); - cards.add(new SetCardInfo("Counterspell", 77, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Craw Giant", 285, Rarity.UNCOMMON, mage.cards.c.CrawGiant.class)); - cards.add(new SetCardInfo("Craw Wurm", 286, Rarity.COMMON, mage.cards.c.CrawWurm.class)); - cards.add(new SetCardInfo("Crimson Manticore", 217, Rarity.RARE, mage.cards.c.CrimsonManticore.class)); - cards.add(new SetCardInfo("Crown of the Ages", 360, Rarity.RARE, mage.cards.c.CrownOfTheAges.class)); - cards.add(new SetCardInfo("Crumble", 287, Rarity.UNCOMMON, mage.cards.c.Crumble.class)); - cards.add(new SetCardInfo("Crusade", 22, Rarity.RARE, mage.cards.c.Crusade.class)); - cards.add(new SetCardInfo("Crystal Rod", 361, Rarity.UNCOMMON, mage.cards.c.CrystalRod.class)); - cards.add(new SetCardInfo("Cursed Land", 152, Rarity.UNCOMMON, mage.cards.c.CursedLand.class)); - cards.add(new SetCardInfo("D'Avenant Archer", 23, Rarity.COMMON, mage.cards.d.DAvenantArcher.class)); - cards.add(new SetCardInfo("Dance of Many", 78, Rarity.RARE, mage.cards.d.DanceOfMany.class)); - cards.add(new SetCardInfo("Dancing Scimitar", 362, Rarity.RARE, mage.cards.d.DancingScimitar.class)); - cards.add(new SetCardInfo("Dandan", 79, Rarity.COMMON, mage.cards.d.Dandan.class)); - cards.add(new SetCardInfo("Dark Maze", 80, Rarity.COMMON, mage.cards.d.DarkMaze.class)); - cards.add(new SetCardInfo("Dark Ritual", 153, Rarity.COMMON, mage.cards.d.DarkRitual.class)); - cards.add(new SetCardInfo("Death Speakers", 24, Rarity.COMMON, mage.cards.d.DeathSpeakers.class)); - cards.add(new SetCardInfo("Death Ward", 25, Rarity.COMMON, mage.cards.d.DeathWard.class)); - cards.add(new SetCardInfo("Deathgrip", 154, Rarity.UNCOMMON, mage.cards.d.Deathgrip.class)); - cards.add(new SetCardInfo("Deflection", 81, Rarity.RARE, mage.cards.d.Deflection.class)); - cards.add(new SetCardInfo("Derelor", 155, Rarity.RARE, mage.cards.d.Derelor.class)); - cards.add(new SetCardInfo("Desert Twister", 288, Rarity.UNCOMMON, mage.cards.d.DesertTwister.class)); - cards.add(new SetCardInfo("Detonate", 218, Rarity.UNCOMMON, mage.cards.d.Detonate.class)); - cards.add(new SetCardInfo("Diabolic Machine", 363, Rarity.UNCOMMON, mage.cards.d.DiabolicMachine.class)); - cards.add(new SetCardInfo("Dingus Egg", 364, Rarity.RARE, mage.cards.d.DingusEgg.class)); - cards.add(new SetCardInfo("Disenchant", 26, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Disintegrate", 219, Rarity.COMMON, mage.cards.d.Disintegrate.class)); - cards.add(new SetCardInfo("Disrupting Scepter", 365, Rarity.RARE, mage.cards.d.DisruptingScepter.class)); - cards.add(new SetCardInfo("Divine Offering", 27, Rarity.COMMON, mage.cards.d.DivineOffering.class)); - cards.add(new SetCardInfo("Divine Transformation", 28, Rarity.UNCOMMON, mage.cards.d.DivineTransformation.class)); - cards.add(new SetCardInfo("Dragon Engine", 366, Rarity.RARE, mage.cards.d.DragonEngine.class)); - cards.add(new SetCardInfo("Drain Life", 156, Rarity.COMMON, mage.cards.d.DrainLife.class)); - cards.add(new SetCardInfo("Drain Power", 82, Rarity.RARE, mage.cards.d.DrainPower.class)); - cards.add(new SetCardInfo("Drudge Skeletons", 157, Rarity.COMMON, mage.cards.d.DrudgeSkeletons.class)); - cards.add(new SetCardInfo("Durkwood Boars", 289, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); - cards.add(new SetCardInfo("Dust to Dust", 29, Rarity.UNCOMMON, mage.cards.d.DustToDust.class)); - cards.add(new SetCardInfo("Dwarven Catapult", 220, Rarity.UNCOMMON, mage.cards.d.DwarvenCatapult.class)); - cards.add(new SetCardInfo("Dwarven Hold", 414, Rarity.RARE, mage.cards.d.DwarvenHold.class)); - cards.add(new SetCardInfo("Dwarven Ruins", 415, Rarity.UNCOMMON, mage.cards.d.DwarvenRuins.class)); - cards.add(new SetCardInfo("Dwarven Soldier", 221, Rarity.COMMON, mage.cards.d.DwarvenSoldier.class)); - cards.add(new SetCardInfo("Dwarven Warriors", 222, Rarity.COMMON, mage.cards.d.DwarvenWarriors.class)); - cards.add(new SetCardInfo("Earthquake", 223, Rarity.RARE, mage.cards.e.Earthquake.class)); - cards.add(new SetCardInfo("Ebon Stronghold", 416, Rarity.UNCOMMON, mage.cards.e.EbonStronghold.class)); - cards.add(new SetCardInfo("Elder Druid", 290, Rarity.RARE, mage.cards.e.ElderDruid.class)); - cards.add(new SetCardInfo("Elkin Bottle", 367, Rarity.RARE, mage.cards.e.ElkinBottle.class)); - cards.add(new SetCardInfo("Elven Riders", 291, Rarity.UNCOMMON, mage.cards.e.ElvenRiders.class)); - cards.add(new SetCardInfo("Elvish Archers", 292, Rarity.RARE, mage.cards.e.ElvishArchers.class)); - cards.add(new SetCardInfo("Energy Flux", 83, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); - cards.add(new SetCardInfo("Enervate", 84, Rarity.COMMON, mage.cards.e.Enervate.class)); - cards.add(new SetCardInfo("Erg Raiders", 158, Rarity.COMMON, mage.cards.e.ErgRaiders.class)); - cards.add(new SetCardInfo("Errantry", 224, Rarity.COMMON, mage.cards.e.Errantry.class)); - cards.add(new SetCardInfo("Eternal Warrior", 225, Rarity.COMMON, mage.cards.e.EternalWarrior.class)); - cards.add(new SetCardInfo("Evil Eye of Orms-by-Gore", 159, Rarity.UNCOMMON, mage.cards.e.EvilEyeOfOrmsByGore.class)); - cards.add(new SetCardInfo("Evil Presence", 160, Rarity.UNCOMMON, mage.cards.e.EvilPresence.class)); - cards.add(new SetCardInfo("Eye for an Eye", 30, Rarity.RARE, mage.cards.e.EyeForAnEye.class)); - cards.add(new SetCardInfo("Fallen Angel", 161, Rarity.UNCOMMON, mage.cards.f.FallenAngel.class)); - cards.add(new SetCardInfo("Fear", 162, Rarity.COMMON, mage.cards.f.Fear.class)); - cards.add(new SetCardInfo("Feedback", 85, Rarity.UNCOMMON, mage.cards.f.Feedback.class)); - cards.add(new SetCardInfo("Feldon's Cane", 368, Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class)); - cards.add(new SetCardInfo("Fellwar Stone", 369, Rarity.UNCOMMON, mage.cards.f.FellwarStone.class)); - cards.add(new SetCardInfo("Feroz's Ban", 370, Rarity.RARE, mage.cards.f.FerozsBan.class)); - cards.add(new SetCardInfo("Fire Drake", 226, Rarity.UNCOMMON, mage.cards.f.FireDrake.class)); - cards.add(new SetCardInfo("Fireball", 227, Rarity.COMMON, mage.cards.f.Fireball.class)); - cards.add(new SetCardInfo("Firebreathing", 228, Rarity.COMMON, mage.cards.f.Firebreathing.class)); - cards.add(new SetCardInfo("Flame Spirit", 229, Rarity.UNCOMMON, mage.cards.f.FlameSpirit.class)); - cards.add(new SetCardInfo("Flare", 230, Rarity.COMMON, mage.cards.f.Flare.class)); - cards.add(new SetCardInfo("Flashfires", 231, Rarity.UNCOMMON, mage.cards.f.Flashfires.class)); - cards.add(new SetCardInfo("Flight", 86, Rarity.COMMON, mage.cards.f.Flight.class)); - cards.add(new SetCardInfo("Flood", 87, Rarity.COMMON, mage.cards.f.Flood.class)); - cards.add(new SetCardInfo("Flying Carpet", 371, Rarity.RARE, mage.cards.f.FlyingCarpet.class)); - cards.add(new SetCardInfo("Fog", 293, Rarity.COMMON, mage.cards.f.Fog.class)); - cards.add(new SetCardInfo("Force of Nature", 294, Rarity.RARE, mage.cards.f.ForceOfNature.class)); - cards.add(new SetCardInfo("Force Spike", 88, Rarity.COMMON, mage.cards.f.ForceSpike.class)); - cards.add(new SetCardInfo("Forest", 446, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 447, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 448, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 449, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forget", 89, Rarity.RARE, mage.cards.f.Forget.class)); - cards.add(new SetCardInfo("Fountain of Youth", 372, Rarity.UNCOMMON, mage.cards.f.FountainOfYouth.class)); - cards.add(new SetCardInfo("Foxfire", 295, Rarity.COMMON, mage.cards.f.Foxfire.class)); - cards.add(new SetCardInfo("Frozen Shade", 163, Rarity.COMMON, mage.cards.f.FrozenShade.class)); - cards.add(new SetCardInfo("Funeral March", 164, Rarity.COMMON, mage.cards.f.FuneralMarch.class)); - cards.add(new SetCardInfo("Fungusaur", 296, Rarity.RARE, mage.cards.f.Fungusaur.class)); - cards.add(new SetCardInfo("Fyndhorn Elder", 297, Rarity.UNCOMMON, mage.cards.f.FyndhornElder.class)); - cards.add(new SetCardInfo("Game of Chaos", 232, Rarity.RARE, mage.cards.g.GameOfChaos.class)); - cards.add(new SetCardInfo("Gaseous Form", 90, Rarity.COMMON, mage.cards.g.GaseousForm.class)); - cards.add(new SetCardInfo("Gauntlets of Chaos", 373, Rarity.RARE, mage.cards.g.GauntletsOfChaos.class)); - cards.add(new SetCardInfo("Ghazban Ogre", 298, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); - cards.add(new SetCardInfo("Giant Growth", 299, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); - cards.add(new SetCardInfo("Giant Spider", 300, Rarity.COMMON, mage.cards.g.GiantSpider.class)); - cards.add(new SetCardInfo("Giant Strength", 233, Rarity.COMMON, mage.cards.g.GiantStrength.class)); - cards.add(new SetCardInfo("Glacial Wall", 91, Rarity.UNCOMMON, mage.cards.g.GlacialWall.class)); - cards.add(new SetCardInfo("Glasses of Urza", 374, Rarity.UNCOMMON, mage.cards.g.GlassesOfUrza.class)); - cards.add(new SetCardInfo("Gloom", 165, Rarity.UNCOMMON, mage.cards.g.Gloom.class)); - cards.add(new SetCardInfo("Goblin Digging Team", 234, Rarity.COMMON, mage.cards.g.GoblinDiggingTeam.class)); - cards.add(new SetCardInfo("Goblin Hero", 235, Rarity.COMMON, mage.cards.g.GoblinHero.class)); - cards.add(new SetCardInfo("Goblin King", 236, Rarity.RARE, mage.cards.g.GoblinKing.class)); - cards.add(new SetCardInfo("Goblin War Drums", 237, Rarity.COMMON, mage.cards.g.GoblinWarDrums.class)); - cards.add(new SetCardInfo("Goblin Warrens", 238, Rarity.RARE, mage.cards.g.GoblinWarrens.class)); - cards.add(new SetCardInfo("Grapeshot Catapult", 375, Rarity.COMMON, mage.cards.g.GrapeshotCatapult.class)); - cards.add(new SetCardInfo("Greater Realm of Preservation", 31, Rarity.UNCOMMON, mage.cards.g.GreaterRealmOfPreservation.class)); - cards.add(new SetCardInfo("Greater Werewolf", 166, Rarity.UNCOMMON, mage.cards.g.GreaterWerewolf.class)); - cards.add(new SetCardInfo("Grizzly Bears", 301, Rarity.COMMON, mage.cards.g.GrizzlyBears.class)); - cards.add(new SetCardInfo("Havenwood Battleground", 417, Rarity.UNCOMMON, mage.cards.h.HavenwoodBattleground.class)); - cards.add(new SetCardInfo("Heal", 32, Rarity.COMMON, mage.cards.h.Heal.class)); - cards.add(new SetCardInfo("Healing Salve", 33, Rarity.COMMON, mage.cards.h.HealingSalve.class)); - cards.add(new SetCardInfo("Hecatomb", 167, Rarity.RARE, mage.cards.h.Hecatomb.class)); - cards.add(new SetCardInfo("Helm of Chatzuk", 376, Rarity.RARE, mage.cards.h.HelmOfChatzuk.class)); - cards.add(new SetCardInfo("Hill Giant", 239, Rarity.COMMON, mage.cards.h.HillGiant.class)); - cards.add(new SetCardInfo("Hollow Trees", 418, Rarity.RARE, mage.cards.h.HollowTrees.class)); - cards.add(new SetCardInfo("Holy Strength", 35, Rarity.COMMON, mage.cards.h.HolyStrength.class)); - cards.add(new SetCardInfo("Homarid Warrior", 92, Rarity.COMMON, mage.cards.h.HomaridWarrior.class)); - cards.add(new SetCardInfo("Howl from Beyond", 168, Rarity.COMMON, mage.cards.h.HowlFromBeyond.class)); - cards.add(new SetCardInfo("Howling Mine", 377, Rarity.RARE, mage.cards.h.HowlingMine.class)); - cards.add(new SetCardInfo("Hungry Mist", 302, Rarity.COMMON, mage.cards.h.HungryMist.class)); - cards.add(new SetCardInfo("Hurkyl's Recall", 93, Rarity.RARE, mage.cards.h.HurkylsRecall.class)); - cards.add(new SetCardInfo("Hurloon Minotaur", 240, Rarity.COMMON, mage.cards.h.HurloonMinotaur.class)); - cards.add(new SetCardInfo("Hurricane", 303, Rarity.UNCOMMON, mage.cards.h.Hurricane.class)); - cards.add(new SetCardInfo("Hydroblast", 94, Rarity.UNCOMMON, mage.cards.h.Hydroblast.class)); - cards.add(new SetCardInfo("Icatian Phalanx", 36, Rarity.UNCOMMON, mage.cards.i.IcatianPhalanx.class)); - cards.add(new SetCardInfo("Icatian Scout", 37, Rarity.COMMON, mage.cards.i.IcatianScout.class)); - cards.add(new SetCardInfo("Icatian Store", 419, Rarity.RARE, mage.cards.i.IcatianStore.class)); - cards.add(new SetCardInfo("Icatian Town", 38, Rarity.RARE, mage.cards.i.IcatianTown.class)); - cards.add(new SetCardInfo("Ice Floe", 420, Rarity.UNCOMMON, mage.cards.i.IceFloe.class)); - cards.add(new SetCardInfo("Imposing Visage", 241, Rarity.COMMON, mage.cards.i.ImposingVisage.class)); - cards.add(new SetCardInfo("Incinerate", 242, Rarity.COMMON, mage.cards.i.Incinerate.class)); - cards.add(new SetCardInfo("Inferno", 243, Rarity.RARE, mage.cards.i.Inferno.class)); - cards.add(new SetCardInfo("Infinite Hourglass", 378, Rarity.RARE, mage.cards.i.InfiniteHourglass.class)); - cards.add(new SetCardInfo("Initiates of the Ebon Hand", 169, Rarity.COMMON, mage.cards.i.InitiatesOfTheEbonHand.class)); - cards.add(new SetCardInfo("Instill Energy", 304, Rarity.UNCOMMON, mage.cards.i.InstillEnergy.class)); - cards.add(new SetCardInfo("Iron Star", 379, Rarity.UNCOMMON, mage.cards.i.IronStar.class)); - cards.add(new SetCardInfo("Ironclaw Curse", 244, Rarity.RARE, mage.cards.i.IronclawCurse.class)); - cards.add(new SetCardInfo("Ironclaw Orcs", 245, Rarity.COMMON, mage.cards.i.IronclawOrcs.class)); - cards.add(new SetCardInfo("Ironroot Treefolk", 305, Rarity.COMMON, mage.cards.i.IronrootTreefolk.class)); - cards.add(new SetCardInfo("Island Sanctuary", 39, Rarity.RARE, mage.cards.i.IslandSanctuary.class)); - cards.add(new SetCardInfo("Island", 434, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 435, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 436, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 437, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ivory Cup", 380, Rarity.UNCOMMON, mage.cards.i.IvoryCup.class)); - cards.add(new SetCardInfo("Ivory Guardians", 40, Rarity.UNCOMMON, mage.cards.i.IvoryGuardians.class)); - cards.add(new SetCardInfo("Jade Monolith", 381, Rarity.RARE, mage.cards.j.JadeMonolith.class)); - cards.add(new SetCardInfo("Jalum Tome", 382, Rarity.RARE, mage.cards.j.JalumTome.class)); - cards.add(new SetCardInfo("Jandor's Saddlebags", 383, Rarity.RARE, mage.cards.j.JandorsSaddlebags.class)); - cards.add(new SetCardInfo("Jayemdae Tome", 384, Rarity.RARE, mage.cards.j.JayemdaeTome.class)); - cards.add(new SetCardInfo("Jester's Cap", 385, Rarity.RARE, mage.cards.j.JestersCap.class)); - cards.add(new SetCardInfo("Johtull Wurm", 306, Rarity.UNCOMMON, mage.cards.j.JohtullWurm.class)); - cards.add(new SetCardInfo("Jokulhaups", 246, Rarity.RARE, mage.cards.j.Jokulhaups.class)); - cards.add(new SetCardInfo("Joven's Tools", 386, Rarity.UNCOMMON, mage.cards.j.JovensTools.class)); - cards.add(new SetCardInfo("Justice", 41, Rarity.UNCOMMON, mage.cards.j.Justice.class)); - cards.add(new SetCardInfo("Juxtapose", 95, Rarity.RARE, mage.cards.j.Juxtapose.class)); - cards.add(new SetCardInfo("Karma", 42, Rarity.UNCOMMON, mage.cards.k.Karma.class)); - cards.add(new SetCardInfo("Karplusan Forest", 421, Rarity.RARE, mage.cards.k.KarplusanForest.class)); - cards.add(new SetCardInfo("Keldon Warlord", 247, Rarity.UNCOMMON, mage.cards.k.KeldonWarlord.class)); - cards.add(new SetCardInfo("Killer Bees", 307, Rarity.UNCOMMON, mage.cards.k.KillerBees.class)); - cards.add(new SetCardInfo("Kismet", 43, Rarity.UNCOMMON, mage.cards.k.Kismet.class)); - cards.add(new SetCardInfo("Kjeldoran Dead", 170, Rarity.COMMON, mage.cards.k.KjeldoranDead.class)); - cards.add(new SetCardInfo("Kjeldoran Royal Guard", 44, Rarity.RARE, mage.cards.k.KjeldoranRoyalGuard.class)); - cards.add(new SetCardInfo("Kjeldoran Skycaptain", 45, Rarity.UNCOMMON, mage.cards.k.KjeldoranSkycaptain.class)); - cards.add(new SetCardInfo("Knight of Stromgald", 171, Rarity.UNCOMMON, mage.cards.k.KnightOfStromgald.class)); - cards.add(new SetCardInfo("Krovikan Fetish", 172, Rarity.COMMON, mage.cards.k.KrovikanFetish.class)); - cards.add(new SetCardInfo("Krovikan Sorcerer", 96, Rarity.COMMON, mage.cards.k.KrovikanSorcerer.class)); - cards.add(new SetCardInfo("Labyrinth Minotaur", 97, Rarity.COMMON, mage.cards.l.LabyrinthMinotaur.class)); - cards.add(new SetCardInfo("Leshrac's Rite", 173, Rarity.UNCOMMON, mage.cards.l.LeshracsRite.class)); - cards.add(new SetCardInfo("Leviathan", 98, Rarity.RARE, mage.cards.l.Leviathan.class)); - cards.add(new SetCardInfo("Ley Druid", 308, Rarity.COMMON, mage.cards.l.LeyDruid.class)); - cards.add(new SetCardInfo("Lhurgoyf", 309, Rarity.RARE, mage.cards.l.Lhurgoyf.class)); - cards.add(new SetCardInfo("Library of Leng", 387, Rarity.UNCOMMON, mage.cards.l.LibraryOfLeng.class)); - cards.add(new SetCardInfo("Lifeforce", 310, Rarity.UNCOMMON, mage.cards.l.Lifeforce.class)); - cards.add(new SetCardInfo("Lifetap", 99, Rarity.UNCOMMON, mage.cards.l.Lifetap.class)); - cards.add(new SetCardInfo("Living Artifact", 311, Rarity.RARE, mage.cards.l.LivingArtifact.class)); - cards.add(new SetCardInfo("Living Lands", 312, Rarity.RARE, mage.cards.l.LivingLands.class)); - cards.add(new SetCardInfo("Llanowar Elves", 313, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); - cards.add(new SetCardInfo("Lord of Atlantis", 100, Rarity.RARE, mage.cards.l.LordOfAtlantis.class)); - cards.add(new SetCardInfo("Lord of the Pit", 174, Rarity.RARE, mage.cards.l.LordOfThePit.class)); - cards.add(new SetCardInfo("Lost Soul", 175, Rarity.COMMON, mage.cards.l.LostSoul.class)); - cards.add(new SetCardInfo("Lure", 314, Rarity.UNCOMMON, mage.cards.l.Lure.class)); - cards.add(new SetCardInfo("Magus of the Unseen", 102, Rarity.RARE, mage.cards.m.MagusOfTheUnseen.class)); - cards.add(new SetCardInfo("Mana Clash", 248, Rarity.RARE, mage.cards.m.ManaClash.class)); - cards.add(new SetCardInfo("Mana Flare", 249, Rarity.RARE, mage.cards.m.ManaFlare.class)); - cards.add(new SetCardInfo("Mana Vault", 388, Rarity.RARE, mage.cards.m.ManaVault.class)); - cards.add(new SetCardInfo("Manabarbs", 250, Rarity.RARE, mage.cards.m.Manabarbs.class)); - cards.add(new SetCardInfo("Marsh Viper", 315, Rarity.COMMON, mage.cards.m.MarshViper.class)); - cards.add(new SetCardInfo("Meekstone", 389, Rarity.RARE, mage.cards.m.Meekstone.class)); - cards.add(new SetCardInfo("Memory Lapse", 103, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); - cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 104, Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); - cards.add(new SetCardInfo("Mesa Falcon", 46, Rarity.COMMON, mage.cards.m.MesaFalcon.class)); - cards.add(new SetCardInfo("Mesa Pegasus", 47, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); - cards.add(new SetCardInfo("Millstone", 390, Rarity.RARE, mage.cards.m.Millstone.class)); - cards.add(new SetCardInfo("Mind Bomb", 105, Rarity.UNCOMMON, mage.cards.m.MindBomb.class)); - cards.add(new SetCardInfo("Mind Ravel", 176, Rarity.COMMON, mage.cards.m.MindRavel.class)); - cards.add(new SetCardInfo("Mind Warp", 177, Rarity.UNCOMMON, mage.cards.m.MindWarp.class)); - cards.add(new SetCardInfo("Mindstab Thrull", 178, Rarity.COMMON, mage.cards.m.MindstabThrull.class)); - cards.add(new SetCardInfo("Mole Worms", 179, Rarity.UNCOMMON, mage.cards.m.MoleWorms.class)); - cards.add(new SetCardInfo("Mons's Goblin Raiders", 251, Rarity.COMMON, mage.cards.m.MonssGoblinRaiders.class)); - cards.add(new SetCardInfo("Mountain Goat", 252, Rarity.COMMON, mage.cards.m.MountainGoat.class)); - cards.add(new SetCardInfo("Mountain", 442, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 443, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 444, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 445, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Murk Dwellers", 180, Rarity.COMMON, mage.cards.m.MurkDwellers.class)); - cards.add(new SetCardInfo("Nature's Lore", 316, Rarity.COMMON, mage.cards.n.NaturesLore.class)); - cards.add(new SetCardInfo("Necrite", 181, Rarity.COMMON, mage.cards.n.Necrite.class)); - cards.add(new SetCardInfo("Necropotence", 182, Rarity.RARE, mage.cards.n.Necropotence.class)); - cards.add(new SetCardInfo("Nether Shadow", 183, Rarity.RARE, mage.cards.n.NetherShadow.class)); - cards.add(new SetCardInfo("Nevinyrral's Disk", 391, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); - cards.add(new SetCardInfo("Nightmare", 184, Rarity.RARE, mage.cards.n.Nightmare.class)); - cards.add(new SetCardInfo("Obelisk of Undoing", 392, Rarity.RARE, mage.cards.o.ObeliskOfUndoing.class)); - cards.add(new SetCardInfo("Orcish Artillery", 253, Rarity.UNCOMMON, mage.cards.o.OrcishArtillery.class)); - cards.add(new SetCardInfo("Orcish Captain", 254, Rarity.UNCOMMON, mage.cards.o.OrcishCaptain.class)); - cards.add(new SetCardInfo("Orcish Oriflamme", 257, Rarity.UNCOMMON, mage.cards.o.OrcishOriflamme.class)); - cards.add(new SetCardInfo("Orcish Squatters", 258, Rarity.RARE, mage.cards.o.OrcishSquatters.class)); - cards.add(new SetCardInfo("Order of the Sacred Torch", 48, Rarity.RARE, mage.cards.o.OrderOfTheSacredTorch.class)); - cards.add(new SetCardInfo("Order of the White Shield", 49, Rarity.UNCOMMON, mage.cards.o.OrderOfTheWhiteShield.class)); - cards.add(new SetCardInfo("Orgg", 259, Rarity.RARE, mage.cards.o.Orgg.class)); - cards.add(new SetCardInfo("Ornithopter", 393, Rarity.UNCOMMON, mage.cards.o.Ornithopter.class)); - cards.add(new SetCardInfo("Panic", 260, Rarity.COMMON, mage.cards.p.Panic.class)); - cards.add(new SetCardInfo("Paralyze", 185, Rarity.COMMON, mage.cards.p.Paralyze.class)); - cards.add(new SetCardInfo("Pearled Unicorn", 50, Rarity.COMMON, mage.cards.p.PearledUnicorn.class)); - cards.add(new SetCardInfo("Pentagram of the Ages", 394, Rarity.RARE, mage.cards.p.PentagramOfTheAges.class)); - cards.add(new SetCardInfo("Personal Incarnation", 51, Rarity.RARE, mage.cards.p.PersonalIncarnation.class)); - cards.add(new SetCardInfo("Pestilence", 186, Rarity.COMMON, mage.cards.p.Pestilence.class)); - cards.add(new SetCardInfo("Phantasmal Forces", 106, Rarity.UNCOMMON, mage.cards.p.PhantasmalForces.class)); - cards.add(new SetCardInfo("Phantasmal Terrain", 107, Rarity.COMMON, mage.cards.p.PhantasmalTerrain.class)); - cards.add(new SetCardInfo("Phantom Monster", 108, Rarity.UNCOMMON, mage.cards.p.PhantomMonster.class)); - cards.add(new SetCardInfo("Pikemen", 52, Rarity.COMMON, mage.cards.p.Pikemen.class)); - cards.add(new SetCardInfo("Pirate Ship", 109, Rarity.RARE, mage.cards.p.PirateShip.class)); - cards.add(new SetCardInfo("Pit Scorpion", 187, Rarity.COMMON, mage.cards.p.PitScorpion.class)); - cards.add(new SetCardInfo("Plague Rats", 188, Rarity.COMMON, mage.cards.p.PlagueRats.class)); - cards.add(new SetCardInfo("Plains", 430, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 431, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 432, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 433, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Portent", 110, Rarity.COMMON, mage.cards.p.Portent.class)); - cards.add(new SetCardInfo("Power Sink", 111, Rarity.UNCOMMON, mage.cards.p.PowerSink.class)); - cards.add(new SetCardInfo("Pox", 189, Rarity.RARE, mage.cards.p.Pox.class)); - cards.add(new SetCardInfo("Pradesh Gypsies", 317, Rarity.COMMON, mage.cards.p.PradeshGypsies.class)); - cards.add(new SetCardInfo("Primal Clay", 395, Rarity.RARE, mage.cards.p.PrimalClay.class)); - cards.add(new SetCardInfo("Primal Order", 318, Rarity.RARE, mage.cards.p.PrimalOrder.class)); - cards.add(new SetCardInfo("Primordial Ooze", 261, Rarity.UNCOMMON, mage.cards.p.PrimordialOoze.class)); - cards.add(new SetCardInfo("Prismatic Ward", 53, Rarity.COMMON, mage.cards.p.PrismaticWard.class)); - cards.add(new SetCardInfo("Prodigal Sorcerer", 112, Rarity.COMMON, mage.cards.p.ProdigalSorcerer.class)); - cards.add(new SetCardInfo("Psychic Venom", 113, Rarity.COMMON, mage.cards.p.PsychicVenom.class)); - cards.add(new SetCardInfo("Pyroblast", 262, Rarity.UNCOMMON, mage.cards.p.Pyroblast.class)); - cards.add(new SetCardInfo("Pyrotechnics", 263, Rarity.UNCOMMON, mage.cards.p.Pyrotechnics.class)); - cards.add(new SetCardInfo("Rabid Wombat", 319, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); - cards.add(new SetCardInfo("Radjan Spirit", 320, Rarity.UNCOMMON, mage.cards.r.RadjanSpirit.class)); - cards.add(new SetCardInfo("Rag Man", 190, Rarity.RARE, mage.cards.r.RagMan.class)); - cards.add(new SetCardInfo("Raise Dead", 191, Rarity.COMMON, mage.cards.r.RaiseDead.class)); - cards.add(new SetCardInfo("Ray of Command", 114, Rarity.COMMON, mage.cards.r.RayOfCommand.class)); - cards.add(new SetCardInfo("Recall", 115, Rarity.RARE, mage.cards.r.Recall.class)); - cards.add(new SetCardInfo("Reef Pirates", 116, Rarity.COMMON, mage.cards.r.ReefPirates.class)); - cards.add(new SetCardInfo("Regeneration", 321, Rarity.COMMON, mage.cards.r.Regeneration.class)); - cards.add(new SetCardInfo("Remove Soul", 117, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); - cards.add(new SetCardInfo("Repentant Blacksmith", 54, Rarity.COMMON, mage.cards.r.RepentantBlacksmith.class)); - cards.add(new SetCardInfo("Reverse Damage", 55, Rarity.RARE, mage.cards.r.ReverseDamage.class)); - cards.add(new SetCardInfo("Righteousness", 56, Rarity.RARE, mage.cards.r.Righteousness.class)); - cards.add(new SetCardInfo("Rod of Ruin", 396, Rarity.UNCOMMON, mage.cards.r.RodOfRuin.class)); - cards.add(new SetCardInfo("Ruins of Trokair", 422, Rarity.UNCOMMON, mage.cards.r.RuinsOfTrokair.class)); - cards.add(new SetCardInfo("Sabretooth Tiger", 264, Rarity.COMMON, mage.cards.s.SabretoothTiger.class)); - cards.add(new SetCardInfo("Samite Healer", 58, Rarity.COMMON, mage.cards.s.SamiteHealer.class)); - cards.add(new SetCardInfo("Sand Silos", 423, Rarity.RARE, mage.cards.s.SandSilos.class)); - cards.add(new SetCardInfo("Scaled Wurm", 322, Rarity.COMMON, mage.cards.s.ScaledWurm.class)); - cards.add(new SetCardInfo("Scathe Zombies", 192, Rarity.COMMON, mage.cards.s.ScatheZombies.class)); - cards.add(new SetCardInfo("Scavenger Folk", 323, Rarity.COMMON, mage.cards.s.ScavengerFolk.class)); - cards.add(new SetCardInfo("Scryb Sprites", 324, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); - cards.add(new SetCardInfo("Sea Serpent", 118, Rarity.COMMON, mage.cards.s.SeaSerpent.class)); - cards.add(new SetCardInfo("Sea Spirit", 119, Rarity.UNCOMMON, mage.cards.s.SeaSpirit.class)); - cards.add(new SetCardInfo("Sea Sprite", 120, Rarity.UNCOMMON, mage.cards.s.SeaSprite.class)); - cards.add(new SetCardInfo("Seasinger", 121, Rarity.UNCOMMON, mage.cards.s.Seasinger.class)); - cards.add(new SetCardInfo("Segovian Leviathan", 122, Rarity.UNCOMMON, mage.cards.s.SegovianLeviathan.class)); - cards.add(new SetCardInfo("Sengir Autocrat", 193, Rarity.RARE, mage.cards.s.SengirAutocrat.class)); - cards.add(new SetCardInfo("Seraph", 59, Rarity.RARE, mage.cards.s.Seraph.class)); - cards.add(new SetCardInfo("Serpent Generator", 397, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); - cards.add(new SetCardInfo("Serra Bestiary", 60, Rarity.UNCOMMON, mage.cards.s.SerraBestiary.class)); - cards.add(new SetCardInfo("Serra Paladin", 61, Rarity.UNCOMMON, mage.cards.s.SerraPaladin.class)); - cards.add(new SetCardInfo("Shanodin Dryads", 325, Rarity.COMMON, mage.cards.s.ShanodinDryads.class)); - cards.add(new SetCardInfo("Shapeshifter", 398, Rarity.UNCOMMON, mage.cards.s.Shapeshifter.class)); - cards.add(new SetCardInfo("Shatter", 265, Rarity.COMMON, mage.cards.s.Shatter.class)); - cards.add(new SetCardInfo("Shatterstorm", 266, Rarity.UNCOMMON, mage.cards.s.Shatterstorm.class)); - cards.add(new SetCardInfo("Shield Bearer", 62, Rarity.COMMON, mage.cards.s.ShieldBearer.class)); - cards.add(new SetCardInfo("Shield Wall", 63, Rarity.COMMON, mage.cards.s.ShieldWall.class)); - cards.add(new SetCardInfo("Shivan Dragon", 267, Rarity.RARE, mage.cards.s.ShivanDragon.class)); - cards.add(new SetCardInfo("Shrink", 326, Rarity.COMMON, mage.cards.s.Shrink.class)); - cards.add(new SetCardInfo("Sibilant Spirit", 123, Rarity.RARE, mage.cards.s.SibilantSpirit.class)); - cards.add(new SetCardInfo("Skull Catapult", 399, Rarity.UNCOMMON, mage.cards.s.SkullCatapult.class)); - cards.add(new SetCardInfo("Smoke", 268, Rarity.RARE, mage.cards.s.Smoke.class)); - cards.add(new SetCardInfo("Sorceress Queen", 194, Rarity.RARE, mage.cards.s.SorceressQueen.class)); - cards.add(new SetCardInfo("Soul Barrier", 125, Rarity.COMMON, mage.cards.s.SoulBarrier.class)); - cards.add(new SetCardInfo("Soul Net", 400, Rarity.UNCOMMON, mage.cards.s.SoulNet.class)); - cards.add(new SetCardInfo("Spell Blast", 126, Rarity.COMMON, mage.cards.s.SpellBlast.class)); - cards.add(new SetCardInfo("Spirit Link", 64, Rarity.UNCOMMON, mage.cards.s.SpiritLink.class)); - cards.add(new SetCardInfo("Stampede", 327, Rarity.RARE, mage.cards.s.Stampede.class)); - cards.add(new SetCardInfo("Stasis", 127, Rarity.RARE, mage.cards.s.Stasis.class)); - cards.add(new SetCardInfo("Steal Artifact", 128, Rarity.UNCOMMON, mage.cards.s.StealArtifact.class)); - cards.add(new SetCardInfo("Stone Giant", 269, Rarity.UNCOMMON, mage.cards.s.StoneGiant.class)); - cards.add(new SetCardInfo("Stone Rain", 270, Rarity.COMMON, mage.cards.s.StoneRain.class)); - cards.add(new SetCardInfo("Stone Spirit", 271, Rarity.UNCOMMON, mage.cards.s.StoneSpirit.class)); - cards.add(new SetCardInfo("Stream of Life", 328, Rarity.COMMON, mage.cards.s.StreamOfLife.class)); - cards.add(new SetCardInfo("Stromgald Cabal", 195, Rarity.RARE, mage.cards.s.StromgaldCabal.class)); - cards.add(new SetCardInfo("Sulfurous Springs", 424, Rarity.RARE, mage.cards.s.SulfurousSprings.class)); - cards.add(new SetCardInfo("Svyelunite Temple", 425, Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class)); - cards.add(new SetCardInfo("Swamp", 438, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 439, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 440, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 441, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sylvan Library", 329, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); - cards.add(new SetCardInfo("Tarpan", 330, Rarity.COMMON, mage.cards.t.Tarpan.class)); - cards.add(new SetCardInfo("Tawnos's Weaponry", 401, Rarity.UNCOMMON, mage.cards.t.TawnossWeaponry.class)); - cards.add(new SetCardInfo("Terror", 196, Rarity.COMMON, mage.cards.t.Terror.class)); - cards.add(new SetCardInfo("The Brute", 272, Rarity.COMMON, mage.cards.t.TheBrute.class)); - cards.add(new SetCardInfo("The Hive", 402, Rarity.RARE, mage.cards.t.TheHive.class)); - cards.add(new SetCardInfo("The Wretched", 197, Rarity.RARE, mage.cards.t.TheWretched.class)); - cards.add(new SetCardInfo("Thicket Basilisk", 331, Rarity.UNCOMMON, mage.cards.t.ThicketBasilisk.class)); - cards.add(new SetCardInfo("Throne of Bone", 403, Rarity.UNCOMMON, mage.cards.t.ThroneOfBone.class)); - cards.add(new SetCardInfo("Thrull Retainer", 198, Rarity.UNCOMMON, mage.cards.t.ThrullRetainer.class)); - cards.add(new SetCardInfo("Time Bomb", 404, Rarity.RARE, mage.cards.t.TimeBomb.class)); - cards.add(new SetCardInfo("Time Elemental", 129, Rarity.RARE, mage.cards.t.TimeElemental.class)); - cards.add(new SetCardInfo("Titania's Song", 332, Rarity.RARE, mage.cards.t.TitaniasSong.class)); - cards.add(new SetCardInfo("Torture", 199, Rarity.COMMON, mage.cards.t.Torture.class)); - cards.add(new SetCardInfo("Touch of Death", 200, Rarity.COMMON, mage.cards.t.TouchOfDeath.class)); - cards.add(new SetCardInfo("Tranquility", 333, Rarity.COMMON, mage.cards.t.Tranquility.class)); - cards.add(new SetCardInfo("Truce", 65, Rarity.RARE, mage.cards.t.Truce.class)); - cards.add(new SetCardInfo("Tsunami", 334, Rarity.UNCOMMON, mage.cards.t.Tsunami.class)); - cards.add(new SetCardInfo("Tundra Wolves", 66, Rarity.COMMON, mage.cards.t.TundraWolves.class)); - cards.add(new SetCardInfo("Twiddle", 130, Rarity.COMMON, mage.cards.t.Twiddle.class)); - cards.add(new SetCardInfo("Underground River", 426, Rarity.RARE, mage.cards.u.UndergroundRiver.class)); - cards.add(new SetCardInfo("Unholy Strength", 201, Rarity.COMMON, mage.cards.u.UnholyStrength.class)); - cards.add(new SetCardInfo("Unstable Mutation", 131, Rarity.COMMON, mage.cards.u.UnstableMutation.class)); - cards.add(new SetCardInfo("Unsummon", 132, Rarity.COMMON, mage.cards.u.Unsummon.class)); - cards.add(new SetCardInfo("Untamed Wilds", 335, Rarity.UNCOMMON, mage.cards.u.UntamedWilds.class)); - cards.add(new SetCardInfo("Updraft", 133, Rarity.COMMON, mage.cards.u.Updraft.class)); - cards.add(new SetCardInfo("Urza's Avenger", 405, Rarity.RARE, mage.cards.u.UrzasAvenger.class)); - cards.add(new SetCardInfo("Urza's Bauble", 406, Rarity.UNCOMMON, mage.cards.u.UrzasBauble.class)); - cards.add(new SetCardInfo("Urza's Mine", 427, Rarity.COMMON, mage.cards.u.UrzasMine.class)); - cards.add(new SetCardInfo("Urza's Power Plant", 428, Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class)); - cards.add(new SetCardInfo("Urza's Tower", 429, Rarity.COMMON, mage.cards.u.UrzasTower.class)); - cards.add(new SetCardInfo("Vampire Bats", 202, Rarity.COMMON, mage.cards.v.VampireBats.class)); - cards.add(new SetCardInfo("Venom", 336, Rarity.COMMON, mage.cards.v.Venom.class)); - cards.add(new SetCardInfo("Verduran Enchantress", 337, Rarity.RARE, mage.cards.v.VerduranEnchantress.class)); - cards.add(new SetCardInfo("Vodalian Soldiers", 134, Rarity.COMMON, mage.cards.v.VodalianSoldiers.class)); - cards.add(new SetCardInfo("Wall of Air", 135, Rarity.UNCOMMON, mage.cards.w.WallOfAir.class)); - cards.add(new SetCardInfo("Wall of Bone", 203, Rarity.UNCOMMON, mage.cards.w.WallOfBone.class)); - cards.add(new SetCardInfo("Wall of Brambles", 338, Rarity.UNCOMMON, mage.cards.w.WallOfBrambles.class)); - cards.add(new SetCardInfo("Wall of Fire", 273, Rarity.UNCOMMON, mage.cards.w.WallOfFire.class)); - cards.add(new SetCardInfo("Wall of Spears", 407, Rarity.COMMON, mage.cards.w.WallOfSpears.class)); - cards.add(new SetCardInfo("Wall of Stone", 274, Rarity.UNCOMMON, mage.cards.w.WallOfStone.class)); - cards.add(new SetCardInfo("Wall of Swords", 67, Rarity.UNCOMMON, mage.cards.w.WallOfSwords.class)); - cards.add(new SetCardInfo("Wanderlust", 339, Rarity.UNCOMMON, mage.cards.w.Wanderlust.class)); - cards.add(new SetCardInfo("War Mammoth", 340, Rarity.COMMON, mage.cards.w.WarMammoth.class)); - cards.add(new SetCardInfo("Warp Artifact", 204, Rarity.RARE, mage.cards.w.WarpArtifact.class)); - cards.add(new SetCardInfo("Weakness", 205, Rarity.COMMON, mage.cards.w.Weakness.class)); - cards.add(new SetCardInfo("Whirling Dervish", 341, Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class)); - cards.add(new SetCardInfo("White Knight", 68, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); - cards.add(new SetCardInfo("Wild Growth", 342, Rarity.COMMON, mage.cards.w.WildGrowth.class)); - cards.add(new SetCardInfo("Wind Spirit", 136, Rarity.UNCOMMON, mage.cards.w.WindSpirit.class)); - cards.add(new SetCardInfo("Winds of Change", 275, Rarity.RARE, mage.cards.w.WindsOfChange.class)); - cards.add(new SetCardInfo("Winter Blast", 343, Rarity.UNCOMMON, mage.cards.w.WinterBlast.class)); - cards.add(new SetCardInfo("Winter Orb", 408, Rarity.RARE, mage.cards.w.WinterOrb.class)); - cards.add(new SetCardInfo("Wolverine Pack", 344, Rarity.UNCOMMON, mage.cards.w.WolverinePack.class)); - cards.add(new SetCardInfo("Wooden Sphere", 409, Rarity.UNCOMMON, mage.cards.w.WoodenSphere.class)); - cards.add(new SetCardInfo("Word of Blasting", 276, Rarity.UNCOMMON, mage.cards.w.WordOfBlasting.class)); - cards.add(new SetCardInfo("Wrath of God", 69, Rarity.RARE, mage.cards.w.WrathOfGod.class)); - cards.add(new SetCardInfo("Wyluli Wolf", 345, Rarity.RARE, mage.cards.w.WyluliWolf.class)); - cards.add(new SetCardInfo("Xenic Poltergeist", 206, Rarity.RARE, mage.cards.x.XenicPoltergeist.class)); - cards.add(new SetCardInfo("Zephyr Falcon", 137, Rarity.COMMON, mage.cards.z.ZephyrFalcon.class)); - cards.add(new SetCardInfo("Zombie Master", 207, Rarity.RARE, mage.cards.z.ZombieMaster.class)); - cards.add(new SetCardInfo("Zur's Weirding", 138, Rarity.RARE, mage.cards.z.ZursWeirding.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +public final class FifthEdition extends ExpansionSet { + + private static final FifthEdition instance = new FifthEdition(); + + public static FifthEdition getInstance() { + return instance; + } + + private FifthEdition() { + super("Fifth Edition", "5ED", ExpansionSet.buildDate(1997, 3, 1), SetType.CORE); + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Abbey Gargoyles", 1, Rarity.UNCOMMON, mage.cards.a.AbbeyGargoyles.class)); + cards.add(new SetCardInfo("Abyssal Specter", 139, Rarity.UNCOMMON, mage.cards.a.AbyssalSpecter.class)); + cards.add(new SetCardInfo("Adarkar Wastes", 410, Rarity.RARE, mage.cards.a.AdarkarWastes.class)); + cards.add(new SetCardInfo("Aether Storm", 70, Rarity.UNCOMMON, mage.cards.a.AetherStorm.class)); + cards.add(new SetCardInfo("Air Elemental", 71, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); + cards.add(new SetCardInfo("Akron Legionnaire", 2, Rarity.RARE, mage.cards.a.AkronLegionnaire.class)); + cards.add(new SetCardInfo("Alabaster Potion", 3, Rarity.COMMON, mage.cards.a.AlabasterPotion.class)); + cards.add(new SetCardInfo("Aladdin's Ring", 346, Rarity.RARE, mage.cards.a.AladdinsRing.class)); + cards.add(new SetCardInfo("Ambush Party", 208, Rarity.COMMON, mage.cards.a.AmbushParty.class)); + cards.add(new SetCardInfo("Amulet of Kroog", 347, Rarity.COMMON, mage.cards.a.AmuletOfKroog.class)); + cards.add(new SetCardInfo("An-Havva Constable", 277, Rarity.RARE, mage.cards.a.AnHavvaConstable.class)); + cards.add(new SetCardInfo("Angry Mob", 4, Rarity.UNCOMMON, mage.cards.a.AngryMob.class)); + cards.add(new SetCardInfo("Animate Dead", 140, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); + cards.add(new SetCardInfo("Animate Wall", 5, Rarity.RARE, mage.cards.a.AnimateWall.class)); + cards.add(new SetCardInfo("Ankh of Mishra", 348, Rarity.RARE, mage.cards.a.AnkhOfMishra.class)); + cards.add(new SetCardInfo("Anti-Magic Aura", 72, Rarity.UNCOMMON, mage.cards.a.AntiMagicAura.class)); + cards.add(new SetCardInfo("Arenson's Aura", 6, Rarity.UNCOMMON, mage.cards.a.ArensonsAura.class)); + cards.add(new SetCardInfo("Armageddon", 7, Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Armor of Faith", 8, Rarity.COMMON, mage.cards.a.ArmorOfFaith.class)); + cards.add(new SetCardInfo("Ashes to Ashes", 141, Rarity.UNCOMMON, mage.cards.a.AshesToAshes.class)); + cards.add(new SetCardInfo("Ashnod's Altar", 349, Rarity.UNCOMMON, mage.cards.a.AshnodsAltar.class)); + cards.add(new SetCardInfo("Ashnod's Transmogrant", 350, Rarity.COMMON, mage.cards.a.AshnodsTransmogrant.class)); + cards.add(new SetCardInfo("Aspect of Wolf", 278, Rarity.RARE, mage.cards.a.AspectOfWolf.class)); + cards.add(new SetCardInfo("Atog", 209, Rarity.UNCOMMON, mage.cards.a.Atog.class)); + cards.add(new SetCardInfo("Aurochs", 279, Rarity.COMMON, mage.cards.a.Aurochs.class)); + cards.add(new SetCardInfo("Aysen Bureaucrats", 9, Rarity.COMMON, mage.cards.a.AysenBureaucrats.class)); + cards.add(new SetCardInfo("Azure Drake", 73, Rarity.UNCOMMON, mage.cards.a.AzureDrake.class)); + cards.add(new SetCardInfo("Bad Moon", 142, Rarity.RARE, mage.cards.b.BadMoon.class)); + cards.add(new SetCardInfo("Ball Lightning", 210, Rarity.RARE, mage.cards.b.BallLightning.class)); + cards.add(new SetCardInfo("Barbed Sextant", 351, Rarity.COMMON, mage.cards.b.BarbedSextant.class)); + cards.add(new SetCardInfo("Barl's Cage", 352, Rarity.RARE, mage.cards.b.BarlsCage.class)); + cards.add(new SetCardInfo("Battering Ram", 353, Rarity.COMMON, mage.cards.b.BatteringRam.class)); + cards.add(new SetCardInfo("Benalish Hero", 10, Rarity.COMMON, mage.cards.b.BenalishHero.class)); + cards.add(new SetCardInfo("Binding Grasp", 74, Rarity.UNCOMMON, mage.cards.b.BindingGrasp.class)); + cards.add(new SetCardInfo("Bird Maiden", 211, Rarity.COMMON, mage.cards.b.BirdMaiden.class)); + cards.add(new SetCardInfo("Birds of Paradise", 280, Rarity.RARE, mage.cards.b.BirdsOfParadise.class)); + cards.add(new SetCardInfo("Black Knight", 143, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); + cards.add(new SetCardInfo("Blessed Wine", 11, Rarity.COMMON, mage.cards.b.BlessedWine.class)); + cards.add(new SetCardInfo("Blight", 144, Rarity.UNCOMMON, mage.cards.b.Blight.class)); + cards.add(new SetCardInfo("Blinking Spirit", 12, Rarity.RARE, mage.cards.b.BlinkingSpirit.class)); + cards.add(new SetCardInfo("Blood Lust", 212, Rarity.COMMON, mage.cards.b.BloodLust.class)); + cards.add(new SetCardInfo("Bog Imp", 145, Rarity.COMMON, mage.cards.b.BogImp.class)); + cards.add(new SetCardInfo("Bog Rats", 146, Rarity.COMMON, mage.cards.b.BogRats.class)); + cards.add(new SetCardInfo("Bog Wraith", 147, Rarity.UNCOMMON, mage.cards.b.BogWraith.class)); + cards.add(new SetCardInfo("Boomerang", 75, Rarity.COMMON, mage.cards.b.Boomerang.class)); + cards.add(new SetCardInfo("Bottle of Suleiman", 354, Rarity.RARE, mage.cards.b.BottleOfSuleiman.class)); + cards.add(new SetCardInfo("Bottomless Vault", 411, Rarity.RARE, mage.cards.b.BottomlessVault.class)); + cards.add(new SetCardInfo("Brainstorm", 76, Rarity.COMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Brainwash", 13, Rarity.COMMON, mage.cards.b.Brainwash.class)); + cards.add(new SetCardInfo("Brassclaw Orcs", 213, Rarity.COMMON, mage.cards.b.BrassclawOrcs.class)); + cards.add(new SetCardInfo("Breeding Pit", 148, Rarity.UNCOMMON, mage.cards.b.BreedingPit.class)); + cards.add(new SetCardInfo("Broken Visage", 149, Rarity.RARE, mage.cards.b.BrokenVisage.class)); + cards.add(new SetCardInfo("Brothers of Fire", 214, Rarity.COMMON, mage.cards.b.BrothersOfFire.class)); + cards.add(new SetCardInfo("Brushland", 412, Rarity.RARE, mage.cards.b.Brushland.class)); + cards.add(new SetCardInfo("Carapace", 281, Rarity.COMMON, mage.cards.c.Carapace.class)); + cards.add(new SetCardInfo("Caribou Range", 14, Rarity.RARE, mage.cards.c.CaribouRange.class)); + cards.add(new SetCardInfo("Carrion Ants", 150, Rarity.UNCOMMON, mage.cards.c.CarrionAnts.class)); + cards.add(new SetCardInfo("Castle", 15, Rarity.UNCOMMON, mage.cards.c.Castle.class)); + cards.add(new SetCardInfo("Cat Warriors", 282, Rarity.COMMON, mage.cards.c.CatWarriors.class)); + cards.add(new SetCardInfo("Cave People", 215, Rarity.UNCOMMON, mage.cards.c.CavePeople.class)); + cards.add(new SetCardInfo("Chub Toad", 283, Rarity.COMMON, mage.cards.c.ChubToad.class)); + cards.add(new SetCardInfo("Circle of Protection: Artifacts", 16, Rarity.UNCOMMON, mage.cards.c.CircleOfProtectionArtifacts.class)); + cards.add(new SetCardInfo("Circle of Protection: Black", 17, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); + cards.add(new SetCardInfo("Circle of Protection: Blue", 18, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlue.class)); + cards.add(new SetCardInfo("Circle of Protection: Green", 19, Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class)); + cards.add(new SetCardInfo("Circle of Protection: Red", 20, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("Circle of Protection: White", 21, Rarity.COMMON, mage.cards.c.CircleOfProtectionWhite.class)); + cards.add(new SetCardInfo("City of Brass", 413, Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Clay Statue", 355, Rarity.COMMON, mage.cards.c.ClayStatue.class)); + cards.add(new SetCardInfo("Cloak of Confusion", 151, Rarity.COMMON, mage.cards.c.CloakOfConfusion.class)); + cards.add(new SetCardInfo("Clockwork Beast", 356, Rarity.RARE, mage.cards.c.ClockworkBeast.class)); + cards.add(new SetCardInfo("Clockwork Steed", 357, Rarity.UNCOMMON, mage.cards.c.ClockworkSteed.class)); + cards.add(new SetCardInfo("Cockatrice", 284, Rarity.RARE, mage.cards.c.Cockatrice.class)); + cards.add(new SetCardInfo("Colossus of Sardia", 358, Rarity.RARE, mage.cards.c.ColossusOfSardia.class)); + cards.add(new SetCardInfo("Conquer", 216, Rarity.UNCOMMON, mage.cards.c.Conquer.class)); + cards.add(new SetCardInfo("Coral Helm", 359, Rarity.RARE, mage.cards.c.CoralHelm.class)); + cards.add(new SetCardInfo("Counterspell", 77, Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Craw Giant", 285, Rarity.UNCOMMON, mage.cards.c.CrawGiant.class)); + cards.add(new SetCardInfo("Craw Wurm", 286, Rarity.COMMON, mage.cards.c.CrawWurm.class)); + cards.add(new SetCardInfo("Crimson Manticore", 217, Rarity.RARE, mage.cards.c.CrimsonManticore.class)); + cards.add(new SetCardInfo("Crown of the Ages", 360, Rarity.RARE, mage.cards.c.CrownOfTheAges.class)); + cards.add(new SetCardInfo("Crumble", 287, Rarity.UNCOMMON, mage.cards.c.Crumble.class)); + cards.add(new SetCardInfo("Crusade", 22, Rarity.RARE, mage.cards.c.Crusade.class)); + cards.add(new SetCardInfo("Crystal Rod", 361, Rarity.UNCOMMON, mage.cards.c.CrystalRod.class)); + cards.add(new SetCardInfo("Cursed Land", 152, Rarity.UNCOMMON, mage.cards.c.CursedLand.class)); + cards.add(new SetCardInfo("D'Avenant Archer", 23, Rarity.COMMON, mage.cards.d.DAvenantArcher.class)); + cards.add(new SetCardInfo("Dance of Many", 78, Rarity.RARE, mage.cards.d.DanceOfMany.class)); + cards.add(new SetCardInfo("Dancing Scimitar", 362, Rarity.RARE, mage.cards.d.DancingScimitar.class)); + cards.add(new SetCardInfo("Dandan", 79, Rarity.COMMON, mage.cards.d.Dandan.class)); + cards.add(new SetCardInfo("Dark Maze", 80, Rarity.COMMON, mage.cards.d.DarkMaze.class)); + cards.add(new SetCardInfo("Dark Ritual", 153, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Death Speakers", 24, Rarity.COMMON, mage.cards.d.DeathSpeakers.class)); + cards.add(new SetCardInfo("Death Ward", 25, Rarity.COMMON, mage.cards.d.DeathWard.class)); + cards.add(new SetCardInfo("Deathgrip", 154, Rarity.UNCOMMON, mage.cards.d.Deathgrip.class)); + cards.add(new SetCardInfo("Deflection", 81, Rarity.RARE, mage.cards.d.Deflection.class)); + cards.add(new SetCardInfo("Derelor", 155, Rarity.RARE, mage.cards.d.Derelor.class)); + cards.add(new SetCardInfo("Desert Twister", 288, Rarity.UNCOMMON, mage.cards.d.DesertTwister.class)); + cards.add(new SetCardInfo("Detonate", 218, Rarity.UNCOMMON, mage.cards.d.Detonate.class)); + cards.add(new SetCardInfo("Diabolic Machine", 363, Rarity.UNCOMMON, mage.cards.d.DiabolicMachine.class)); + cards.add(new SetCardInfo("Dingus Egg", 364, Rarity.RARE, mage.cards.d.DingusEgg.class)); + cards.add(new SetCardInfo("Disenchant", 26, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Disintegrate", 219, Rarity.COMMON, mage.cards.d.Disintegrate.class)); + cards.add(new SetCardInfo("Disrupting Scepter", 365, Rarity.RARE, mage.cards.d.DisruptingScepter.class)); + cards.add(new SetCardInfo("Divine Offering", 27, Rarity.COMMON, mage.cards.d.DivineOffering.class)); + cards.add(new SetCardInfo("Divine Transformation", 28, Rarity.UNCOMMON, mage.cards.d.DivineTransformation.class)); + cards.add(new SetCardInfo("Dragon Engine", 366, Rarity.RARE, mage.cards.d.DragonEngine.class)); + cards.add(new SetCardInfo("Drain Life", 156, Rarity.COMMON, mage.cards.d.DrainLife.class)); + cards.add(new SetCardInfo("Drain Power", 82, Rarity.RARE, mage.cards.d.DrainPower.class)); + cards.add(new SetCardInfo("Drudge Skeletons", 157, Rarity.COMMON, mage.cards.d.DrudgeSkeletons.class)); + cards.add(new SetCardInfo("Durkwood Boars", 289, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); + cards.add(new SetCardInfo("Dust to Dust", 29, Rarity.UNCOMMON, mage.cards.d.DustToDust.class)); + cards.add(new SetCardInfo("Dwarven Catapult", 220, Rarity.UNCOMMON, mage.cards.d.DwarvenCatapult.class)); + cards.add(new SetCardInfo("Dwarven Hold", 414, Rarity.RARE, mage.cards.d.DwarvenHold.class)); + cards.add(new SetCardInfo("Dwarven Ruins", 415, Rarity.UNCOMMON, mage.cards.d.DwarvenRuins.class)); + cards.add(new SetCardInfo("Dwarven Soldier", 221, Rarity.COMMON, mage.cards.d.DwarvenSoldier.class)); + cards.add(new SetCardInfo("Dwarven Warriors", 222, Rarity.COMMON, mage.cards.d.DwarvenWarriors.class)); + cards.add(new SetCardInfo("Earthquake", 223, Rarity.RARE, mage.cards.e.Earthquake.class)); + cards.add(new SetCardInfo("Ebon Stronghold", 416, Rarity.UNCOMMON, mage.cards.e.EbonStronghold.class)); + cards.add(new SetCardInfo("Elder Druid", 290, Rarity.RARE, mage.cards.e.ElderDruid.class)); + cards.add(new SetCardInfo("Elkin Bottle", 367, Rarity.RARE, mage.cards.e.ElkinBottle.class)); + cards.add(new SetCardInfo("Elven Riders", 291, Rarity.UNCOMMON, mage.cards.e.ElvenRiders.class)); + cards.add(new SetCardInfo("Elvish Archers", 292, Rarity.RARE, mage.cards.e.ElvishArchers.class)); + cards.add(new SetCardInfo("Energy Flux", 83, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); + cards.add(new SetCardInfo("Enervate", 84, Rarity.COMMON, mage.cards.e.Enervate.class)); + cards.add(new SetCardInfo("Erg Raiders", 158, Rarity.COMMON, mage.cards.e.ErgRaiders.class)); + cards.add(new SetCardInfo("Errantry", 224, Rarity.COMMON, mage.cards.e.Errantry.class)); + cards.add(new SetCardInfo("Eternal Warrior", 225, Rarity.COMMON, mage.cards.e.EternalWarrior.class)); + cards.add(new SetCardInfo("Evil Eye of Orms-by-Gore", 159, Rarity.UNCOMMON, mage.cards.e.EvilEyeOfOrmsByGore.class)); + cards.add(new SetCardInfo("Evil Presence", 160, Rarity.UNCOMMON, mage.cards.e.EvilPresence.class)); + cards.add(new SetCardInfo("Eye for an Eye", 30, Rarity.RARE, mage.cards.e.EyeForAnEye.class)); + cards.add(new SetCardInfo("Fallen Angel", 161, Rarity.UNCOMMON, mage.cards.f.FallenAngel.class)); + cards.add(new SetCardInfo("Fear", 162, Rarity.COMMON, mage.cards.f.Fear.class)); + cards.add(new SetCardInfo("Feedback", 85, Rarity.UNCOMMON, mage.cards.f.Feedback.class)); + cards.add(new SetCardInfo("Feldon's Cane", 368, Rarity.UNCOMMON, mage.cards.f.FeldonsCane.class)); + cards.add(new SetCardInfo("Fellwar Stone", 369, Rarity.UNCOMMON, mage.cards.f.FellwarStone.class)); + cards.add(new SetCardInfo("Feroz's Ban", 370, Rarity.RARE, mage.cards.f.FerozsBan.class)); + cards.add(new SetCardInfo("Fire Drake", 226, Rarity.UNCOMMON, mage.cards.f.FireDrake.class)); + cards.add(new SetCardInfo("Fireball", 227, Rarity.COMMON, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Firebreathing", 228, Rarity.COMMON, mage.cards.f.Firebreathing.class)); + cards.add(new SetCardInfo("Flame Spirit", 229, Rarity.UNCOMMON, mage.cards.f.FlameSpirit.class)); + cards.add(new SetCardInfo("Flare", 230, Rarity.COMMON, mage.cards.f.Flare.class)); + cards.add(new SetCardInfo("Flashfires", 231, Rarity.UNCOMMON, mage.cards.f.Flashfires.class)); + cards.add(new SetCardInfo("Flight", 86, Rarity.COMMON, mage.cards.f.Flight.class)); + cards.add(new SetCardInfo("Flood", 87, Rarity.COMMON, mage.cards.f.Flood.class)); + cards.add(new SetCardInfo("Flying Carpet", 371, Rarity.RARE, mage.cards.f.FlyingCarpet.class)); + cards.add(new SetCardInfo("Fog", 293, Rarity.COMMON, mage.cards.f.Fog.class)); + cards.add(new SetCardInfo("Force of Nature", 294, Rarity.RARE, mage.cards.f.ForceOfNature.class)); + cards.add(new SetCardInfo("Force Spike", 88, Rarity.COMMON, mage.cards.f.ForceSpike.class)); + cards.add(new SetCardInfo("Forest", 446, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 447, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 448, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 449, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forget", 89, Rarity.RARE, mage.cards.f.Forget.class)); + cards.add(new SetCardInfo("Fountain of Youth", 372, Rarity.UNCOMMON, mage.cards.f.FountainOfYouth.class)); + cards.add(new SetCardInfo("Foxfire", 295, Rarity.COMMON, mage.cards.f.Foxfire.class)); + cards.add(new SetCardInfo("Frozen Shade", 163, Rarity.COMMON, mage.cards.f.FrozenShade.class)); + cards.add(new SetCardInfo("Funeral March", 164, Rarity.COMMON, mage.cards.f.FuneralMarch.class)); + cards.add(new SetCardInfo("Fungusaur", 296, Rarity.RARE, mage.cards.f.Fungusaur.class)); + cards.add(new SetCardInfo("Fyndhorn Elder", 297, Rarity.UNCOMMON, mage.cards.f.FyndhornElder.class)); + cards.add(new SetCardInfo("Game of Chaos", 232, Rarity.RARE, mage.cards.g.GameOfChaos.class)); + cards.add(new SetCardInfo("Gaseous Form", 90, Rarity.COMMON, mage.cards.g.GaseousForm.class)); + cards.add(new SetCardInfo("Gauntlets of Chaos", 373, Rarity.RARE, mage.cards.g.GauntletsOfChaos.class)); + cards.add(new SetCardInfo("Ghazban Ogre", 298, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); + cards.add(new SetCardInfo("Giant Growth", 299, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Giant Spider", 300, Rarity.COMMON, mage.cards.g.GiantSpider.class)); + cards.add(new SetCardInfo("Giant Strength", 233, Rarity.COMMON, mage.cards.g.GiantStrength.class)); + cards.add(new SetCardInfo("Glacial Wall", 91, Rarity.UNCOMMON, mage.cards.g.GlacialWall.class)); + cards.add(new SetCardInfo("Glasses of Urza", 374, Rarity.UNCOMMON, mage.cards.g.GlassesOfUrza.class)); + cards.add(new SetCardInfo("Gloom", 165, Rarity.UNCOMMON, mage.cards.g.Gloom.class)); + cards.add(new SetCardInfo("Goblin Digging Team", 234, Rarity.COMMON, mage.cards.g.GoblinDiggingTeam.class)); + cards.add(new SetCardInfo("Goblin Hero", 235, Rarity.COMMON, mage.cards.g.GoblinHero.class)); + cards.add(new SetCardInfo("Goblin King", 236, Rarity.RARE, mage.cards.g.GoblinKing.class)); + cards.add(new SetCardInfo("Goblin War Drums", 237, Rarity.COMMON, mage.cards.g.GoblinWarDrums.class)); + cards.add(new SetCardInfo("Goblin Warrens", 238, Rarity.RARE, mage.cards.g.GoblinWarrens.class)); + cards.add(new SetCardInfo("Grapeshot Catapult", 375, Rarity.COMMON, mage.cards.g.GrapeshotCatapult.class)); + cards.add(new SetCardInfo("Greater Realm of Preservation", 31, Rarity.UNCOMMON, mage.cards.g.GreaterRealmOfPreservation.class)); + cards.add(new SetCardInfo("Greater Werewolf", 166, Rarity.UNCOMMON, mage.cards.g.GreaterWerewolf.class)); + cards.add(new SetCardInfo("Grizzly Bears", 301, Rarity.COMMON, mage.cards.g.GrizzlyBears.class)); + cards.add(new SetCardInfo("Havenwood Battleground", 417, Rarity.UNCOMMON, mage.cards.h.HavenwoodBattleground.class)); + cards.add(new SetCardInfo("Heal", 32, Rarity.COMMON, mage.cards.h.Heal.class)); + cards.add(new SetCardInfo("Healing Salve", 33, Rarity.COMMON, mage.cards.h.HealingSalve.class)); + cards.add(new SetCardInfo("Hecatomb", 167, Rarity.RARE, mage.cards.h.Hecatomb.class)); + cards.add(new SetCardInfo("Helm of Chatzuk", 376, Rarity.RARE, mage.cards.h.HelmOfChatzuk.class)); + cards.add(new SetCardInfo("Hill Giant", 239, Rarity.COMMON, mage.cards.h.HillGiant.class)); + cards.add(new SetCardInfo("Hollow Trees", 418, Rarity.RARE, mage.cards.h.HollowTrees.class)); + cards.add(new SetCardInfo("Holy Strength", 35, Rarity.COMMON, mage.cards.h.HolyStrength.class)); + cards.add(new SetCardInfo("Homarid Warrior", 92, Rarity.COMMON, mage.cards.h.HomaridWarrior.class)); + cards.add(new SetCardInfo("Howl from Beyond", 168, Rarity.COMMON, mage.cards.h.HowlFromBeyond.class)); + cards.add(new SetCardInfo("Howling Mine", 377, Rarity.RARE, mage.cards.h.HowlingMine.class)); + cards.add(new SetCardInfo("Hungry Mist", 302, Rarity.COMMON, mage.cards.h.HungryMist.class)); + cards.add(new SetCardInfo("Hurkyl's Recall", 93, Rarity.RARE, mage.cards.h.HurkylsRecall.class)); + cards.add(new SetCardInfo("Hurloon Minotaur", 240, Rarity.COMMON, mage.cards.h.HurloonMinotaur.class)); + cards.add(new SetCardInfo("Hurricane", 303, Rarity.UNCOMMON, mage.cards.h.Hurricane.class)); + cards.add(new SetCardInfo("Hydroblast", 94, Rarity.UNCOMMON, mage.cards.h.Hydroblast.class)); + cards.add(new SetCardInfo("Icatian Phalanx", 36, Rarity.UNCOMMON, mage.cards.i.IcatianPhalanx.class)); + cards.add(new SetCardInfo("Icatian Scout", 37, Rarity.COMMON, mage.cards.i.IcatianScout.class)); + cards.add(new SetCardInfo("Icatian Store", 419, Rarity.RARE, mage.cards.i.IcatianStore.class)); + cards.add(new SetCardInfo("Icatian Town", 38, Rarity.RARE, mage.cards.i.IcatianTown.class)); + cards.add(new SetCardInfo("Ice Floe", 420, Rarity.UNCOMMON, mage.cards.i.IceFloe.class)); + cards.add(new SetCardInfo("Imposing Visage", 241, Rarity.COMMON, mage.cards.i.ImposingVisage.class)); + cards.add(new SetCardInfo("Incinerate", 242, Rarity.COMMON, mage.cards.i.Incinerate.class)); + cards.add(new SetCardInfo("Inferno", 243, Rarity.RARE, mage.cards.i.Inferno.class)); + cards.add(new SetCardInfo("Infinite Hourglass", 378, Rarity.RARE, mage.cards.i.InfiniteHourglass.class)); + cards.add(new SetCardInfo("Initiates of the Ebon Hand", 169, Rarity.COMMON, mage.cards.i.InitiatesOfTheEbonHand.class)); + cards.add(new SetCardInfo("Instill Energy", 304, Rarity.UNCOMMON, mage.cards.i.InstillEnergy.class)); + cards.add(new SetCardInfo("Iron Star", 379, Rarity.UNCOMMON, mage.cards.i.IronStar.class)); + cards.add(new SetCardInfo("Ironclaw Curse", 244, Rarity.RARE, mage.cards.i.IronclawCurse.class)); + cards.add(new SetCardInfo("Ironclaw Orcs", 245, Rarity.COMMON, mage.cards.i.IronclawOrcs.class)); + cards.add(new SetCardInfo("Ironroot Treefolk", 305, Rarity.COMMON, mage.cards.i.IronrootTreefolk.class)); + cards.add(new SetCardInfo("Island Sanctuary", 39, Rarity.RARE, mage.cards.i.IslandSanctuary.class)); + cards.add(new SetCardInfo("Island", 434, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 435, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 436, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 437, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Cup", 380, Rarity.UNCOMMON, mage.cards.i.IvoryCup.class)); + cards.add(new SetCardInfo("Ivory Guardians", 40, Rarity.UNCOMMON, mage.cards.i.IvoryGuardians.class)); + cards.add(new SetCardInfo("Jade Monolith", 381, Rarity.RARE, mage.cards.j.JadeMonolith.class)); + cards.add(new SetCardInfo("Jalum Tome", 382, Rarity.RARE, mage.cards.j.JalumTome.class)); + cards.add(new SetCardInfo("Jandor's Saddlebags", 383, Rarity.RARE, mage.cards.j.JandorsSaddlebags.class)); + cards.add(new SetCardInfo("Jayemdae Tome", 384, Rarity.RARE, mage.cards.j.JayemdaeTome.class)); + cards.add(new SetCardInfo("Jester's Cap", 385, Rarity.RARE, mage.cards.j.JestersCap.class)); + cards.add(new SetCardInfo("Johtull Wurm", 306, Rarity.UNCOMMON, mage.cards.j.JohtullWurm.class)); + cards.add(new SetCardInfo("Jokulhaups", 246, Rarity.RARE, mage.cards.j.Jokulhaups.class)); + cards.add(new SetCardInfo("Joven's Tools", 386, Rarity.UNCOMMON, mage.cards.j.JovensTools.class)); + cards.add(new SetCardInfo("Justice", 41, Rarity.UNCOMMON, mage.cards.j.Justice.class)); + cards.add(new SetCardInfo("Juxtapose", 95, Rarity.RARE, mage.cards.j.Juxtapose.class)); + cards.add(new SetCardInfo("Karma", 42, Rarity.UNCOMMON, mage.cards.k.Karma.class)); + cards.add(new SetCardInfo("Karplusan Forest", 421, Rarity.RARE, mage.cards.k.KarplusanForest.class)); + cards.add(new SetCardInfo("Keldon Warlord", 247, Rarity.UNCOMMON, mage.cards.k.KeldonWarlord.class)); + cards.add(new SetCardInfo("Killer Bees", 307, Rarity.UNCOMMON, mage.cards.k.KillerBees.class)); + cards.add(new SetCardInfo("Kismet", 43, Rarity.UNCOMMON, mage.cards.k.Kismet.class)); + cards.add(new SetCardInfo("Kjeldoran Dead", 170, Rarity.COMMON, mage.cards.k.KjeldoranDead.class)); + cards.add(new SetCardInfo("Kjeldoran Royal Guard", 44, Rarity.RARE, mage.cards.k.KjeldoranRoyalGuard.class)); + cards.add(new SetCardInfo("Kjeldoran Skycaptain", 45, Rarity.UNCOMMON, mage.cards.k.KjeldoranSkycaptain.class)); + cards.add(new SetCardInfo("Knight of Stromgald", 171, Rarity.UNCOMMON, mage.cards.k.KnightOfStromgald.class)); + cards.add(new SetCardInfo("Krovikan Fetish", 172, Rarity.COMMON, mage.cards.k.KrovikanFetish.class)); + cards.add(new SetCardInfo("Krovikan Sorcerer", 96, Rarity.COMMON, mage.cards.k.KrovikanSorcerer.class)); + cards.add(new SetCardInfo("Labyrinth Minotaur", 97, Rarity.COMMON, mage.cards.l.LabyrinthMinotaur.class)); + cards.add(new SetCardInfo("Leshrac's Rite", 173, Rarity.UNCOMMON, mage.cards.l.LeshracsRite.class)); + cards.add(new SetCardInfo("Leviathan", 98, Rarity.RARE, mage.cards.l.Leviathan.class)); + cards.add(new SetCardInfo("Ley Druid", 308, Rarity.COMMON, mage.cards.l.LeyDruid.class)); + cards.add(new SetCardInfo("Lhurgoyf", 309, Rarity.RARE, mage.cards.l.Lhurgoyf.class)); + cards.add(new SetCardInfo("Library of Leng", 387, Rarity.UNCOMMON, mage.cards.l.LibraryOfLeng.class)); + cards.add(new SetCardInfo("Lifeforce", 310, Rarity.UNCOMMON, mage.cards.l.Lifeforce.class)); + cards.add(new SetCardInfo("Lifetap", 99, Rarity.UNCOMMON, mage.cards.l.Lifetap.class)); + cards.add(new SetCardInfo("Living Artifact", 311, Rarity.RARE, mage.cards.l.LivingArtifact.class)); + cards.add(new SetCardInfo("Living Lands", 312, Rarity.RARE, mage.cards.l.LivingLands.class)); + cards.add(new SetCardInfo("Llanowar Elves", 313, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Lord of Atlantis", 100, Rarity.RARE, mage.cards.l.LordOfAtlantis.class)); + cards.add(new SetCardInfo("Lord of the Pit", 174, Rarity.RARE, mage.cards.l.LordOfThePit.class)); + cards.add(new SetCardInfo("Lost Soul", 175, Rarity.COMMON, mage.cards.l.LostSoul.class)); + cards.add(new SetCardInfo("Lure", 314, Rarity.UNCOMMON, mage.cards.l.Lure.class)); + cards.add(new SetCardInfo("Magus of the Unseen", 102, Rarity.RARE, mage.cards.m.MagusOfTheUnseen.class)); + cards.add(new SetCardInfo("Mana Clash", 248, Rarity.RARE, mage.cards.m.ManaClash.class)); + cards.add(new SetCardInfo("Mana Flare", 249, Rarity.RARE, mage.cards.m.ManaFlare.class)); + cards.add(new SetCardInfo("Mana Vault", 388, Rarity.RARE, mage.cards.m.ManaVault.class)); + cards.add(new SetCardInfo("Manabarbs", 250, Rarity.RARE, mage.cards.m.Manabarbs.class)); + cards.add(new SetCardInfo("Marsh Viper", 315, Rarity.COMMON, mage.cards.m.MarshViper.class)); + cards.add(new SetCardInfo("Meekstone", 389, Rarity.RARE, mage.cards.m.Meekstone.class)); + cards.add(new SetCardInfo("Memory Lapse", 103, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); + cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 104, Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); + cards.add(new SetCardInfo("Mesa Falcon", 46, Rarity.COMMON, mage.cards.m.MesaFalcon.class)); + cards.add(new SetCardInfo("Mesa Pegasus", 47, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); + cards.add(new SetCardInfo("Millstone", 390, Rarity.RARE, mage.cards.m.Millstone.class)); + cards.add(new SetCardInfo("Mind Bomb", 105, Rarity.UNCOMMON, mage.cards.m.MindBomb.class)); + cards.add(new SetCardInfo("Mind Ravel", 176, Rarity.COMMON, mage.cards.m.MindRavel.class)); + cards.add(new SetCardInfo("Mind Warp", 177, Rarity.UNCOMMON, mage.cards.m.MindWarp.class)); + cards.add(new SetCardInfo("Mindstab Thrull", 178, Rarity.COMMON, mage.cards.m.MindstabThrull.class)); + cards.add(new SetCardInfo("Mole Worms", 179, Rarity.UNCOMMON, mage.cards.m.MoleWorms.class)); + cards.add(new SetCardInfo("Mons's Goblin Raiders", 251, Rarity.COMMON, mage.cards.m.MonssGoblinRaiders.class)); + cards.add(new SetCardInfo("Mountain Goat", 252, Rarity.COMMON, mage.cards.m.MountainGoat.class)); + cards.add(new SetCardInfo("Mountain", 442, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 443, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 444, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 445, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Murk Dwellers", 180, Rarity.COMMON, mage.cards.m.MurkDwellers.class)); + cards.add(new SetCardInfo("Nature's Lore", 316, Rarity.COMMON, mage.cards.n.NaturesLore.class)); + cards.add(new SetCardInfo("Necrite", 181, Rarity.COMMON, mage.cards.n.Necrite.class)); + cards.add(new SetCardInfo("Necropotence", 182, Rarity.RARE, mage.cards.n.Necropotence.class)); + cards.add(new SetCardInfo("Nether Shadow", 183, Rarity.RARE, mage.cards.n.NetherShadow.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", 391, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); + cards.add(new SetCardInfo("Nightmare", 184, Rarity.RARE, mage.cards.n.Nightmare.class)); + cards.add(new SetCardInfo("Obelisk of Undoing", 392, Rarity.RARE, mage.cards.o.ObeliskOfUndoing.class)); + cards.add(new SetCardInfo("Orcish Artillery", 253, Rarity.UNCOMMON, mage.cards.o.OrcishArtillery.class)); + cards.add(new SetCardInfo("Orcish Captain", 254, Rarity.UNCOMMON, mage.cards.o.OrcishCaptain.class)); + cards.add(new SetCardInfo("Orcish Oriflamme", 257, Rarity.UNCOMMON, mage.cards.o.OrcishOriflamme.class)); + cards.add(new SetCardInfo("Orcish Squatters", 258, Rarity.RARE, mage.cards.o.OrcishSquatters.class)); + cards.add(new SetCardInfo("Order of the Sacred Torch", 48, Rarity.RARE, mage.cards.o.OrderOfTheSacredTorch.class)); + cards.add(new SetCardInfo("Order of the White Shield", 49, Rarity.UNCOMMON, mage.cards.o.OrderOfTheWhiteShield.class)); + cards.add(new SetCardInfo("Orgg", 259, Rarity.RARE, mage.cards.o.Orgg.class)); + cards.add(new SetCardInfo("Ornithopter", 393, Rarity.UNCOMMON, mage.cards.o.Ornithopter.class)); + cards.add(new SetCardInfo("Panic", 260, Rarity.COMMON, mage.cards.p.Panic.class)); + cards.add(new SetCardInfo("Paralyze", 185, Rarity.COMMON, mage.cards.p.Paralyze.class)); + cards.add(new SetCardInfo("Pearled Unicorn", 50, Rarity.COMMON, mage.cards.p.PearledUnicorn.class)); + cards.add(new SetCardInfo("Pentagram of the Ages", 394, Rarity.RARE, mage.cards.p.PentagramOfTheAges.class)); + cards.add(new SetCardInfo("Personal Incarnation", 51, Rarity.RARE, mage.cards.p.PersonalIncarnation.class)); + cards.add(new SetCardInfo("Pestilence", 186, Rarity.COMMON, mage.cards.p.Pestilence.class)); + cards.add(new SetCardInfo("Phantasmal Forces", 106, Rarity.UNCOMMON, mage.cards.p.PhantasmalForces.class)); + cards.add(new SetCardInfo("Phantasmal Terrain", 107, Rarity.COMMON, mage.cards.p.PhantasmalTerrain.class)); + cards.add(new SetCardInfo("Phantom Monster", 108, Rarity.UNCOMMON, mage.cards.p.PhantomMonster.class)); + cards.add(new SetCardInfo("Pikemen", 52, Rarity.COMMON, mage.cards.p.Pikemen.class)); + cards.add(new SetCardInfo("Pirate Ship", 109, Rarity.RARE, mage.cards.p.PirateShip.class)); + cards.add(new SetCardInfo("Pit Scorpion", 187, Rarity.COMMON, mage.cards.p.PitScorpion.class)); + cards.add(new SetCardInfo("Plague Rats", 188, Rarity.COMMON, mage.cards.p.PlagueRats.class)); + cards.add(new SetCardInfo("Plains", 430, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 431, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 432, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 433, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Portent", 110, Rarity.COMMON, mage.cards.p.Portent.class)); + cards.add(new SetCardInfo("Power Sink", 111, Rarity.UNCOMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Pox", 189, Rarity.RARE, mage.cards.p.Pox.class)); + cards.add(new SetCardInfo("Pradesh Gypsies", 317, Rarity.COMMON, mage.cards.p.PradeshGypsies.class)); + cards.add(new SetCardInfo("Primal Clay", 395, Rarity.RARE, mage.cards.p.PrimalClay.class)); + cards.add(new SetCardInfo("Primal Order", 318, Rarity.RARE, mage.cards.p.PrimalOrder.class)); + cards.add(new SetCardInfo("Primordial Ooze", 261, Rarity.UNCOMMON, mage.cards.p.PrimordialOoze.class)); + cards.add(new SetCardInfo("Prismatic Ward", 53, Rarity.COMMON, mage.cards.p.PrismaticWard.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", 112, Rarity.COMMON, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("Psychic Venom", 113, Rarity.COMMON, mage.cards.p.PsychicVenom.class)); + cards.add(new SetCardInfo("Pyroblast", 262, Rarity.UNCOMMON, mage.cards.p.Pyroblast.class)); + cards.add(new SetCardInfo("Pyrotechnics", 263, Rarity.UNCOMMON, mage.cards.p.Pyrotechnics.class)); + cards.add(new SetCardInfo("Rabid Wombat", 319, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); + cards.add(new SetCardInfo("Radjan Spirit", 320, Rarity.UNCOMMON, mage.cards.r.RadjanSpirit.class)); + cards.add(new SetCardInfo("Rag Man", 190, Rarity.RARE, mage.cards.r.RagMan.class)); + cards.add(new SetCardInfo("Raise Dead", 191, Rarity.COMMON, mage.cards.r.RaiseDead.class)); + cards.add(new SetCardInfo("Ray of Command", 114, Rarity.COMMON, mage.cards.r.RayOfCommand.class)); + cards.add(new SetCardInfo("Recall", 115, Rarity.RARE, mage.cards.r.Recall.class)); + cards.add(new SetCardInfo("Reef Pirates", 116, Rarity.COMMON, mage.cards.r.ReefPirates.class)); + cards.add(new SetCardInfo("Regeneration", 321, Rarity.COMMON, mage.cards.r.Regeneration.class)); + cards.add(new SetCardInfo("Remove Soul", 117, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); + cards.add(new SetCardInfo("Repentant Blacksmith", 54, Rarity.COMMON, mage.cards.r.RepentantBlacksmith.class)); + cards.add(new SetCardInfo("Reverse Damage", 55, Rarity.RARE, mage.cards.r.ReverseDamage.class)); + cards.add(new SetCardInfo("Righteousness", 56, Rarity.RARE, mage.cards.r.Righteousness.class)); + cards.add(new SetCardInfo("Rod of Ruin", 396, Rarity.UNCOMMON, mage.cards.r.RodOfRuin.class)); + cards.add(new SetCardInfo("Ruins of Trokair", 422, Rarity.UNCOMMON, mage.cards.r.RuinsOfTrokair.class)); + cards.add(new SetCardInfo("Sabretooth Tiger", 264, Rarity.COMMON, mage.cards.s.SabretoothTiger.class)); + cards.add(new SetCardInfo("Samite Healer", 58, Rarity.COMMON, mage.cards.s.SamiteHealer.class)); + cards.add(new SetCardInfo("Sand Silos", 423, Rarity.RARE, mage.cards.s.SandSilos.class)); + cards.add(new SetCardInfo("Scaled Wurm", 322, Rarity.COMMON, mage.cards.s.ScaledWurm.class)); + cards.add(new SetCardInfo("Scathe Zombies", 192, Rarity.COMMON, mage.cards.s.ScatheZombies.class)); + cards.add(new SetCardInfo("Scavenger Folk", 323, Rarity.COMMON, mage.cards.s.ScavengerFolk.class)); + cards.add(new SetCardInfo("Scryb Sprites", 324, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Sea Serpent", 118, Rarity.COMMON, mage.cards.s.SeaSerpent.class)); + cards.add(new SetCardInfo("Sea Spirit", 119, Rarity.UNCOMMON, mage.cards.s.SeaSpirit.class)); + cards.add(new SetCardInfo("Sea Sprite", 120, Rarity.UNCOMMON, mage.cards.s.SeaSprite.class)); + cards.add(new SetCardInfo("Seasinger", 121, Rarity.UNCOMMON, mage.cards.s.Seasinger.class)); + cards.add(new SetCardInfo("Segovian Leviathan", 122, Rarity.UNCOMMON, mage.cards.s.SegovianLeviathan.class)); + cards.add(new SetCardInfo("Sengir Autocrat", 193, Rarity.RARE, mage.cards.s.SengirAutocrat.class)); + cards.add(new SetCardInfo("Seraph", 59, Rarity.RARE, mage.cards.s.Seraph.class)); + cards.add(new SetCardInfo("Serpent Generator", 397, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); + cards.add(new SetCardInfo("Serra Bestiary", 60, Rarity.UNCOMMON, mage.cards.s.SerraBestiary.class)); + cards.add(new SetCardInfo("Serra Paladin", 61, Rarity.UNCOMMON, mage.cards.s.SerraPaladin.class)); + cards.add(new SetCardInfo("Shanodin Dryads", 325, Rarity.COMMON, mage.cards.s.ShanodinDryads.class)); + cards.add(new SetCardInfo("Shapeshifter", 398, Rarity.UNCOMMON, mage.cards.s.Shapeshifter.class)); + cards.add(new SetCardInfo("Shatter", 265, Rarity.COMMON, mage.cards.s.Shatter.class)); + cards.add(new SetCardInfo("Shatterstorm", 266, Rarity.UNCOMMON, mage.cards.s.Shatterstorm.class)); + cards.add(new SetCardInfo("Shield Bearer", 62, Rarity.COMMON, mage.cards.s.ShieldBearer.class)); + cards.add(new SetCardInfo("Shield Wall", 63, Rarity.COMMON, mage.cards.s.ShieldWall.class)); + cards.add(new SetCardInfo("Shivan Dragon", 267, Rarity.RARE, mage.cards.s.ShivanDragon.class)); + cards.add(new SetCardInfo("Shrink", 326, Rarity.COMMON, mage.cards.s.Shrink.class)); + cards.add(new SetCardInfo("Sibilant Spirit", 123, Rarity.RARE, mage.cards.s.SibilantSpirit.class)); + cards.add(new SetCardInfo("Skull Catapult", 399, Rarity.UNCOMMON, mage.cards.s.SkullCatapult.class)); + cards.add(new SetCardInfo("Smoke", 268, Rarity.RARE, mage.cards.s.Smoke.class)); + cards.add(new SetCardInfo("Sorceress Queen", 194, Rarity.RARE, mage.cards.s.SorceressQueen.class)); + cards.add(new SetCardInfo("Soul Barrier", 125, Rarity.COMMON, mage.cards.s.SoulBarrier.class)); + cards.add(new SetCardInfo("Soul Net", 400, Rarity.UNCOMMON, mage.cards.s.SoulNet.class)); + cards.add(new SetCardInfo("Spell Blast", 126, Rarity.COMMON, mage.cards.s.SpellBlast.class)); + cards.add(new SetCardInfo("Spirit Link", 64, Rarity.UNCOMMON, mage.cards.s.SpiritLink.class)); + cards.add(new SetCardInfo("Stampede", 327, Rarity.RARE, mage.cards.s.Stampede.class)); + cards.add(new SetCardInfo("Stasis", 127, Rarity.RARE, mage.cards.s.Stasis.class)); + cards.add(new SetCardInfo("Steal Artifact", 128, Rarity.UNCOMMON, mage.cards.s.StealArtifact.class)); + cards.add(new SetCardInfo("Stone Giant", 269, Rarity.UNCOMMON, mage.cards.s.StoneGiant.class)); + cards.add(new SetCardInfo("Stone Rain", 270, Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Stone Spirit", 271, Rarity.UNCOMMON, mage.cards.s.StoneSpirit.class)); + cards.add(new SetCardInfo("Stream of Life", 328, Rarity.COMMON, mage.cards.s.StreamOfLife.class)); + cards.add(new SetCardInfo("Stromgald Cabal", 195, Rarity.RARE, mage.cards.s.StromgaldCabal.class)); + cards.add(new SetCardInfo("Sulfurous Springs", 424, Rarity.RARE, mage.cards.s.SulfurousSprings.class)); + cards.add(new SetCardInfo("Svyelunite Temple", 425, Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class)); + cards.add(new SetCardInfo("Swamp", 438, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 439, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 440, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 441, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Library", 329, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); + cards.add(new SetCardInfo("Tarpan", 330, Rarity.COMMON, mage.cards.t.Tarpan.class)); + cards.add(new SetCardInfo("Tawnos's Weaponry", 401, Rarity.UNCOMMON, mage.cards.t.TawnossWeaponry.class)); + cards.add(new SetCardInfo("Terror", 196, Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("The Brute", 272, Rarity.COMMON, mage.cards.t.TheBrute.class)); + cards.add(new SetCardInfo("The Hive", 402, Rarity.RARE, mage.cards.t.TheHive.class)); + cards.add(new SetCardInfo("The Wretched", 197, Rarity.RARE, mage.cards.t.TheWretched.class)); + cards.add(new SetCardInfo("Thicket Basilisk", 331, Rarity.UNCOMMON, mage.cards.t.ThicketBasilisk.class)); + cards.add(new SetCardInfo("Throne of Bone", 403, Rarity.UNCOMMON, mage.cards.t.ThroneOfBone.class)); + cards.add(new SetCardInfo("Thrull Retainer", 198, Rarity.UNCOMMON, mage.cards.t.ThrullRetainer.class)); + cards.add(new SetCardInfo("Time Bomb", 404, Rarity.RARE, mage.cards.t.TimeBomb.class)); + cards.add(new SetCardInfo("Time Elemental", 129, Rarity.RARE, mage.cards.t.TimeElemental.class)); + cards.add(new SetCardInfo("Titania's Song", 332, Rarity.RARE, mage.cards.t.TitaniasSong.class)); + cards.add(new SetCardInfo("Torture", 199, Rarity.COMMON, mage.cards.t.Torture.class)); + cards.add(new SetCardInfo("Touch of Death", 200, Rarity.COMMON, mage.cards.t.TouchOfDeath.class)); + cards.add(new SetCardInfo("Tranquility", 333, Rarity.COMMON, mage.cards.t.Tranquility.class)); + cards.add(new SetCardInfo("Truce", 65, Rarity.RARE, mage.cards.t.Truce.class)); + cards.add(new SetCardInfo("Tsunami", 334, Rarity.UNCOMMON, mage.cards.t.Tsunami.class)); + cards.add(new SetCardInfo("Tundra Wolves", 66, Rarity.COMMON, mage.cards.t.TundraWolves.class)); + cards.add(new SetCardInfo("Twiddle", 130, Rarity.COMMON, mage.cards.t.Twiddle.class)); + cards.add(new SetCardInfo("Underground River", 426, Rarity.RARE, mage.cards.u.UndergroundRiver.class)); + cards.add(new SetCardInfo("Unholy Strength", 201, Rarity.COMMON, mage.cards.u.UnholyStrength.class)); + cards.add(new SetCardInfo("Unstable Mutation", 131, Rarity.COMMON, mage.cards.u.UnstableMutation.class)); + cards.add(new SetCardInfo("Unsummon", 132, Rarity.COMMON, mage.cards.u.Unsummon.class)); + cards.add(new SetCardInfo("Untamed Wilds", 335, Rarity.UNCOMMON, mage.cards.u.UntamedWilds.class)); + cards.add(new SetCardInfo("Updraft", 133, Rarity.COMMON, mage.cards.u.Updraft.class)); + cards.add(new SetCardInfo("Urza's Avenger", 405, Rarity.RARE, mage.cards.u.UrzasAvenger.class)); + cards.add(new SetCardInfo("Urza's Bauble", 406, Rarity.UNCOMMON, mage.cards.u.UrzasBauble.class)); + cards.add(new SetCardInfo("Urza's Mine", 427, Rarity.COMMON, mage.cards.u.UrzasMine.class)); + cards.add(new SetCardInfo("Urza's Power Plant", 428, Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class)); + cards.add(new SetCardInfo("Urza's Tower", 429, Rarity.COMMON, mage.cards.u.UrzasTower.class)); + cards.add(new SetCardInfo("Vampire Bats", 202, Rarity.COMMON, mage.cards.v.VampireBats.class)); + cards.add(new SetCardInfo("Venom", 336, Rarity.COMMON, mage.cards.v.Venom.class)); + cards.add(new SetCardInfo("Verduran Enchantress", 337, Rarity.RARE, mage.cards.v.VerduranEnchantress.class)); + cards.add(new SetCardInfo("Vodalian Soldiers", 134, Rarity.COMMON, mage.cards.v.VodalianSoldiers.class)); + cards.add(new SetCardInfo("Wall of Air", 135, Rarity.UNCOMMON, mage.cards.w.WallOfAir.class)); + cards.add(new SetCardInfo("Wall of Bone", 203, Rarity.UNCOMMON, mage.cards.w.WallOfBone.class)); + cards.add(new SetCardInfo("Wall of Brambles", 338, Rarity.UNCOMMON, mage.cards.w.WallOfBrambles.class)); + cards.add(new SetCardInfo("Wall of Fire", 273, Rarity.UNCOMMON, mage.cards.w.WallOfFire.class)); + cards.add(new SetCardInfo("Wall of Spears", 407, Rarity.COMMON, mage.cards.w.WallOfSpears.class)); + cards.add(new SetCardInfo("Wall of Stone", 274, Rarity.UNCOMMON, mage.cards.w.WallOfStone.class)); + cards.add(new SetCardInfo("Wall of Swords", 67, Rarity.UNCOMMON, mage.cards.w.WallOfSwords.class)); + cards.add(new SetCardInfo("Wanderlust", 339, Rarity.UNCOMMON, mage.cards.w.Wanderlust.class)); + cards.add(new SetCardInfo("War Mammoth", 340, Rarity.COMMON, mage.cards.w.WarMammoth.class)); + cards.add(new SetCardInfo("Warp Artifact", 204, Rarity.RARE, mage.cards.w.WarpArtifact.class)); + cards.add(new SetCardInfo("Weakness", 205, Rarity.COMMON, mage.cards.w.Weakness.class)); + cards.add(new SetCardInfo("Whirling Dervish", 341, Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class)); + cards.add(new SetCardInfo("White Knight", 68, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); + cards.add(new SetCardInfo("Wild Growth", 342, Rarity.COMMON, mage.cards.w.WildGrowth.class)); + cards.add(new SetCardInfo("Wind Spirit", 136, Rarity.UNCOMMON, mage.cards.w.WindSpirit.class)); + cards.add(new SetCardInfo("Winds of Change", 275, Rarity.RARE, mage.cards.w.WindsOfChange.class)); + cards.add(new SetCardInfo("Winter Blast", 343, Rarity.UNCOMMON, mage.cards.w.WinterBlast.class)); + cards.add(new SetCardInfo("Winter Orb", 408, Rarity.RARE, mage.cards.w.WinterOrb.class)); + cards.add(new SetCardInfo("Wolverine Pack", 344, Rarity.UNCOMMON, mage.cards.w.WolverinePack.class)); + cards.add(new SetCardInfo("Wooden Sphere", 409, Rarity.UNCOMMON, mage.cards.w.WoodenSphere.class)); + cards.add(new SetCardInfo("Word of Blasting", 276, Rarity.UNCOMMON, mage.cards.w.WordOfBlasting.class)); + cards.add(new SetCardInfo("Wrath of God", 69, Rarity.RARE, mage.cards.w.WrathOfGod.class)); + cards.add(new SetCardInfo("Wyluli Wolf", 345, Rarity.RARE, mage.cards.w.WyluliWolf.class)); + cards.add(new SetCardInfo("Xenic Poltergeist", 206, Rarity.RARE, mage.cards.x.XenicPoltergeist.class)); + cards.add(new SetCardInfo("Zephyr Falcon", 137, Rarity.COMMON, mage.cards.z.ZephyrFalcon.class)); + cards.add(new SetCardInfo("Zombie Master", 207, Rarity.RARE, mage.cards.z.ZombieMaster.class)); + cards.add(new SetCardInfo("Zur's Weirding", 138, Rarity.RARE, mage.cards.z.ZursWeirding.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Legends.java b/Mage.Sets/src/mage/sets/Legends.java index c62c211ba4d..b61739ac0af 100644 --- a/Mage.Sets/src/mage/sets/Legends.java +++ b/Mage.Sets/src/mage/sets/Legends.java @@ -1,329 +1,329 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author North - */ -public final class Legends extends ExpansionSet { - - private static final Legends instance = new Legends(); - - public static Legends getInstance() { - return instance; - } - - private Legends() { - super("Legends", "LEG", ExpansionSet.buildDate(1994, 6, 1), SetType.EXPANSION); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Abomination", 87, Rarity.UNCOMMON, mage.cards.a.Abomination.class)); - cards.add(new SetCardInfo("Acid Rain", 44, Rarity.RARE, mage.cards.a.AcidRain.class)); - cards.add(new SetCardInfo("Active Volcano", 130, Rarity.COMMON, mage.cards.a.ActiveVolcano.class)); - cards.add(new SetCardInfo("Adun Oakenshield", 216, Rarity.RARE, mage.cards.a.AdunOakenshield.class)); - cards.add(new SetCardInfo("Adventurers' Guildhouse", 300, Rarity.UNCOMMON, mage.cards.a.AdventurersGuildhouse.class)); - cards.add(new SetCardInfo("Aerathi Berserker", 131, Rarity.UNCOMMON, mage.cards.a.AerathiBerserker.class)); - cards.add(new SetCardInfo("Aisling Leprechaun", 173, Rarity.COMMON, mage.cards.a.AislingLeprechaun.class)); - cards.add(new SetCardInfo("Akron Legionnaire", 1, Rarity.RARE, mage.cards.a.AkronLegionnaire.class)); - cards.add(new SetCardInfo("Al-abara's Carpet", 271, Rarity.RARE, mage.cards.a.AlAbarasCarpet.class)); - cards.add(new SetCardInfo("Alabaster Potion", 2, Rarity.COMMON, mage.cards.a.AlabasterPotion.class)); - cards.add(new SetCardInfo("Alchor's Tomb", 272, Rarity.RARE, mage.cards.a.AlchorsTomb.class)); - cards.add(new SetCardInfo("All Hallow's Eve", 88, Rarity.RARE, mage.cards.a.AllHallowsEve.class)); - cards.add(new SetCardInfo("Amrou Kithkin", 3, Rarity.COMMON, mage.cards.a.AmrouKithkin.class)); - cards.add(new SetCardInfo("Angelic Voices", 4, Rarity.RARE, mage.cards.a.AngelicVoices.class)); - cards.add(new SetCardInfo("Angus Mackenzie", 217, Rarity.RARE, mage.cards.a.AngusMackenzie.class)); - cards.add(new SetCardInfo("Anti-Magic Aura", 45, Rarity.COMMON, mage.cards.a.AntiMagicAura.class)); - cards.add(new SetCardInfo("Arboria", 174, Rarity.UNCOMMON, mage.cards.a.Arboria.class)); - cards.add(new SetCardInfo("Arcades Sabboth", 218, Rarity.RARE, mage.cards.a.ArcadesSabboth.class)); - cards.add(new SetCardInfo("Arena of the Ancients", 273, Rarity.RARE, mage.cards.a.ArenaOfTheAncients.class)); - cards.add(new SetCardInfo("Avoid Fate", 175, Rarity.COMMON, mage.cards.a.AvoidFate.class)); - cards.add(new SetCardInfo("Axelrod Gunnarson", 219, Rarity.RARE, mage.cards.a.AxelrodGunnarson.class)); - cards.add(new SetCardInfo("Ayesha Tanaka", 220, Rarity.RARE, mage.cards.a.AyeshaTanaka.class)); - cards.add(new SetCardInfo("Azure Drake", 46, Rarity.UNCOMMON, mage.cards.a.AzureDrake.class)); - cards.add(new SetCardInfo("Backfire", 47, Rarity.UNCOMMON, mage.cards.b.Backfire.class)); - cards.add(new SetCardInfo("Barbary Apes", 176, Rarity.COMMON, mage.cards.b.BarbaryApes.class)); - cards.add(new SetCardInfo("Barktooth Warbeard", 221, Rarity.UNCOMMON, mage.cards.b.BarktoothWarbeard.class)); - cards.add(new SetCardInfo("Bartel Runeaxe", 222, Rarity.RARE, mage.cards.b.BartelRuneaxe.class)); - cards.add(new SetCardInfo("Beasts of Bogardan", 133, Rarity.UNCOMMON, mage.cards.b.BeastsOfBogardan.class)); - cards.add(new SetCardInfo("Black Mana Battery", 274, Rarity.UNCOMMON, mage.cards.b.BlackManaBattery.class)); - cards.add(new SetCardInfo("Blazing Effigy", 134, Rarity.COMMON, mage.cards.b.BlazingEffigy.class)); - cards.add(new SetCardInfo("Blight", 89, Rarity.UNCOMMON, mage.cards.b.Blight.class)); - cards.add(new SetCardInfo("Blood Lust", 135, Rarity.UNCOMMON, mage.cards.b.BloodLust.class)); - cards.add(new SetCardInfo("Blue Mana Battery", 275, Rarity.UNCOMMON, mage.cards.b.BlueManaBattery.class)); - cards.add(new SetCardInfo("Boomerang", 48, Rarity.COMMON, mage.cards.b.Boomerang.class)); - cards.add(new SetCardInfo("Boris Devilboon", 223, Rarity.RARE, mage.cards.b.BorisDevilboon.class)); - cards.add(new SetCardInfo("Brine Hag", 49, Rarity.UNCOMMON, mage.cards.b.BrineHag.class)); - cards.add(new SetCardInfo("Bronze Horse", 276, Rarity.RARE, mage.cards.b.BronzeHorse.class)); - cards.add(new SetCardInfo("Carrion Ants", 90, Rarity.RARE, mage.cards.c.CarrionAnts.class)); - cards.add(new SetCardInfo("Cat Warriors", 177, Rarity.COMMON, mage.cards.c.CatWarriors.class)); - cards.add(new SetCardInfo("Cathedral of Serra", 301, Rarity.UNCOMMON, mage.cards.c.CathedralOfSerra.class)); - cards.add(new SetCardInfo("Caverns of Despair", 136, Rarity.RARE, mage.cards.c.CavernsOfDespair.class)); - cards.add(new SetCardInfo("Chain Lightning", 137, Rarity.COMMON, mage.cards.c.ChainLightning.class)); - cards.add(new SetCardInfo("Chains of Mephistopheles", 91, Rarity.RARE, mage.cards.c.ChainsOfMephistopheles.class)); - cards.add(new SetCardInfo("Chromium", 224, Rarity.RARE, mage.cards.c.Chromium.class)); - cards.add(new SetCardInfo("Cleanse", 5, Rarity.RARE, mage.cards.c.Cleanse.class)); - cards.add(new SetCardInfo("Clergy of the Holy Nimbus", 6, Rarity.COMMON, mage.cards.c.ClergyOfTheHolyNimbus.class)); - cards.add(new SetCardInfo("Concordant Crossroads", 179, Rarity.RARE, mage.cards.c.ConcordantCrossroads.class)); - cards.add(new SetCardInfo("Cocoon", 178, Rarity.UNCOMMON, mage.cards.c.Cocoon.class)); - cards.add(new SetCardInfo("Cosmic Horror", 92, Rarity.RARE, mage.cards.c.CosmicHorror.class)); - cards.add(new SetCardInfo("Craw Giant", 180, Rarity.UNCOMMON, mage.cards.c.CrawGiant.class)); - cards.add(new SetCardInfo("Crevasse", 138, Rarity.UNCOMMON, mage.cards.c.Crevasse.class)); - cards.add(new SetCardInfo("Crimson Kobolds", 139, Rarity.COMMON, mage.cards.c.CrimsonKobolds.class)); - cards.add(new SetCardInfo("Crimson Manticore", 140, Rarity.RARE, mage.cards.c.CrimsonManticore.class)); - cards.add(new SetCardInfo("Crookshank Kobolds", 141, Rarity.COMMON, mage.cards.c.CrookshankKobolds.class)); - cards.add(new SetCardInfo("Cyclopean Mummy", 93, Rarity.COMMON, mage.cards.c.CyclopeanMummy.class)); - cards.add(new SetCardInfo("D'Avenant Archer", 7, Rarity.COMMON, mage.cards.d.DAvenantArcher.class)); - cards.add(new SetCardInfo("Dakkon Blackblade", 225, Rarity.RARE, mage.cards.d.DakkonBlackblade.class)); - cards.add(new SetCardInfo("Darkness", 94, Rarity.COMMON, mage.cards.d.Darkness.class)); - cards.add(new SetCardInfo("Deadfall", 181, Rarity.UNCOMMON, mage.cards.d.Deadfall.class)); - cards.add(new SetCardInfo("Demonic Torment", 95, Rarity.UNCOMMON, mage.cards.d.DemonicTorment.class)); - cards.add(new SetCardInfo("Devouring Deep", 50, Rarity.COMMON, mage.cards.d.DevouringDeep.class)); - cards.add(new SetCardInfo("Disharmony", 142, Rarity.RARE, mage.cards.d.Disharmony.class)); - cards.add(new SetCardInfo("Divine Intervention", 8, Rarity.RARE, mage.cards.d.DivineIntervention.class)); - cards.add(new SetCardInfo("Divine Offering", 9, Rarity.COMMON, mage.cards.d.DivineOffering.class)); - cards.add(new SetCardInfo("Divine Transformation", 10, Rarity.RARE, mage.cards.d.DivineTransformation.class)); - cards.add(new SetCardInfo("Dream Coat", 51, Rarity.UNCOMMON, mage.cards.d.DreamCoat.class)); - cards.add(new SetCardInfo("Durkwood Boars", 182, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); - cards.add(new SetCardInfo("Dwarven Song", 143, Rarity.UNCOMMON, mage.cards.d.DwarvenSong.class)); - cards.add(new SetCardInfo("Elder Land Wurm", 11, Rarity.RARE, mage.cards.e.ElderLandWurm.class)); - cards.add(new SetCardInfo("Elder Spawn", 52, Rarity.RARE, mage.cards.e.ElderSpawn.class)); - cards.add(new SetCardInfo("Elven Riders", 183, Rarity.RARE, mage.cards.e.ElvenRiders.class)); - cards.add(new SetCardInfo("Emerald Dragonfly", 184, Rarity.COMMON, mage.cards.e.EmeraldDragonfly.class)); - cards.add(new SetCardInfo("Enchanted Being", 12, Rarity.COMMON, mage.cards.e.EnchantedBeing.class)); - cards.add(new SetCardInfo("Enchantment Alteration", 53, Rarity.COMMON, mage.cards.e.EnchantmentAlteration.class)); - cards.add(new SetCardInfo("Energy Tap", 54, Rarity.COMMON, mage.cards.e.EnergyTap.class)); - cards.add(new SetCardInfo("Eternal Warrior", 144, Rarity.UNCOMMON, mage.cards.e.EternalWarrior.class)); - cards.add(new SetCardInfo("Eureka", 185, Rarity.RARE, mage.cards.e.Eureka.class)); - cards.add(new SetCardInfo("Evil Eye of Orms-by-Gore", 96, Rarity.UNCOMMON, mage.cards.e.EvilEyeOfOrmsByGore.class)); - cards.add(new SetCardInfo("Fallen Angel", 97, Rarity.UNCOMMON, mage.cards.f.FallenAngel.class)); - cards.add(new SetCardInfo("Feint", 146, Rarity.COMMON, mage.cards.f.Feint.class)); - cards.add(new SetCardInfo("Field of Dreams", 55, Rarity.RARE, mage.cards.f.FieldOfDreams.class)); - cards.add(new SetCardInfo("Fire Sprites", 186, Rarity.COMMON, mage.cards.f.FireSprites.class)); - cards.add(new SetCardInfo("Flash Counter", 56, Rarity.COMMON, mage.cards.f.FlashCounter.class)); - cards.add(new SetCardInfo("Flash Flood", 57, Rarity.COMMON, mage.cards.f.FlashFlood.class)); - cards.add(new SetCardInfo("Floral Spuzzem", 187, Rarity.UNCOMMON, mage.cards.f.FloralSpuzzem.class)); - cards.add(new SetCardInfo("Force Spike", 58, Rarity.COMMON, mage.cards.f.ForceSpike.class)); - cards.add(new SetCardInfo("Forethought Amulet", 277, Rarity.RARE, mage.cards.f.ForethoughtAmulet.class)); - cards.add(new SetCardInfo("Fortified Area", 14, Rarity.UNCOMMON, mage.cards.f.FortifiedArea.class)); - cards.add(new SetCardInfo("Frost Giant", 148, Rarity.UNCOMMON, mage.cards.f.FrostGiant.class)); - cards.add(new SetCardInfo("Gabriel Angelfire", 226, Rarity.RARE, mage.cards.g.GabrielAngelfire.class)); - cards.add(new SetCardInfo("Gaseous Form", 59, Rarity.COMMON, mage.cards.g.GaseousForm.class)); - cards.add(new SetCardInfo("Gauntlets of Chaos", 278, Rarity.RARE, mage.cards.g.GauntletsOfChaos.class)); - cards.add(new SetCardInfo("Ghosts of the Damned", 98, Rarity.COMMON, mage.cards.g.GhostsOfTheDamned.class)); - cards.add(new SetCardInfo("Giant Slug", 99, Rarity.COMMON, mage.cards.g.GiantSlug.class)); - cards.add(new SetCardInfo("Giant Strength", 149, Rarity.COMMON, mage.cards.g.GiantStrength.class)); - cards.add(new SetCardInfo("Giant Turtle", 188, Rarity.COMMON, mage.cards.g.GiantTurtle.class)); - cards.add(new SetCardInfo("Glyph of Delusion", 60, Rarity.COMMON, mage.cards.g.GlyphOfDelusion.class)); - cards.add(new SetCardInfo("Glyph of Destruction", 150, Rarity.COMMON, mage.cards.g.GlyphOfDestruction.class)); - cards.add(new SetCardInfo("Glyph of Doom", 100, Rarity.COMMON, mage.cards.g.GlyphOfDoom.class)); - cards.add(new SetCardInfo("Glyph of Life", 15, Rarity.COMMON, mage.cards.g.GlyphOfLife.class)); - cards.add(new SetCardInfo("Glyph of Reincarnation", 189, Rarity.COMMON, mage.cards.g.GlyphOfReincarnation.class)); - cards.add(new SetCardInfo("Gosta Dirk", 227, Rarity.RARE, mage.cards.g.GostaDirk.class)); - cards.add(new SetCardInfo("Gravity Sphere", 151, Rarity.RARE, mage.cards.g.GravitySphere.class)); - cards.add(new SetCardInfo("Great Defender", 16, Rarity.UNCOMMON, mage.cards.g.GreatDefender.class)); - cards.add(new SetCardInfo("Great Wall", 17, Rarity.UNCOMMON, mage.cards.g.GreatWall.class)); - cards.add(new SetCardInfo("Greater Realm of Preservation", 18, Rarity.UNCOMMON, mage.cards.g.GreaterRealmOfPreservation.class)); - cards.add(new SetCardInfo("Greed", 101, Rarity.RARE, mage.cards.g.Greed.class)); - cards.add(new SetCardInfo("Green Mana Battery", 279, Rarity.UNCOMMON, mage.cards.g.GreenManaBattery.class)); - cards.add(new SetCardInfo("Gwendlyn Di Corci", 228, Rarity.RARE, mage.cards.g.GwendlynDiCorci.class)); - cards.add(new SetCardInfo("Halfdane", 229, Rarity.RARE, mage.cards.h.Halfdane.class)); - cards.add(new SetCardInfo("Hammerheim", 302, Rarity.UNCOMMON, mage.cards.h.Hammerheim.class)); - cards.add(new SetCardInfo("Hazezon Tamar", 230, Rarity.RARE, mage.cards.h.HazezonTamar.class)); - cards.add(new SetCardInfo("Headless Horseman", 102, Rarity.COMMON, mage.cards.h.HeadlessHorseman.class)); - cards.add(new SetCardInfo("Heaven's Gate", 19, Rarity.UNCOMMON, mage.cards.h.HeavensGate.class)); - cards.add(new SetCardInfo("Hell Swarm", 103, Rarity.COMMON, mage.cards.h.HellSwarm.class)); - cards.add(new SetCardInfo("Hell's Caretaker", 104, Rarity.RARE, mage.cards.h.HellsCaretaker.class)); - cards.add(new SetCardInfo("Hellfire", 105, Rarity.RARE, mage.cards.h.Hellfire.class)); - cards.add(new SetCardInfo("Holy Day", 20, Rarity.COMMON, mage.cards.h.HolyDay.class)); - cards.add(new SetCardInfo("Horn of Deafening", 280, Rarity.RARE, mage.cards.h.HornOfDeafening.class)); - cards.add(new SetCardInfo("Hornet Cobra", 190, Rarity.COMMON, mage.cards.h.HornetCobra.class)); - cards.add(new SetCardInfo("Horror of Horrors", 106, Rarity.UNCOMMON, mage.cards.h.HorrorOfHorrors.class)); - cards.add(new SetCardInfo("Hunding Gjornersen", 231, Rarity.UNCOMMON, mage.cards.h.HundingGjornersen.class)); - cards.add(new SetCardInfo("Hyperion Blacksmith", 152, Rarity.UNCOMMON, mage.cards.h.HyperionBlacksmith.class)); - cards.add(new SetCardInfo("Ichneumon Druid", 191, Rarity.UNCOMMON, mage.cards.i.IchneumonDruid.class)); - cards.add(new SetCardInfo("Immolation", 153, Rarity.COMMON, mage.cards.i.Immolation.class)); - cards.add(new SetCardInfo("Imprison", 107, Rarity.RARE, mage.cards.i.Imprison.class)); - cards.add(new SetCardInfo("In the Eye of Chaos", 61, Rarity.RARE, mage.cards.i.InTheEyeOfChaos.class)); - cards.add(new SetCardInfo("Indestructible Aura", 21, Rarity.COMMON, mage.cards.i.IndestructibleAura.class)); - cards.add(new SetCardInfo("Infernal Medusa", 108, Rarity.UNCOMMON, mage.cards.i.InfernalMedusa.class)); - cards.add(new SetCardInfo("Infinite Authority", 22, Rarity.RARE, mage.cards.i.InfiniteAuthority.class)); - cards.add(new SetCardInfo("Invoke Prejudice", 62, Rarity.RARE, mage.cards.i.InvokePrejudice.class)); - cards.add(new SetCardInfo("Ivory Guardians", 23, Rarity.UNCOMMON, mage.cards.i.IvoryGuardians.class)); - cards.add(new SetCardInfo("Jacques le Vert", 232, Rarity.RARE, mage.cards.j.JacquesLeVert.class)); - cards.add(new SetCardInfo("Jasmine Boreal", 233, Rarity.UNCOMMON, mage.cards.j.JasmineBoreal.class)); - cards.add(new SetCardInfo("Jedit Ojanen", 234, Rarity.UNCOMMON, mage.cards.j.JeditOjanen.class)); - cards.add(new SetCardInfo("Jerrard of the Closed Fist", 235, Rarity.UNCOMMON, mage.cards.j.JerrardOfTheClosedFist.class)); - cards.add(new SetCardInfo("Johan", 236, Rarity.RARE, mage.cards.j.Johan.class)); - cards.add(new SetCardInfo("Jovial Evil", 109, Rarity.RARE, mage.cards.j.JovialEvil.class)); - cards.add(new SetCardInfo("Juxtapose", 63, Rarity.RARE, mage.cards.j.Juxtapose.class)); - cards.add(new SetCardInfo("Karakas", 303, Rarity.UNCOMMON, mage.cards.k.Karakas.class)); - cards.add(new SetCardInfo("Kasimir the Lone Wolf", 237, Rarity.UNCOMMON, mage.cards.k.KasimirTheLoneWolf.class)); - cards.add(new SetCardInfo("Keepers of the Faith", 24, Rarity.COMMON, mage.cards.k.KeepersOfTheFaith.class)); - cards.add(new SetCardInfo("Kei Takahashi", 238, Rarity.RARE, mage.cards.k.KeiTakahashi.class)); - cards.add(new SetCardInfo("Killer Bees", 192, Rarity.RARE, mage.cards.k.KillerBees.class)); - cards.add(new SetCardInfo("Kismet", 25, Rarity.UNCOMMON, mage.cards.k.Kismet.class)); - cards.add(new SetCardInfo("Knowledge Vault", 281, Rarity.RARE, mage.cards.k.KnowledgeVault.class)); - cards.add(new SetCardInfo("Kobold Drill Sergeant", 154, Rarity.UNCOMMON, mage.cards.k.KoboldDrillSergeant.class)); - cards.add(new SetCardInfo("Kobold Overlord", 155, Rarity.RARE, mage.cards.k.KoboldOverlord.class)); - cards.add(new SetCardInfo("Kobold Taskmaster", 156, Rarity.UNCOMMON, mage.cards.k.KoboldTaskmaster.class)); - cards.add(new SetCardInfo("Kobolds of Kher Keep", 157, Rarity.COMMON, mage.cards.k.KoboldsOfKherKeep.class)); - cards.add(new SetCardInfo("Kry Shield", 282, Rarity.UNCOMMON, mage.cards.k.KryShield.class)); - cards.add(new SetCardInfo("Lady Caleria", 239, Rarity.RARE, mage.cards.l.LadyCaleria.class)); - cards.add(new SetCardInfo("Lady Evangela", 240, Rarity.RARE, mage.cards.l.LadyEvangela.class)); - cards.add(new SetCardInfo("Lady Orca", 241, Rarity.UNCOMMON, mage.cards.l.LadyOrca.class)); - cards.add(new SetCardInfo("Land Equilibrium", 64, Rarity.RARE, mage.cards.l.LandEquilibrium.class)); - cards.add(new SetCardInfo("Land Tax", 26, Rarity.UNCOMMON, mage.cards.l.LandTax.class)); - cards.add(new SetCardInfo("Land's Edge", 158, Rarity.RARE, mage.cards.l.LandsEdge.class)); - cards.add(new SetCardInfo("Lesser Werewolf", 110, Rarity.UNCOMMON, mage.cards.l.LesserWerewolf.class)); - cards.add(new SetCardInfo("Life Chisel", 283, Rarity.UNCOMMON, mage.cards.l.LifeChisel.class)); - cards.add(new SetCardInfo("Life Matrix", 284, Rarity.RARE, mage.cards.l.LifeMatrix.class)); - cards.add(new SetCardInfo("Lifeblood", 27, Rarity.RARE, mage.cards.l.Lifeblood.class)); - cards.add(new SetCardInfo("Living Plane", 193, Rarity.RARE, mage.cards.l.LivingPlane.class)); - cards.add(new SetCardInfo("Livonya Silone", 242, Rarity.RARE, mage.cards.l.LivonyaSilone.class)); - cards.add(new SetCardInfo("Lord Magnus", 243, Rarity.UNCOMMON, mage.cards.l.LordMagnus.class)); - cards.add(new SetCardInfo("Lost Soul", 111, Rarity.COMMON, mage.cards.l.LostSoul.class)); - cards.add(new SetCardInfo("Mana Drain", 65, Rarity.UNCOMMON, mage.cards.m.ManaDrain.class)); - cards.add(new SetCardInfo("Mana Matrix", 285, Rarity.RARE, mage.cards.m.ManaMatrix.class)); - cards.add(new SetCardInfo("Marble Priest", 286, Rarity.UNCOMMON, mage.cards.m.MarblePriest.class)); - cards.add(new SetCardInfo("Marhault Elsdragon", 244, Rarity.UNCOMMON, mage.cards.m.MarhaultElsdragon.class)); - cards.add(new SetCardInfo("Master of the Hunt", 194, Rarity.RARE, mage.cards.m.MasterOfTheHunt.class)); - cards.add(new SetCardInfo("Mirror Universe", 287, Rarity.RARE, mage.cards.m.MirrorUniverse.class)); - cards.add(new SetCardInfo("Moat", 28, Rarity.RARE, mage.cards.m.Moat.class)); - cards.add(new SetCardInfo("Mold Demon", 112, Rarity.RARE, mage.cards.m.MoldDemon.class)); - cards.add(new SetCardInfo("Moss Monster", 195, Rarity.COMMON, mage.cards.m.MossMonster.class)); - cards.add(new SetCardInfo("Mountain Stronghold", 304, Rarity.UNCOMMON, mage.cards.m.MountainStronghold.class)); - cards.add(new SetCardInfo("Mountain Yeti", 159, Rarity.UNCOMMON, mage.cards.m.MountainYeti.class)); - cards.add(new SetCardInfo("Nebuchadnezzar", 245, Rarity.RARE, mage.cards.n.Nebuchadnezzar.class)); - cards.add(new SetCardInfo("Nether Void", 113, Rarity.RARE, mage.cards.n.NetherVoid.class)); - cards.add(new SetCardInfo("Nicol Bolas", 246, Rarity.RARE, mage.cards.n.NicolBolas.class)); - cards.add(new SetCardInfo("Nova Pentacle", 289, Rarity.RARE, mage.cards.n.NovaPentacle.class)); - cards.add(new SetCardInfo("Osai Vultures", 29, Rarity.COMMON, mage.cards.o.OsaiVultures.class)); - cards.add(new SetCardInfo("Palladia-Mors", 247, Rarity.RARE, mage.cards.p.PalladiaMors.class)); - cards.add(new SetCardInfo("Part Water", 66, Rarity.UNCOMMON, mage.cards.p.PartWater.class)); - cards.add(new SetCardInfo("Pavel Maliki", 248, Rarity.UNCOMMON, mage.cards.p.PavelMaliki.class)); - cards.add(new SetCardInfo("Pendelhaven", 305, Rarity.UNCOMMON, mage.cards.p.Pendelhaven.class)); - cards.add(new SetCardInfo("Petra Sphinx", 30, Rarity.RARE, mage.cards.p.PetraSphinx.class)); - cards.add(new SetCardInfo("Pit Scorpion", 114, Rarity.COMMON, mage.cards.p.PitScorpion.class)); - cards.add(new SetCardInfo("Pixie Queen", 196, Rarity.RARE, mage.cards.p.PixieQueen.class)); - cards.add(new SetCardInfo("Planar Gate", 290, Rarity.RARE, mage.cards.p.PlanarGate.class)); - cards.add(new SetCardInfo("Pradesh Gypsies", 197, Rarity.UNCOMMON, mage.cards.p.PradeshGypsies.class)); - cards.add(new SetCardInfo("Presence of the Master", 31, Rarity.UNCOMMON, mage.cards.p.PresenceOfTheMaster.class)); - cards.add(new SetCardInfo("Primordial Ooze", 160, Rarity.UNCOMMON, mage.cards.p.PrimordialOoze.class)); - cards.add(new SetCardInfo("Princess Lucrezia", 249, Rarity.UNCOMMON, mage.cards.p.PrincessLucrezia.class)); - cards.add(new SetCardInfo("Psionic Entity", 67, Rarity.RARE, mage.cards.p.PsionicEntity.class)); - cards.add(new SetCardInfo("Psychic Purge", 68, Rarity.COMMON, mage.cards.p.PsychicPurge.class)); - cards.add(new SetCardInfo("Puppet Master", 69, Rarity.UNCOMMON, mage.cards.p.PuppetMaster.class)); - cards.add(new SetCardInfo("Pyrotechnics", 161, Rarity.COMMON, mage.cards.p.Pyrotechnics.class)); - cards.add(new SetCardInfo("Quagmire", 115, Rarity.UNCOMMON, mage.cards.q.Quagmire.class)); - cards.add(new SetCardInfo("Rabid Wombat", 198, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); - cards.add(new SetCardInfo("Radjan Spirit", 199, Rarity.UNCOMMON, mage.cards.r.RadjanSpirit.class)); - cards.add(new SetCardInfo("Raging Bull", 163, Rarity.COMMON, mage.cards.r.RagingBull.class)); - cards.add(new SetCardInfo("Ragnar", 250, Rarity.RARE, mage.cards.r.Ragnar.class)); - cards.add(new SetCardInfo("Ramirez DePietro", 251, Rarity.UNCOMMON, mage.cards.r.RamirezDePietro.class)); - cards.add(new SetCardInfo("Ramses Overdark", 252, Rarity.RARE, mage.cards.r.RamsesOverdark.class)); - cards.add(new SetCardInfo("Rapid Fire", 32, Rarity.RARE, mage.cards.r.RapidFire.class)); - cards.add(new SetCardInfo("Rasputin Dreamweaver", 253, Rarity.RARE, mage.cards.r.RasputinDreamweaver.class)); - cards.add(new SetCardInfo("Recall", 70, Rarity.RARE, mage.cards.r.Recall.class)); - cards.add(new SetCardInfo("Red Mana Battery", 291, Rarity.UNCOMMON, mage.cards.r.RedManaBattery.class)); - cards.add(new SetCardInfo("Reincarnation", 201, Rarity.UNCOMMON, mage.cards.r.Reincarnation.class)); - cards.add(new SetCardInfo("Relic Barrier", 292, Rarity.UNCOMMON, mage.cards.r.RelicBarrier.class)); - cards.add(new SetCardInfo("Relic Bind", 71, Rarity.UNCOMMON, mage.cards.r.RelicBind.class)); - cards.add(new SetCardInfo("Remove Enchantments", 33, Rarity.COMMON, mage.cards.r.RemoveEnchantments.class)); - cards.add(new SetCardInfo("Remove Soul", 72, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); - cards.add(new SetCardInfo("Reset", 73, Rarity.UNCOMMON, mage.cards.r.Reset.class)); - cards.add(new SetCardInfo("Revelation", 202, Rarity.RARE, mage.cards.r.Revelation.class)); - cards.add(new SetCardInfo("Reverberation", 74, Rarity.RARE, mage.cards.r.Reverberation.class)); - cards.add(new SetCardInfo("Righteous Avengers", 34, Rarity.UNCOMMON, mage.cards.r.RighteousAvengers.class)); - cards.add(new SetCardInfo("Ring of Immortals", 293, Rarity.RARE, mage.cards.r.RingOfImmortals.class)); - cards.add(new SetCardInfo("Riven Turnbull", 254, Rarity.UNCOMMON, mage.cards.r.RivenTurnbull.class)); - cards.add(new SetCardInfo("Rohgahh of Kher Keep", 255, Rarity.RARE, mage.cards.r.RohgahhOfKherKeep.class)); - cards.add(new SetCardInfo("Rubinia Soulsinger", 256, Rarity.RARE, mage.cards.r.RubiniaSoulsinger.class)); - cards.add(new SetCardInfo("Rust", 203, Rarity.COMMON, mage.cards.r.Rust.class)); - cards.add(new SetCardInfo("Sea Kings' Blessing", 75, Rarity.UNCOMMON, mage.cards.s.SeaKingsBlessing.class)); - cards.add(new SetCardInfo("Seafarer's Quay", 306, Rarity.UNCOMMON, mage.cards.s.SeafarersQuay.class)); - cards.add(new SetCardInfo("Seeker", 35, Rarity.UNCOMMON, mage.cards.s.Seeker.class)); - cards.add(new SetCardInfo("Segovian Leviathan", 76, Rarity.UNCOMMON, mage.cards.s.SegovianLeviathan.class)); - cards.add(new SetCardInfo("Sentinel", 294, Rarity.RARE, mage.cards.s.Sentinel.class)); - cards.add(new SetCardInfo("Serpent Generator", 295, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); - cards.add(new SetCardInfo("Shelkin Brownie", 204, Rarity.COMMON, mage.cards.s.ShelkinBrownie.class)); - cards.add(new SetCardInfo("Shield Wall", 36, Rarity.UNCOMMON, mage.cards.s.ShieldWall.class)); - cards.add(new SetCardInfo("Shimian Night Stalker", 116, Rarity.UNCOMMON, mage.cards.s.ShimianNightStalker.class)); - cards.add(new SetCardInfo("Sir Shandlar of Eberyn", 257, Rarity.UNCOMMON, mage.cards.s.SirShandlarOfEberyn.class)); - cards.add(new SetCardInfo("Sivitri Scarzam", 258, Rarity.UNCOMMON, mage.cards.s.SivitriScarzam.class)); - cards.add(new SetCardInfo("Sol'kanar the Swamp King", 259, Rarity.RARE, mage.cards.s.SolkanarTheSwampKing.class)); - cards.add(new SetCardInfo("Spectral Cloak", 78, Rarity.UNCOMMON, mage.cards.s.SpectralCloak.class)); - cards.add(new SetCardInfo("Spinal Villain", 164, Rarity.RARE, mage.cards.s.SpinalVillain.class)); - cards.add(new SetCardInfo("Spirit Link", 37, Rarity.UNCOMMON, mage.cards.s.SpiritLink.class)); - cards.add(new SetCardInfo("Spirit Shackle", 117, Rarity.COMMON, mage.cards.s.SpiritShackle.class)); - cards.add(new SetCardInfo("Spiritual Sanctuary", 38, Rarity.RARE, mage.cards.s.SpiritualSanctuary.class)); - cards.add(new SetCardInfo("Stangg", 260, Rarity.RARE, mage.cards.s.Stangg.class)); - cards.add(new SetCardInfo("Storm Seeker", 205, Rarity.UNCOMMON, mage.cards.s.StormSeeker.class)); - cards.add(new SetCardInfo("Storm World", 165, Rarity.RARE, mage.cards.s.StormWorld.class)); - cards.add(new SetCardInfo("Subdue", 206, Rarity.COMMON, mage.cards.s.Subdue.class)); - cards.add(new SetCardInfo("Sunastian Falconer", 261, Rarity.UNCOMMON, mage.cards.s.SunastianFalconer.class)); - cards.add(new SetCardInfo("Sword of the Ages", 296, Rarity.RARE, mage.cards.s.SwordOfTheAges.class)); - cards.add(new SetCardInfo("Sylvan Library", 207, Rarity.UNCOMMON, mage.cards.s.SylvanLibrary.class)); - cards.add(new SetCardInfo("Sylvan Paradise", 208, Rarity.UNCOMMON, mage.cards.s.SylvanParadise.class)); - cards.add(new SetCardInfo("Syphon Soul", 118, Rarity.COMMON, mage.cards.s.SyphonSoul.class)); - cards.add(new SetCardInfo("Telekinesis", 79, Rarity.RARE, mage.cards.t.Telekinesis.class)); - cards.add(new SetCardInfo("Teleport", 80, Rarity.RARE, mage.cards.t.Teleport.class)); - cards.add(new SetCardInfo("Tetsuo Umezawa", 262, Rarity.RARE, mage.cards.t.TetsuoUmezawa.class)); - cards.add(new SetCardInfo("The Abyss", 120, Rarity.RARE, mage.cards.t.TheAbyss.class)); - cards.add(new SetCardInfo("The Brute", 167, Rarity.COMMON, mage.cards.t.TheBrute.class)); - cards.add(new SetCardInfo("The Lady of the Mountain", 263, Rarity.UNCOMMON, mage.cards.t.TheLadyOfTheMountain.class)); - cards.add(new SetCardInfo("The Tabernacle at Pendrell Vale", 307, Rarity.RARE, mage.cards.t.TheTabernacleAtPendrellVale.class)); - cards.add(new SetCardInfo("The Wretched", 121, Rarity.RARE, mage.cards.t.TheWretched.class)); - cards.add(new SetCardInfo("Thunder Spirit", 39, Rarity.RARE, mage.cards.t.ThunderSpirit.class)); - cards.add(new SetCardInfo("Time Elemental", 81, Rarity.RARE, mage.cards.t.TimeElemental.class)); - cards.add(new SetCardInfo("Tobias Andrion", 264, Rarity.UNCOMMON, mage.cards.t.TobiasAndrion.class)); - cards.add(new SetCardInfo("Tolaria", 308, Rarity.UNCOMMON, mage.cards.t.Tolaria.class)); - cards.add(new SetCardInfo("Tor Wauki", 265, Rarity.UNCOMMON, mage.cards.t.TorWauki.class)); - cards.add(new SetCardInfo("Torsten Von Ursus", 266, Rarity.UNCOMMON, mage.cards.t.TorstenVonUrsus.class)); - cards.add(new SetCardInfo("Touch of Darkness", 122, Rarity.UNCOMMON, mage.cards.t.TouchOfDarkness.class)); - cards.add(new SetCardInfo("Transmutation", 123, Rarity.COMMON, mage.cards.t.Transmutation.class)); - cards.add(new SetCardInfo("Triassic Egg", 297, Rarity.RARE, mage.cards.t.TriassicEgg.class)); - cards.add(new SetCardInfo("Tuknir Deathlock", 267, Rarity.RARE, mage.cards.t.TuknirDeathlock.class)); - cards.add(new SetCardInfo("Tundra Wolves", 40, Rarity.COMMON, mage.cards.t.TundraWolves.class)); - cards.add(new SetCardInfo("Typhoon", 209, Rarity.RARE, mage.cards.t.Typhoon.class)); - cards.add(new SetCardInfo("Undertow", 82, Rarity.UNCOMMON, mage.cards.u.Undertow.class)); - cards.add(new SetCardInfo("Unholy Citadel", 309, Rarity.UNCOMMON, mage.cards.u.UnholyCitadel.class)); - cards.add(new SetCardInfo("Underworld Dreams", 124, Rarity.UNCOMMON, mage.cards.u.UnderworldDreams.class)); - cards.add(new SetCardInfo("Untamed Wilds", 210, Rarity.UNCOMMON, mage.cards.u.UntamedWilds.class)); - cards.add(new SetCardInfo("Ur-Drago", 268, Rarity.RARE, mage.cards.u.UrDrago.class)); - cards.add(new SetCardInfo("Urborg", 310, Rarity.UNCOMMON, mage.cards.u.Urborg.class)); - cards.add(new SetCardInfo("Vaevictis Asmadi", 269, Rarity.RARE, mage.cards.v.VaevictisAsmadi.class)); - cards.add(new SetCardInfo("Vampire Bats", 125, Rarity.COMMON, mage.cards.v.VampireBats.class)); - cards.add(new SetCardInfo("Venarian Gold", 83, Rarity.COMMON, mage.cards.v.VenarianGold.class)); - cards.add(new SetCardInfo("Visions", 41, Rarity.UNCOMMON, mage.cards.v.Visions.class)); - cards.add(new SetCardInfo("Voodoo Doll", 298, Rarity.RARE, mage.cards.v.VoodooDoll.class)); - cards.add(new SetCardInfo("Walking Dead", 126, Rarity.COMMON, mage.cards.w.WalkingDead.class)); - cards.add(new SetCardInfo("Wall of Caltrops", 42, Rarity.COMMON, mage.cards.w.WallOfCaltrops.class)); - cards.add(new SetCardInfo("Wall of Dust", 168, Rarity.UNCOMMON, mage.cards.w.WallOfDust.class)); - cards.add(new SetCardInfo("Wall of Earth", 169, Rarity.COMMON, mage.cards.w.WallOfEarth.class)); - cards.add(new SetCardInfo("Wall of Heat", 170, Rarity.COMMON, mage.cards.w.WallOfHeat.class)); - cards.add(new SetCardInfo("Wall of Light", 43, Rarity.UNCOMMON, mage.cards.w.WallOfLight.class)); - cards.add(new SetCardInfo("Wall of Opposition", 171, Rarity.RARE, mage.cards.w.WallOfOpposition.class)); - cards.add(new SetCardInfo("Wall of Putrid Flesh", 127, Rarity.UNCOMMON, mage.cards.w.WallOfPutridFlesh.class)); - cards.add(new SetCardInfo("Wall of Shadows", 128, Rarity.COMMON, mage.cards.w.WallOfShadows.class)); - cards.add(new SetCardInfo("Wall of Tombstones", 129, Rarity.UNCOMMON, mage.cards.w.WallOfTombstones.class)); - cards.add(new SetCardInfo("Wall of Vapor", 84, Rarity.COMMON, mage.cards.w.WallOfVapor.class)); - cards.add(new SetCardInfo("Wall of Wonder", 85, Rarity.UNCOMMON, mage.cards.w.WallOfWonder.class)); - cards.add(new SetCardInfo("Whirling Dervish", 211, Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class)); - cards.add(new SetCardInfo("White Mana Battery", 299, Rarity.UNCOMMON, mage.cards.w.WhiteManaBattery.class)); - cards.add(new SetCardInfo("Willow Satyr", 212, Rarity.RARE, mage.cards.w.WillowSatyr.class)); - cards.add(new SetCardInfo("Winds of Change", 172, Rarity.UNCOMMON, mage.cards.w.WindsOfChange.class)); - cards.add(new SetCardInfo("Winter Blast", 213, Rarity.RARE, mage.cards.w.WinterBlast.class)); - cards.add(new SetCardInfo("Wolverine Pack", 214, Rarity.COMMON, mage.cards.w.WolverinePack.class)); - cards.add(new SetCardInfo("Wood Elemental", 215, Rarity.RARE, mage.cards.w.WoodElemental.class)); - cards.add(new SetCardInfo("Xira Arien", 270, Rarity.RARE, mage.cards.x.XiraArien.class)); - cards.add(new SetCardInfo("Zephyr Falcon", 86, Rarity.COMMON, mage.cards.z.ZephyrFalcon.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author North + */ +public final class Legends extends ExpansionSet { + + private static final Legends instance = new Legends(); + + public static Legends getInstance() { + return instance; + } + + private Legends() { + super("Legends", "LEG", ExpansionSet.buildDate(1994, 6, 1), SetType.EXPANSION); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Abomination", 87, Rarity.UNCOMMON, mage.cards.a.Abomination.class)); + cards.add(new SetCardInfo("Acid Rain", 44, Rarity.RARE, mage.cards.a.AcidRain.class)); + cards.add(new SetCardInfo("Active Volcano", 130, Rarity.COMMON, mage.cards.a.ActiveVolcano.class)); + cards.add(new SetCardInfo("Adun Oakenshield", 216, Rarity.RARE, mage.cards.a.AdunOakenshield.class)); + cards.add(new SetCardInfo("Adventurers' Guildhouse", 300, Rarity.UNCOMMON, mage.cards.a.AdventurersGuildhouse.class)); + cards.add(new SetCardInfo("Aerathi Berserker", 131, Rarity.UNCOMMON, mage.cards.a.AerathiBerserker.class)); + cards.add(new SetCardInfo("Aisling Leprechaun", 173, Rarity.COMMON, mage.cards.a.AislingLeprechaun.class)); + cards.add(new SetCardInfo("Akron Legionnaire", 1, Rarity.RARE, mage.cards.a.AkronLegionnaire.class)); + cards.add(new SetCardInfo("Al-abara's Carpet", 271, Rarity.RARE, mage.cards.a.AlAbarasCarpet.class)); + cards.add(new SetCardInfo("Alabaster Potion", 2, Rarity.COMMON, mage.cards.a.AlabasterPotion.class)); + cards.add(new SetCardInfo("Alchor's Tomb", 272, Rarity.RARE, mage.cards.a.AlchorsTomb.class)); + cards.add(new SetCardInfo("All Hallow's Eve", 88, Rarity.RARE, mage.cards.a.AllHallowsEve.class)); + cards.add(new SetCardInfo("Amrou Kithkin", 3, Rarity.COMMON, mage.cards.a.AmrouKithkin.class)); + cards.add(new SetCardInfo("Angelic Voices", 4, Rarity.RARE, mage.cards.a.AngelicVoices.class)); + cards.add(new SetCardInfo("Angus Mackenzie", 217, Rarity.RARE, mage.cards.a.AngusMackenzie.class)); + cards.add(new SetCardInfo("Anti-Magic Aura", 45, Rarity.COMMON, mage.cards.a.AntiMagicAura.class)); + cards.add(new SetCardInfo("Arboria", 174, Rarity.UNCOMMON, mage.cards.a.Arboria.class)); + cards.add(new SetCardInfo("Arcades Sabboth", 218, Rarity.RARE, mage.cards.a.ArcadesSabboth.class)); + cards.add(new SetCardInfo("Arena of the Ancients", 273, Rarity.RARE, mage.cards.a.ArenaOfTheAncients.class)); + cards.add(new SetCardInfo("Avoid Fate", 175, Rarity.COMMON, mage.cards.a.AvoidFate.class)); + cards.add(new SetCardInfo("Axelrod Gunnarson", 219, Rarity.RARE, mage.cards.a.AxelrodGunnarson.class)); + cards.add(new SetCardInfo("Ayesha Tanaka", 220, Rarity.RARE, mage.cards.a.AyeshaTanaka.class)); + cards.add(new SetCardInfo("Azure Drake", 46, Rarity.UNCOMMON, mage.cards.a.AzureDrake.class)); + cards.add(new SetCardInfo("Backfire", 47, Rarity.UNCOMMON, mage.cards.b.Backfire.class)); + cards.add(new SetCardInfo("Barbary Apes", 176, Rarity.COMMON, mage.cards.b.BarbaryApes.class)); + cards.add(new SetCardInfo("Barktooth Warbeard", 221, Rarity.UNCOMMON, mage.cards.b.BarktoothWarbeard.class)); + cards.add(new SetCardInfo("Bartel Runeaxe", 222, Rarity.RARE, mage.cards.b.BartelRuneaxe.class)); + cards.add(new SetCardInfo("Beasts of Bogardan", 133, Rarity.UNCOMMON, mage.cards.b.BeastsOfBogardan.class)); + cards.add(new SetCardInfo("Black Mana Battery", 274, Rarity.UNCOMMON, mage.cards.b.BlackManaBattery.class)); + cards.add(new SetCardInfo("Blazing Effigy", 134, Rarity.COMMON, mage.cards.b.BlazingEffigy.class)); + cards.add(new SetCardInfo("Blight", 89, Rarity.UNCOMMON, mage.cards.b.Blight.class)); + cards.add(new SetCardInfo("Blood Lust", 135, Rarity.UNCOMMON, mage.cards.b.BloodLust.class)); + cards.add(new SetCardInfo("Blue Mana Battery", 275, Rarity.UNCOMMON, mage.cards.b.BlueManaBattery.class)); + cards.add(new SetCardInfo("Boomerang", 48, Rarity.COMMON, mage.cards.b.Boomerang.class)); + cards.add(new SetCardInfo("Boris Devilboon", 223, Rarity.RARE, mage.cards.b.BorisDevilboon.class)); + cards.add(new SetCardInfo("Brine Hag", 49, Rarity.UNCOMMON, mage.cards.b.BrineHag.class)); + cards.add(new SetCardInfo("Bronze Horse", 276, Rarity.RARE, mage.cards.b.BronzeHorse.class)); + cards.add(new SetCardInfo("Carrion Ants", 90, Rarity.RARE, mage.cards.c.CarrionAnts.class)); + cards.add(new SetCardInfo("Cat Warriors", 177, Rarity.COMMON, mage.cards.c.CatWarriors.class)); + cards.add(new SetCardInfo("Cathedral of Serra", 301, Rarity.UNCOMMON, mage.cards.c.CathedralOfSerra.class)); + cards.add(new SetCardInfo("Caverns of Despair", 136, Rarity.RARE, mage.cards.c.CavernsOfDespair.class)); + cards.add(new SetCardInfo("Chain Lightning", 137, Rarity.COMMON, mage.cards.c.ChainLightning.class)); + cards.add(new SetCardInfo("Chains of Mephistopheles", 91, Rarity.RARE, mage.cards.c.ChainsOfMephistopheles.class)); + cards.add(new SetCardInfo("Chromium", 224, Rarity.RARE, mage.cards.c.Chromium.class)); + cards.add(new SetCardInfo("Cleanse", 5, Rarity.RARE, mage.cards.c.Cleanse.class)); + cards.add(new SetCardInfo("Clergy of the Holy Nimbus", 6, Rarity.COMMON, mage.cards.c.ClergyOfTheHolyNimbus.class)); + cards.add(new SetCardInfo("Concordant Crossroads", 179, Rarity.RARE, mage.cards.c.ConcordantCrossroads.class)); + cards.add(new SetCardInfo("Cocoon", 178, Rarity.UNCOMMON, mage.cards.c.Cocoon.class)); + cards.add(new SetCardInfo("Cosmic Horror", 92, Rarity.RARE, mage.cards.c.CosmicHorror.class)); + cards.add(new SetCardInfo("Craw Giant", 180, Rarity.UNCOMMON, mage.cards.c.CrawGiant.class)); + cards.add(new SetCardInfo("Crevasse", 138, Rarity.UNCOMMON, mage.cards.c.Crevasse.class)); + cards.add(new SetCardInfo("Crimson Kobolds", 139, Rarity.COMMON, mage.cards.c.CrimsonKobolds.class)); + cards.add(new SetCardInfo("Crimson Manticore", 140, Rarity.RARE, mage.cards.c.CrimsonManticore.class)); + cards.add(new SetCardInfo("Crookshank Kobolds", 141, Rarity.COMMON, mage.cards.c.CrookshankKobolds.class)); + cards.add(new SetCardInfo("Cyclopean Mummy", 93, Rarity.COMMON, mage.cards.c.CyclopeanMummy.class)); + cards.add(new SetCardInfo("D'Avenant Archer", 7, Rarity.COMMON, mage.cards.d.DAvenantArcher.class)); + cards.add(new SetCardInfo("Dakkon Blackblade", 225, Rarity.RARE, mage.cards.d.DakkonBlackblade.class)); + cards.add(new SetCardInfo("Darkness", 94, Rarity.COMMON, mage.cards.d.Darkness.class)); + cards.add(new SetCardInfo("Deadfall", 181, Rarity.UNCOMMON, mage.cards.d.Deadfall.class)); + cards.add(new SetCardInfo("Demonic Torment", 95, Rarity.UNCOMMON, mage.cards.d.DemonicTorment.class)); + cards.add(new SetCardInfo("Devouring Deep", 50, Rarity.COMMON, mage.cards.d.DevouringDeep.class)); + cards.add(new SetCardInfo("Disharmony", 142, Rarity.RARE, mage.cards.d.Disharmony.class)); + cards.add(new SetCardInfo("Divine Intervention", 8, Rarity.RARE, mage.cards.d.DivineIntervention.class)); + cards.add(new SetCardInfo("Divine Offering", 9, Rarity.COMMON, mage.cards.d.DivineOffering.class)); + cards.add(new SetCardInfo("Divine Transformation", 10, Rarity.RARE, mage.cards.d.DivineTransformation.class)); + cards.add(new SetCardInfo("Dream Coat", 51, Rarity.UNCOMMON, mage.cards.d.DreamCoat.class)); + cards.add(new SetCardInfo("Durkwood Boars", 182, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); + cards.add(new SetCardInfo("Dwarven Song", 143, Rarity.UNCOMMON, mage.cards.d.DwarvenSong.class)); + cards.add(new SetCardInfo("Elder Land Wurm", 11, Rarity.RARE, mage.cards.e.ElderLandWurm.class)); + cards.add(new SetCardInfo("Elder Spawn", 52, Rarity.RARE, mage.cards.e.ElderSpawn.class)); + cards.add(new SetCardInfo("Elven Riders", 183, Rarity.RARE, mage.cards.e.ElvenRiders.class)); + cards.add(new SetCardInfo("Emerald Dragonfly", 184, Rarity.COMMON, mage.cards.e.EmeraldDragonfly.class)); + cards.add(new SetCardInfo("Enchanted Being", 12, Rarity.COMMON, mage.cards.e.EnchantedBeing.class)); + cards.add(new SetCardInfo("Enchantment Alteration", 53, Rarity.COMMON, mage.cards.e.EnchantmentAlteration.class)); + cards.add(new SetCardInfo("Energy Tap", 54, Rarity.COMMON, mage.cards.e.EnergyTap.class)); + cards.add(new SetCardInfo("Eternal Warrior", 144, Rarity.UNCOMMON, mage.cards.e.EternalWarrior.class)); + cards.add(new SetCardInfo("Eureka", 185, Rarity.RARE, mage.cards.e.Eureka.class)); + cards.add(new SetCardInfo("Evil Eye of Orms-by-Gore", 96, Rarity.UNCOMMON, mage.cards.e.EvilEyeOfOrmsByGore.class)); + cards.add(new SetCardInfo("Fallen Angel", 97, Rarity.UNCOMMON, mage.cards.f.FallenAngel.class)); + cards.add(new SetCardInfo("Feint", 146, Rarity.COMMON, mage.cards.f.Feint.class)); + cards.add(new SetCardInfo("Field of Dreams", 55, Rarity.RARE, mage.cards.f.FieldOfDreams.class)); + cards.add(new SetCardInfo("Fire Sprites", 186, Rarity.COMMON, mage.cards.f.FireSprites.class)); + cards.add(new SetCardInfo("Flash Counter", 56, Rarity.COMMON, mage.cards.f.FlashCounter.class)); + cards.add(new SetCardInfo("Flash Flood", 57, Rarity.COMMON, mage.cards.f.FlashFlood.class)); + cards.add(new SetCardInfo("Floral Spuzzem", 187, Rarity.UNCOMMON, mage.cards.f.FloralSpuzzem.class)); + cards.add(new SetCardInfo("Force Spike", 58, Rarity.COMMON, mage.cards.f.ForceSpike.class)); + cards.add(new SetCardInfo("Forethought Amulet", 277, Rarity.RARE, mage.cards.f.ForethoughtAmulet.class)); + cards.add(new SetCardInfo("Fortified Area", 14, Rarity.UNCOMMON, mage.cards.f.FortifiedArea.class)); + cards.add(new SetCardInfo("Frost Giant", 148, Rarity.UNCOMMON, mage.cards.f.FrostGiant.class)); + cards.add(new SetCardInfo("Gabriel Angelfire", 226, Rarity.RARE, mage.cards.g.GabrielAngelfire.class)); + cards.add(new SetCardInfo("Gaseous Form", 59, Rarity.COMMON, mage.cards.g.GaseousForm.class)); + cards.add(new SetCardInfo("Gauntlets of Chaos", 278, Rarity.RARE, mage.cards.g.GauntletsOfChaos.class)); + cards.add(new SetCardInfo("Ghosts of the Damned", 98, Rarity.COMMON, mage.cards.g.GhostsOfTheDamned.class)); + cards.add(new SetCardInfo("Giant Slug", 99, Rarity.COMMON, mage.cards.g.GiantSlug.class)); + cards.add(new SetCardInfo("Giant Strength", 149, Rarity.COMMON, mage.cards.g.GiantStrength.class)); + cards.add(new SetCardInfo("Giant Turtle", 188, Rarity.COMMON, mage.cards.g.GiantTurtle.class)); + cards.add(new SetCardInfo("Glyph of Delusion", 60, Rarity.COMMON, mage.cards.g.GlyphOfDelusion.class)); + cards.add(new SetCardInfo("Glyph of Destruction", 150, Rarity.COMMON, mage.cards.g.GlyphOfDestruction.class)); + cards.add(new SetCardInfo("Glyph of Doom", 100, Rarity.COMMON, mage.cards.g.GlyphOfDoom.class)); + cards.add(new SetCardInfo("Glyph of Life", 15, Rarity.COMMON, mage.cards.g.GlyphOfLife.class)); + cards.add(new SetCardInfo("Glyph of Reincarnation", 189, Rarity.COMMON, mage.cards.g.GlyphOfReincarnation.class)); + cards.add(new SetCardInfo("Gosta Dirk", 227, Rarity.RARE, mage.cards.g.GostaDirk.class)); + cards.add(new SetCardInfo("Gravity Sphere", 151, Rarity.RARE, mage.cards.g.GravitySphere.class)); + cards.add(new SetCardInfo("Great Defender", 16, Rarity.UNCOMMON, mage.cards.g.GreatDefender.class)); + cards.add(new SetCardInfo("Great Wall", 17, Rarity.UNCOMMON, mage.cards.g.GreatWall.class)); + cards.add(new SetCardInfo("Greater Realm of Preservation", 18, Rarity.UNCOMMON, mage.cards.g.GreaterRealmOfPreservation.class)); + cards.add(new SetCardInfo("Greed", 101, Rarity.RARE, mage.cards.g.Greed.class)); + cards.add(new SetCardInfo("Green Mana Battery", 279, Rarity.UNCOMMON, mage.cards.g.GreenManaBattery.class)); + cards.add(new SetCardInfo("Gwendlyn Di Corci", 228, Rarity.RARE, mage.cards.g.GwendlynDiCorci.class)); + cards.add(new SetCardInfo("Halfdane", 229, Rarity.RARE, mage.cards.h.Halfdane.class)); + cards.add(new SetCardInfo("Hammerheim", 302, Rarity.UNCOMMON, mage.cards.h.Hammerheim.class)); + cards.add(new SetCardInfo("Hazezon Tamar", 230, Rarity.RARE, mage.cards.h.HazezonTamar.class)); + cards.add(new SetCardInfo("Headless Horseman", 102, Rarity.COMMON, mage.cards.h.HeadlessHorseman.class)); + cards.add(new SetCardInfo("Heaven's Gate", 19, Rarity.UNCOMMON, mage.cards.h.HeavensGate.class)); + cards.add(new SetCardInfo("Hell Swarm", 103, Rarity.COMMON, mage.cards.h.HellSwarm.class)); + cards.add(new SetCardInfo("Hell's Caretaker", 104, Rarity.RARE, mage.cards.h.HellsCaretaker.class)); + cards.add(new SetCardInfo("Hellfire", 105, Rarity.RARE, mage.cards.h.Hellfire.class)); + cards.add(new SetCardInfo("Holy Day", 20, Rarity.COMMON, mage.cards.h.HolyDay.class)); + cards.add(new SetCardInfo("Horn of Deafening", 280, Rarity.RARE, mage.cards.h.HornOfDeafening.class)); + cards.add(new SetCardInfo("Hornet Cobra", 190, Rarity.COMMON, mage.cards.h.HornetCobra.class)); + cards.add(new SetCardInfo("Horror of Horrors", 106, Rarity.UNCOMMON, mage.cards.h.HorrorOfHorrors.class)); + cards.add(new SetCardInfo("Hunding Gjornersen", 231, Rarity.UNCOMMON, mage.cards.h.HundingGjornersen.class)); + cards.add(new SetCardInfo("Hyperion Blacksmith", 152, Rarity.UNCOMMON, mage.cards.h.HyperionBlacksmith.class)); + cards.add(new SetCardInfo("Ichneumon Druid", 191, Rarity.UNCOMMON, mage.cards.i.IchneumonDruid.class)); + cards.add(new SetCardInfo("Immolation", 153, Rarity.COMMON, mage.cards.i.Immolation.class)); + cards.add(new SetCardInfo("Imprison", 107, Rarity.RARE, mage.cards.i.Imprison.class)); + cards.add(new SetCardInfo("In the Eye of Chaos", 61, Rarity.RARE, mage.cards.i.InTheEyeOfChaos.class)); + cards.add(new SetCardInfo("Indestructible Aura", 21, Rarity.COMMON, mage.cards.i.IndestructibleAura.class)); + cards.add(new SetCardInfo("Infernal Medusa", 108, Rarity.UNCOMMON, mage.cards.i.InfernalMedusa.class)); + cards.add(new SetCardInfo("Infinite Authority", 22, Rarity.RARE, mage.cards.i.InfiniteAuthority.class)); + cards.add(new SetCardInfo("Invoke Prejudice", 62, Rarity.RARE, mage.cards.i.InvokePrejudice.class)); + cards.add(new SetCardInfo("Ivory Guardians", 23, Rarity.UNCOMMON, mage.cards.i.IvoryGuardians.class)); + cards.add(new SetCardInfo("Jacques le Vert", 232, Rarity.RARE, mage.cards.j.JacquesLeVert.class)); + cards.add(new SetCardInfo("Jasmine Boreal", 233, Rarity.UNCOMMON, mage.cards.j.JasmineBoreal.class)); + cards.add(new SetCardInfo("Jedit Ojanen", 234, Rarity.UNCOMMON, mage.cards.j.JeditOjanen.class)); + cards.add(new SetCardInfo("Jerrard of the Closed Fist", 235, Rarity.UNCOMMON, mage.cards.j.JerrardOfTheClosedFist.class)); + cards.add(new SetCardInfo("Johan", 236, Rarity.RARE, mage.cards.j.Johan.class)); + cards.add(new SetCardInfo("Jovial Evil", 109, Rarity.RARE, mage.cards.j.JovialEvil.class)); + cards.add(new SetCardInfo("Juxtapose", 63, Rarity.RARE, mage.cards.j.Juxtapose.class)); + cards.add(new SetCardInfo("Karakas", 303, Rarity.UNCOMMON, mage.cards.k.Karakas.class)); + cards.add(new SetCardInfo("Kasimir the Lone Wolf", 237, Rarity.UNCOMMON, mage.cards.k.KasimirTheLoneWolf.class)); + cards.add(new SetCardInfo("Keepers of the Faith", 24, Rarity.COMMON, mage.cards.k.KeepersOfTheFaith.class)); + cards.add(new SetCardInfo("Kei Takahashi", 238, Rarity.RARE, mage.cards.k.KeiTakahashi.class)); + cards.add(new SetCardInfo("Killer Bees", 192, Rarity.RARE, mage.cards.k.KillerBees.class)); + cards.add(new SetCardInfo("Kismet", 25, Rarity.UNCOMMON, mage.cards.k.Kismet.class)); + cards.add(new SetCardInfo("Knowledge Vault", 281, Rarity.RARE, mage.cards.k.KnowledgeVault.class)); + cards.add(new SetCardInfo("Kobold Drill Sergeant", 154, Rarity.UNCOMMON, mage.cards.k.KoboldDrillSergeant.class)); + cards.add(new SetCardInfo("Kobold Overlord", 155, Rarity.RARE, mage.cards.k.KoboldOverlord.class)); + cards.add(new SetCardInfo("Kobold Taskmaster", 156, Rarity.UNCOMMON, mage.cards.k.KoboldTaskmaster.class)); + cards.add(new SetCardInfo("Kobolds of Kher Keep", 157, Rarity.COMMON, mage.cards.k.KoboldsOfKherKeep.class)); + cards.add(new SetCardInfo("Kry Shield", 282, Rarity.UNCOMMON, mage.cards.k.KryShield.class)); + cards.add(new SetCardInfo("Lady Caleria", 239, Rarity.RARE, mage.cards.l.LadyCaleria.class)); + cards.add(new SetCardInfo("Lady Evangela", 240, Rarity.RARE, mage.cards.l.LadyEvangela.class)); + cards.add(new SetCardInfo("Lady Orca", 241, Rarity.UNCOMMON, mage.cards.l.LadyOrca.class)); + cards.add(new SetCardInfo("Land Equilibrium", 64, Rarity.RARE, mage.cards.l.LandEquilibrium.class)); + cards.add(new SetCardInfo("Land Tax", 26, Rarity.UNCOMMON, mage.cards.l.LandTax.class)); + cards.add(new SetCardInfo("Land's Edge", 158, Rarity.RARE, mage.cards.l.LandsEdge.class)); + cards.add(new SetCardInfo("Lesser Werewolf", 110, Rarity.UNCOMMON, mage.cards.l.LesserWerewolf.class)); + cards.add(new SetCardInfo("Life Chisel", 283, Rarity.UNCOMMON, mage.cards.l.LifeChisel.class)); + cards.add(new SetCardInfo("Life Matrix", 284, Rarity.RARE, mage.cards.l.LifeMatrix.class)); + cards.add(new SetCardInfo("Lifeblood", 27, Rarity.RARE, mage.cards.l.Lifeblood.class)); + cards.add(new SetCardInfo("Living Plane", 193, Rarity.RARE, mage.cards.l.LivingPlane.class)); + cards.add(new SetCardInfo("Livonya Silone", 242, Rarity.RARE, mage.cards.l.LivonyaSilone.class)); + cards.add(new SetCardInfo("Lord Magnus", 243, Rarity.UNCOMMON, mage.cards.l.LordMagnus.class)); + cards.add(new SetCardInfo("Lost Soul", 111, Rarity.COMMON, mage.cards.l.LostSoul.class)); + cards.add(new SetCardInfo("Mana Drain", 65, Rarity.UNCOMMON, mage.cards.m.ManaDrain.class)); + cards.add(new SetCardInfo("Mana Matrix", 285, Rarity.RARE, mage.cards.m.ManaMatrix.class)); + cards.add(new SetCardInfo("Marble Priest", 286, Rarity.UNCOMMON, mage.cards.m.MarblePriest.class)); + cards.add(new SetCardInfo("Marhault Elsdragon", 244, Rarity.UNCOMMON, mage.cards.m.MarhaultElsdragon.class)); + cards.add(new SetCardInfo("Master of the Hunt", 194, Rarity.RARE, mage.cards.m.MasterOfTheHunt.class)); + cards.add(new SetCardInfo("Mirror Universe", 287, Rarity.RARE, mage.cards.m.MirrorUniverse.class)); + cards.add(new SetCardInfo("Moat", 28, Rarity.RARE, mage.cards.m.Moat.class)); + cards.add(new SetCardInfo("Mold Demon", 112, Rarity.RARE, mage.cards.m.MoldDemon.class)); + cards.add(new SetCardInfo("Moss Monster", 195, Rarity.COMMON, mage.cards.m.MossMonster.class)); + cards.add(new SetCardInfo("Mountain Stronghold", 304, Rarity.UNCOMMON, mage.cards.m.MountainStronghold.class)); + cards.add(new SetCardInfo("Mountain Yeti", 159, Rarity.UNCOMMON, mage.cards.m.MountainYeti.class)); + cards.add(new SetCardInfo("Nebuchadnezzar", 245, Rarity.RARE, mage.cards.n.Nebuchadnezzar.class)); + cards.add(new SetCardInfo("Nether Void", 113, Rarity.RARE, mage.cards.n.NetherVoid.class)); + cards.add(new SetCardInfo("Nicol Bolas", 246, Rarity.RARE, mage.cards.n.NicolBolas.class)); + cards.add(new SetCardInfo("Nova Pentacle", 289, Rarity.RARE, mage.cards.n.NovaPentacle.class)); + cards.add(new SetCardInfo("Osai Vultures", 29, Rarity.COMMON, mage.cards.o.OsaiVultures.class)); + cards.add(new SetCardInfo("Palladia-Mors", 247, Rarity.RARE, mage.cards.p.PalladiaMors.class)); + cards.add(new SetCardInfo("Part Water", 66, Rarity.UNCOMMON, mage.cards.p.PartWater.class)); + cards.add(new SetCardInfo("Pavel Maliki", 248, Rarity.UNCOMMON, mage.cards.p.PavelMaliki.class)); + cards.add(new SetCardInfo("Pendelhaven", 305, Rarity.UNCOMMON, mage.cards.p.Pendelhaven.class)); + cards.add(new SetCardInfo("Petra Sphinx", 30, Rarity.RARE, mage.cards.p.PetraSphinx.class)); + cards.add(new SetCardInfo("Pit Scorpion", 114, Rarity.COMMON, mage.cards.p.PitScorpion.class)); + cards.add(new SetCardInfo("Pixie Queen", 196, Rarity.RARE, mage.cards.p.PixieQueen.class)); + cards.add(new SetCardInfo("Planar Gate", 290, Rarity.RARE, mage.cards.p.PlanarGate.class)); + cards.add(new SetCardInfo("Pradesh Gypsies", 197, Rarity.UNCOMMON, mage.cards.p.PradeshGypsies.class)); + cards.add(new SetCardInfo("Presence of the Master", 31, Rarity.UNCOMMON, mage.cards.p.PresenceOfTheMaster.class)); + cards.add(new SetCardInfo("Primordial Ooze", 160, Rarity.UNCOMMON, mage.cards.p.PrimordialOoze.class)); + cards.add(new SetCardInfo("Princess Lucrezia", 249, Rarity.UNCOMMON, mage.cards.p.PrincessLucrezia.class)); + cards.add(new SetCardInfo("Psionic Entity", 67, Rarity.RARE, mage.cards.p.PsionicEntity.class)); + cards.add(new SetCardInfo("Psychic Purge", 68, Rarity.COMMON, mage.cards.p.PsychicPurge.class)); + cards.add(new SetCardInfo("Puppet Master", 69, Rarity.UNCOMMON, mage.cards.p.PuppetMaster.class)); + cards.add(new SetCardInfo("Pyrotechnics", 161, Rarity.COMMON, mage.cards.p.Pyrotechnics.class)); + cards.add(new SetCardInfo("Quagmire", 115, Rarity.UNCOMMON, mage.cards.q.Quagmire.class)); + cards.add(new SetCardInfo("Rabid Wombat", 198, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); + cards.add(new SetCardInfo("Radjan Spirit", 199, Rarity.UNCOMMON, mage.cards.r.RadjanSpirit.class)); + cards.add(new SetCardInfo("Raging Bull", 163, Rarity.COMMON, mage.cards.r.RagingBull.class)); + cards.add(new SetCardInfo("Ragnar", 250, Rarity.RARE, mage.cards.r.Ragnar.class)); + cards.add(new SetCardInfo("Ramirez DePietro", 251, Rarity.UNCOMMON, mage.cards.r.RamirezDePietro.class)); + cards.add(new SetCardInfo("Ramses Overdark", 252, Rarity.RARE, mage.cards.r.RamsesOverdark.class)); + cards.add(new SetCardInfo("Rapid Fire", 32, Rarity.RARE, mage.cards.r.RapidFire.class)); + cards.add(new SetCardInfo("Rasputin Dreamweaver", 253, Rarity.RARE, mage.cards.r.RasputinDreamweaver.class)); + cards.add(new SetCardInfo("Recall", 70, Rarity.RARE, mage.cards.r.Recall.class)); + cards.add(new SetCardInfo("Red Mana Battery", 291, Rarity.UNCOMMON, mage.cards.r.RedManaBattery.class)); + cards.add(new SetCardInfo("Reincarnation", 201, Rarity.UNCOMMON, mage.cards.r.Reincarnation.class)); + cards.add(new SetCardInfo("Relic Barrier", 292, Rarity.UNCOMMON, mage.cards.r.RelicBarrier.class)); + cards.add(new SetCardInfo("Relic Bind", 71, Rarity.UNCOMMON, mage.cards.r.RelicBind.class)); + cards.add(new SetCardInfo("Remove Enchantments", 33, Rarity.COMMON, mage.cards.r.RemoveEnchantments.class)); + cards.add(new SetCardInfo("Remove Soul", 72, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); + cards.add(new SetCardInfo("Reset", 73, Rarity.UNCOMMON, mage.cards.r.Reset.class)); + cards.add(new SetCardInfo("Revelation", 202, Rarity.RARE, mage.cards.r.Revelation.class)); + cards.add(new SetCardInfo("Reverberation", 74, Rarity.RARE, mage.cards.r.Reverberation.class)); + cards.add(new SetCardInfo("Righteous Avengers", 34, Rarity.UNCOMMON, mage.cards.r.RighteousAvengers.class)); + cards.add(new SetCardInfo("Ring of Immortals", 293, Rarity.RARE, mage.cards.r.RingOfImmortals.class)); + cards.add(new SetCardInfo("Riven Turnbull", 254, Rarity.UNCOMMON, mage.cards.r.RivenTurnbull.class)); + cards.add(new SetCardInfo("Rohgahh of Kher Keep", 255, Rarity.RARE, mage.cards.r.RohgahhOfKherKeep.class)); + cards.add(new SetCardInfo("Rubinia Soulsinger", 256, Rarity.RARE, mage.cards.r.RubiniaSoulsinger.class)); + cards.add(new SetCardInfo("Rust", 203, Rarity.COMMON, mage.cards.r.Rust.class)); + cards.add(new SetCardInfo("Sea Kings' Blessing", 75, Rarity.UNCOMMON, mage.cards.s.SeaKingsBlessing.class)); + cards.add(new SetCardInfo("Seafarer's Quay", 306, Rarity.UNCOMMON, mage.cards.s.SeafarersQuay.class)); + cards.add(new SetCardInfo("Seeker", 35, Rarity.UNCOMMON, mage.cards.s.Seeker.class)); + cards.add(new SetCardInfo("Segovian Leviathan", 76, Rarity.UNCOMMON, mage.cards.s.SegovianLeviathan.class)); + cards.add(new SetCardInfo("Sentinel", 294, Rarity.RARE, mage.cards.s.Sentinel.class)); + cards.add(new SetCardInfo("Serpent Generator", 295, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); + cards.add(new SetCardInfo("Shelkin Brownie", 204, Rarity.COMMON, mage.cards.s.ShelkinBrownie.class)); + cards.add(new SetCardInfo("Shield Wall", 36, Rarity.UNCOMMON, mage.cards.s.ShieldWall.class)); + cards.add(new SetCardInfo("Shimian Night Stalker", 116, Rarity.UNCOMMON, mage.cards.s.ShimianNightStalker.class)); + cards.add(new SetCardInfo("Sir Shandlar of Eberyn", 257, Rarity.UNCOMMON, mage.cards.s.SirShandlarOfEberyn.class)); + cards.add(new SetCardInfo("Sivitri Scarzam", 258, Rarity.UNCOMMON, mage.cards.s.SivitriScarzam.class)); + cards.add(new SetCardInfo("Sol'kanar the Swamp King", 259, Rarity.RARE, mage.cards.s.SolkanarTheSwampKing.class)); + cards.add(new SetCardInfo("Spectral Cloak", 78, Rarity.UNCOMMON, mage.cards.s.SpectralCloak.class)); + cards.add(new SetCardInfo("Spinal Villain", 164, Rarity.RARE, mage.cards.s.SpinalVillain.class)); + cards.add(new SetCardInfo("Spirit Link", 37, Rarity.UNCOMMON, mage.cards.s.SpiritLink.class)); + cards.add(new SetCardInfo("Spirit Shackle", 117, Rarity.COMMON, mage.cards.s.SpiritShackle.class)); + cards.add(new SetCardInfo("Spiritual Sanctuary", 38, Rarity.RARE, mage.cards.s.SpiritualSanctuary.class)); + cards.add(new SetCardInfo("Stangg", 260, Rarity.RARE, mage.cards.s.Stangg.class)); + cards.add(new SetCardInfo("Storm Seeker", 205, Rarity.UNCOMMON, mage.cards.s.StormSeeker.class)); + cards.add(new SetCardInfo("Storm World", 165, Rarity.RARE, mage.cards.s.StormWorld.class)); + cards.add(new SetCardInfo("Subdue", 206, Rarity.COMMON, mage.cards.s.Subdue.class)); + cards.add(new SetCardInfo("Sunastian Falconer", 261, Rarity.UNCOMMON, mage.cards.s.SunastianFalconer.class)); + cards.add(new SetCardInfo("Sword of the Ages", 296, Rarity.RARE, mage.cards.s.SwordOfTheAges.class)); + cards.add(new SetCardInfo("Sylvan Library", 207, Rarity.UNCOMMON, mage.cards.s.SylvanLibrary.class)); + cards.add(new SetCardInfo("Sylvan Paradise", 208, Rarity.UNCOMMON, mage.cards.s.SylvanParadise.class)); + cards.add(new SetCardInfo("Syphon Soul", 118, Rarity.COMMON, mage.cards.s.SyphonSoul.class)); + cards.add(new SetCardInfo("Telekinesis", 79, Rarity.RARE, mage.cards.t.Telekinesis.class)); + cards.add(new SetCardInfo("Teleport", 80, Rarity.RARE, mage.cards.t.Teleport.class)); + cards.add(new SetCardInfo("Tetsuo Umezawa", 262, Rarity.RARE, mage.cards.t.TetsuoUmezawa.class)); + cards.add(new SetCardInfo("The Abyss", 120, Rarity.RARE, mage.cards.t.TheAbyss.class)); + cards.add(new SetCardInfo("The Brute", 167, Rarity.COMMON, mage.cards.t.TheBrute.class)); + cards.add(new SetCardInfo("The Lady of the Mountain", 263, Rarity.UNCOMMON, mage.cards.t.TheLadyOfTheMountain.class)); + cards.add(new SetCardInfo("The Tabernacle at Pendrell Vale", 307, Rarity.RARE, mage.cards.t.TheTabernacleAtPendrellVale.class)); + cards.add(new SetCardInfo("The Wretched", 121, Rarity.RARE, mage.cards.t.TheWretched.class)); + cards.add(new SetCardInfo("Thunder Spirit", 39, Rarity.RARE, mage.cards.t.ThunderSpirit.class)); + cards.add(new SetCardInfo("Time Elemental", 81, Rarity.RARE, mage.cards.t.TimeElemental.class)); + cards.add(new SetCardInfo("Tobias Andrion", 264, Rarity.UNCOMMON, mage.cards.t.TobiasAndrion.class)); + cards.add(new SetCardInfo("Tolaria", 308, Rarity.UNCOMMON, mage.cards.t.Tolaria.class)); + cards.add(new SetCardInfo("Tor Wauki", 265, Rarity.UNCOMMON, mage.cards.t.TorWauki.class)); + cards.add(new SetCardInfo("Torsten Von Ursus", 266, Rarity.UNCOMMON, mage.cards.t.TorstenVonUrsus.class)); + cards.add(new SetCardInfo("Touch of Darkness", 122, Rarity.UNCOMMON, mage.cards.t.TouchOfDarkness.class)); + cards.add(new SetCardInfo("Transmutation", 123, Rarity.COMMON, mage.cards.t.Transmutation.class)); + cards.add(new SetCardInfo("Triassic Egg", 297, Rarity.RARE, mage.cards.t.TriassicEgg.class)); + cards.add(new SetCardInfo("Tuknir Deathlock", 267, Rarity.RARE, mage.cards.t.TuknirDeathlock.class)); + cards.add(new SetCardInfo("Tundra Wolves", 40, Rarity.COMMON, mage.cards.t.TundraWolves.class)); + cards.add(new SetCardInfo("Typhoon", 209, Rarity.RARE, mage.cards.t.Typhoon.class)); + cards.add(new SetCardInfo("Undertow", 82, Rarity.UNCOMMON, mage.cards.u.Undertow.class)); + cards.add(new SetCardInfo("Unholy Citadel", 309, Rarity.UNCOMMON, mage.cards.u.UnholyCitadel.class)); + cards.add(new SetCardInfo("Underworld Dreams", 124, Rarity.UNCOMMON, mage.cards.u.UnderworldDreams.class)); + cards.add(new SetCardInfo("Untamed Wilds", 210, Rarity.UNCOMMON, mage.cards.u.UntamedWilds.class)); + cards.add(new SetCardInfo("Ur-Drago", 268, Rarity.RARE, mage.cards.u.UrDrago.class)); + cards.add(new SetCardInfo("Urborg", 310, Rarity.UNCOMMON, mage.cards.u.Urborg.class)); + cards.add(new SetCardInfo("Vaevictis Asmadi", 269, Rarity.RARE, mage.cards.v.VaevictisAsmadi.class)); + cards.add(new SetCardInfo("Vampire Bats", 125, Rarity.COMMON, mage.cards.v.VampireBats.class)); + cards.add(new SetCardInfo("Venarian Gold", 83, Rarity.COMMON, mage.cards.v.VenarianGold.class)); + cards.add(new SetCardInfo("Visions", 41, Rarity.UNCOMMON, mage.cards.v.Visions.class)); + cards.add(new SetCardInfo("Voodoo Doll", 298, Rarity.RARE, mage.cards.v.VoodooDoll.class)); + cards.add(new SetCardInfo("Walking Dead", 126, Rarity.COMMON, mage.cards.w.WalkingDead.class)); + cards.add(new SetCardInfo("Wall of Caltrops", 42, Rarity.COMMON, mage.cards.w.WallOfCaltrops.class)); + cards.add(new SetCardInfo("Wall of Dust", 168, Rarity.UNCOMMON, mage.cards.w.WallOfDust.class)); + cards.add(new SetCardInfo("Wall of Earth", 169, Rarity.COMMON, mage.cards.w.WallOfEarth.class)); + cards.add(new SetCardInfo("Wall of Heat", 170, Rarity.COMMON, mage.cards.w.WallOfHeat.class)); + cards.add(new SetCardInfo("Wall of Light", 43, Rarity.UNCOMMON, mage.cards.w.WallOfLight.class)); + cards.add(new SetCardInfo("Wall of Opposition", 171, Rarity.RARE, mage.cards.w.WallOfOpposition.class)); + cards.add(new SetCardInfo("Wall of Putrid Flesh", 127, Rarity.UNCOMMON, mage.cards.w.WallOfPutridFlesh.class)); + cards.add(new SetCardInfo("Wall of Shadows", 128, Rarity.COMMON, mage.cards.w.WallOfShadows.class)); + cards.add(new SetCardInfo("Wall of Tombstones", 129, Rarity.UNCOMMON, mage.cards.w.WallOfTombstones.class)); + cards.add(new SetCardInfo("Wall of Vapor", 84, Rarity.COMMON, mage.cards.w.WallOfVapor.class)); + cards.add(new SetCardInfo("Wall of Wonder", 85, Rarity.UNCOMMON, mage.cards.w.WallOfWonder.class)); + cards.add(new SetCardInfo("Whirling Dervish", 211, Rarity.UNCOMMON, mage.cards.w.WhirlingDervish.class)); + cards.add(new SetCardInfo("White Mana Battery", 299, Rarity.UNCOMMON, mage.cards.w.WhiteManaBattery.class)); + cards.add(new SetCardInfo("Willow Satyr", 212, Rarity.RARE, mage.cards.w.WillowSatyr.class)); + cards.add(new SetCardInfo("Winds of Change", 172, Rarity.UNCOMMON, mage.cards.w.WindsOfChange.class)); + cards.add(new SetCardInfo("Winter Blast", 213, Rarity.RARE, mage.cards.w.WinterBlast.class)); + cards.add(new SetCardInfo("Wolverine Pack", 214, Rarity.COMMON, mage.cards.w.WolverinePack.class)); + cards.add(new SetCardInfo("Wood Elemental", 215, Rarity.RARE, mage.cards.w.WoodElemental.class)); + cards.add(new SetCardInfo("Xira Arien", 270, Rarity.RARE, mage.cards.x.XiraArien.class)); + cards.add(new SetCardInfo("Zephyr Falcon", 86, Rarity.COMMON, mage.cards.z.ZephyrFalcon.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/MastersEdition.java b/Mage.Sets/src/mage/sets/MastersEdition.java index 17317b3cd8a..d2ba77613cf 100644 --- a/Mage.Sets/src/mage/sets/MastersEdition.java +++ b/Mage.Sets/src/mage/sets/MastersEdition.java @@ -1,223 +1,223 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author LevelX2 - */ -public final class MastersEdition extends ExpansionSet { - - private static final MastersEdition instance = new MastersEdition(); - - public static MastersEdition getInstance() { - return instance; - } - - private MastersEdition() { - super("Masters Edition", "MED", ExpansionSet.buildDate(2007, 9, 10), SetType.MAGIC_ONLINE); - this.hasBasicLands = true; - this.hasBoosters = true; - this.numBoosterLands = 1; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Adun Oakenshield", 141, Rarity.RARE, mage.cards.a.AdunOakenshield.class)); - cards.add(new SetCardInfo("Amnesia", 29, Rarity.RARE, mage.cards.a.Amnesia.class)); - cards.add(new SetCardInfo("Angry Mob", 1, Rarity.UNCOMMON, mage.cards.a.AngryMob.class)); - cards.add(new SetCardInfo("Animate Dead", 57, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); - cards.add(new SetCardInfo("Animate Wall", 2, Rarity.UNCOMMON, mage.cards.a.AnimateWall.class)); - cards.add(new SetCardInfo("Ankh of Mishra", 151, Rarity.RARE, mage.cards.a.AnkhOfMishra.class)); - cards.add(new SetCardInfo("Apprentice Wizard", 30, Rarity.COMMON, mage.cards.a.ApprenticeWizard.class)); - cards.add(new SetCardInfo("Arcane Denial", 31, Rarity.COMMON, mage.cards.a.ArcaneDenial.class)); - cards.add(new SetCardInfo("Argivian Archaeologist", 3, Rarity.RARE, mage.cards.a.ArgivianArchaeologist.class)); - cards.add(new SetCardInfo("Armageddon", 4, Rarity.RARE, mage.cards.a.Armageddon.class)); - cards.add(new SetCardInfo("Artifact Blast", 85, Rarity.COMMON, mage.cards.a.ArtifactBlast.class)); - cards.add(new SetCardInfo("Ashnod's Transmogrant", 152, Rarity.COMMON, mage.cards.a.AshnodsTransmogrant.class)); - cards.add(new SetCardInfo("Autumn Willow", 113, Rarity.RARE, mage.cards.a.AutumnWillow.class)); - cards.add(new SetCardInfo("Balduvian Horde", 86, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); - cards.add(new SetCardInfo("Ball Lightning", 87, Rarity.RARE, mage.cards.b.BallLightning.class)); - cards.add(new SetCardInfo("Baron Sengir", 58, Rarity.RARE, mage.cards.b.BaronSengir.class)); - cards.add(new SetCardInfo("Basal Thrull", 59, Rarity.COMMON, mage.cards.b.BasalThrull.class)); - cards.add(new SetCardInfo("Benalish Hero", 5, Rarity.COMMON, mage.cards.b.BenalishHero.class)); - cards.add(new SetCardInfo("Berserk", 114, Rarity.RARE, mage.cards.b.Berserk.class)); - cards.add(new SetCardInfo("Bestial Fury", 88, Rarity.COMMON, mage.cards.b.BestialFury.class)); - cards.add(new SetCardInfo("Black Knight", 60, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); - cards.add(new SetCardInfo("Blight", 61, Rarity.UNCOMMON, mage.cards.b.Blight.class)); - cards.add(new SetCardInfo("Breeding Pit", 62, Rarity.UNCOMMON, mage.cards.b.BreedingPit.class)); - cards.add(new SetCardInfo("Brothers of Fire", 89, Rarity.COMMON, mage.cards.b.BrothersOfFire.class)); - cards.add(new SetCardInfo("Carnivorous Plant", 115, Rarity.UNCOMMON, mage.cards.c.CarnivorousPlant.class)); - cards.add(new SetCardInfo("Centaur Archer", 142, Rarity.UNCOMMON, mage.cards.c.CentaurArcher.class)); - cards.add(new SetCardInfo("Chains of Mephistopheles", 63, Rarity.RARE, mage.cards.c.ChainsOfMephistopheles.class)); - cards.add(new SetCardInfo("Chub Toad", 116, Rarity.COMMON, mage.cards.c.ChubToad.class)); - cards.add(new SetCardInfo("Clockwork Beast", 153, Rarity.UNCOMMON, mage.cards.c.ClockworkBeast.class)); - cards.add(new SetCardInfo("Contagion", 64, Rarity.RARE, mage.cards.c.Contagion.class)); - cards.add(new SetCardInfo("Copper Tablet", 154, Rarity.UNCOMMON, mage.cards.c.CopperTablet.class)); - cards.add(new SetCardInfo("Crookshank Kobolds", 90, Rarity.COMMON, mage.cards.c.CrookshankKobolds.class)); - cards.add(new SetCardInfo("Crusade", 6, Rarity.RARE, mage.cards.c.Crusade.class)); - cards.add(new SetCardInfo("Cuombajj Witches", 65, Rarity.COMMON, mage.cards.c.CuombajjWitches.class)); - cards.add(new SetCardInfo("Cursed Rack", 155, Rarity.UNCOMMON, mage.cards.c.CursedRack.class)); - cards.add(new SetCardInfo("Dakkon Blackblade", 143, Rarity.RARE, mage.cards.d.DakkonBlackblade.class)); - cards.add(new SetCardInfo("Death Speakers", 7, Rarity.COMMON, mage.cards.d.DeathSpeakers.class)); - cards.add(new SetCardInfo("Death Ward", 8, Rarity.COMMON, mage.cards.d.DeathWard.class)); - cards.add(new SetCardInfo("Derelor", 66, Rarity.UNCOMMON, mage.cards.d.Derelor.class)); - cards.add(new SetCardInfo("Diamond Valley", 175, Rarity.RARE, mage.cards.d.DiamondValley.class)); - cards.add(new SetCardInfo("Diminishing Returns", 32, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); - cards.add(new SetCardInfo("Divine Transformation", 9, Rarity.UNCOMMON, mage.cards.d.DivineTransformation.class)); - cards.add(new SetCardInfo("Dragon Engine", 156, Rarity.COMMON, mage.cards.d.DragonEngine.class)); - cards.add(new SetCardInfo("Dust to Dust", 10, Rarity.COMMON, mage.cards.d.DustToDust.class)); - cards.add(new SetCardInfo("Dwarven Catapult", 91, Rarity.UNCOMMON, mage.cards.d.DwarvenCatapult.class)); - cards.add(new SetCardInfo("Dwarven Soldier", 92, Rarity.COMMON, mage.cards.d.DwarvenSoldier.class)); - cards.add(new SetCardInfo("Eater of the Dead", 67, Rarity.UNCOMMON, mage.cards.e.EaterOfTheDead.class)); - cards.add(new SetCardInfo("Elder Land Wurm", 11, Rarity.UNCOMMON, mage.cards.e.ElderLandWurm.class)); - cards.add(new SetCardInfo("Erg Raiders", 68, Rarity.COMMON, mage.cards.e.ErgRaiders.class)); - cards.add(new SetCardInfo("Eureka", 117, Rarity.RARE, mage.cards.e.Eureka.class)); - cards.add(new SetCardInfo("Exile", 12, Rarity.COMMON, mage.cards.e.Exile.class)); - cards.add(new SetCardInfo("The Fallen", 69, Rarity.UNCOMMON, mage.cards.t.TheFallen.class)); - cards.add(new SetCardInfo("Feast or Famine", 70, Rarity.COMMON, mage.cards.f.FeastOrFamine.class)); - cards.add(new SetCardInfo("Fire Covenant", 145, Rarity.UNCOMMON, mage.cards.f.FireCovenant.class)); - cards.add(new SetCardInfo("Fissure", 93, Rarity.COMMON, mage.cards.f.Fissure.class)); - cards.add(new SetCardInfo("Forcefield", 157, Rarity.RARE, mage.cards.f.Forcefield.class)); - cards.add(new SetCardInfo("Force of Will", 33, Rarity.RARE, mage.cards.f.ForceOfWill.class)); - cards.add(new SetCardInfo("Forest", 193, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 194, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 195, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fyndhorn Elves", 118, Rarity.COMMON, mage.cards.f.FyndhornElves.class)); - cards.add(new SetCardInfo("Ghazban Ogre", 120, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); - cards.add(new SetCardInfo("Giant Tortoise", 34, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); - cards.add(new SetCardInfo("Goblin Chirurgeon", 94, Rarity.COMMON, mage.cards.g.GoblinChirurgeon.class)); - cards.add(new SetCardInfo("Goblin Grenade", 95, Rarity.UNCOMMON, mage.cards.g.GoblinGrenade.class)); - cards.add(new SetCardInfo("Goblin Mutant", 96, Rarity.UNCOMMON, mage.cards.g.GoblinMutant.class)); - cards.add(new SetCardInfo("Goblins of the Flarg", 98, Rarity.COMMON, mage.cards.g.GoblinsOfTheFlarg.class)); - cards.add(new SetCardInfo("Goblin Wizard", 97, Rarity.RARE, mage.cards.g.GoblinWizard.class)); - cards.add(new SetCardInfo("Granite Gargoyle", 99, Rarity.UNCOMMON, mage.cards.g.GraniteGargoyle.class)); - cards.add(new SetCardInfo("Greater Realm of Preservation", 13, Rarity.UNCOMMON, mage.cards.g.GreaterRealmOfPreservation.class)); - cards.add(new SetCardInfo("Hallowed Ground", 14, Rarity.UNCOMMON, mage.cards.h.HallowedGround.class)); - cards.add(new SetCardInfo("Hand of Justice", 15, Rarity.RARE, mage.cards.h.HandOfJustice.class)); - cards.add(new SetCardInfo("Hecatomb", 71, Rarity.RARE, mage.cards.h.Hecatomb.class)); - cards.add(new SetCardInfo("High Tide", 35, Rarity.UNCOMMON, mage.cards.h.HighTide.class)); - cards.add(new SetCardInfo("Holy Light", 16, Rarity.COMMON, mage.cards.h.HolyLight.class)); - cards.add(new SetCardInfo("Homarid Spawning Bed", 36, Rarity.UNCOMMON, mage.cards.h.HomaridSpawningBed.class)); - cards.add(new SetCardInfo("Hungry Mist", 121, Rarity.COMMON, mage.cards.h.HungryMist.class)); - cards.add(new SetCardInfo("Hyalopterous Lemure", 72, Rarity.COMMON, mage.cards.h.HyalopterousLemure.class)); - cards.add(new SetCardInfo("Hydroblast", 37, Rarity.COMMON, mage.cards.h.Hydroblast.class)); - cards.add(new SetCardInfo("Hymn of Rebirth", 146, Rarity.UNCOMMON, mage.cards.h.HymnOfRebirth.class)); - cards.add(new SetCardInfo("Hymn to Tourach", 73, Rarity.UNCOMMON, mage.cards.h.HymnToTourach.class)); - cards.add(new SetCardInfo("Icatian Lieutenant", 17, Rarity.COMMON, mage.cards.i.IcatianLieutenant.class)); - cards.add(new SetCardInfo("Icatian Town", 18, Rarity.UNCOMMON, mage.cards.i.IcatianTown.class)); - cards.add(new SetCardInfo("Ice Storm", 122, Rarity.UNCOMMON, mage.cards.i.IceStorm.class)); - cards.add(new SetCardInfo("Ifh-Biff Efreet", 123, Rarity.RARE, mage.cards.i.IfhBiffEfreet.class)); - cards.add(new SetCardInfo("Illusionary Forces", 38, Rarity.UNCOMMON, mage.cards.i.IllusionaryForces.class)); - cards.add(new SetCardInfo("Illusionary Wall", 39, Rarity.COMMON, mage.cards.i.IllusionaryWall.class)); - cards.add(new SetCardInfo("Illusions of Grandeur", 40, Rarity.RARE, mage.cards.i.IllusionsOfGrandeur.class)); - cards.add(new SetCardInfo("Island", 184, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 185, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 186, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island of Wak-Wak", 176, Rarity.RARE, mage.cards.i.IslandOfWakWak.class)); - cards.add(new SetCardInfo("Ivory Tower", 158, Rarity.RARE, mage.cards.i.IvoryTower.class)); - cards.add(new SetCardInfo("Jacques le Vert", 147, Rarity.RARE, mage.cards.j.JacquesLeVert.class)); - cards.add(new SetCardInfo("Jokulhaups", 100, Rarity.RARE, mage.cards.j.Jokulhaups.class)); - cards.add(new SetCardInfo("Juxtapose", 41, Rarity.UNCOMMON, mage.cards.j.Juxtapose.class)); - cards.add(new SetCardInfo("Juzam Djinn", 74, Rarity.RARE, mage.cards.j.JuzamDjinn.class)); - cards.add(new SetCardInfo("Keldon Warlord", 101, Rarity.UNCOMMON, mage.cards.k.KeldonWarlord.class)); - cards.add(new SetCardInfo("Khabal Ghoul", 75, Rarity.RARE, mage.cards.k.KhabalGhoul.class)); - cards.add(new SetCardInfo("Knights of Thorn", 19, Rarity.COMMON, mage.cards.k.KnightsOfThorn.class)); - cards.add(new SetCardInfo("Lake of the Dead", 177, Rarity.RARE, mage.cards.l.LakeOfTheDead.class)); - cards.add(new SetCardInfo("Lightning Bolt", 102, Rarity.COMMON, mage.cards.l.LightningBolt.class)); - cards.add(new SetCardInfo("Lim-Dul's Vault", 148, Rarity.UNCOMMON, mage.cards.l.LimDulsVault.class)); - cards.add(new SetCardInfo("Lord of Tresserhorn", 149, Rarity.RARE, mage.cards.l.LordOfTresserhorn.class)); - cards.add(new SetCardInfo("Mana Flare", 103, Rarity.RARE, mage.cards.m.ManaFlare.class)); - cards.add(new SetCardInfo("Marton Stromgald", 104, Rarity.RARE, mage.cards.m.MartonStromgald.class)); - cards.add(new SetCardInfo("Mesa Pegasus", 20, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); - cards.add(new SetCardInfo("Mindstab Thrull", 76, Rarity.COMMON, mage.cards.m.MindstabThrull.class)); - cards.add(new SetCardInfo("Mirror Universe", 159, Rarity.RARE, mage.cards.m.MirrorUniverse.class)); - cards.add(new SetCardInfo("Mishra's Factory", 178, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); - cards.add(new SetCardInfo("Moat", 21, Rarity.RARE, mage.cards.m.Moat.class)); - cards.add(new SetCardInfo("Mountain", 190, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 191, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 192, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain Yeti", 105, Rarity.COMMON, mage.cards.m.MountainYeti.class)); - cards.add(new SetCardInfo("Mystic Remora", 42, Rarity.UNCOMMON, mage.cards.m.MysticRemora.class)); - cards.add(new SetCardInfo("Nature's Lore", 124, Rarity.COMMON, mage.cards.n.NaturesLore.class)); - cards.add(new SetCardInfo("Nether Shadow", 77, Rarity.UNCOMMON, mage.cards.n.NetherShadow.class)); - cards.add(new SetCardInfo("Nevinyrral's Disk", 160, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); - cards.add(new SetCardInfo("Onulet", 161, Rarity.COMMON, mage.cards.o.Onulet.class)); - cards.add(new SetCardInfo("Orcish Mechanics", 106, Rarity.UNCOMMON, mage.cards.o.OrcishMechanics.class)); - cards.add(new SetCardInfo("Order of Leitbur", 22, Rarity.COMMON, mage.cards.o.OrderOfLeitbur.class)); - cards.add(new SetCardInfo("Order of the Ebon Hand", 78, Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class)); - cards.add(new SetCardInfo("Oubliette", 79, Rarity.COMMON, mage.cards.o.Oubliette.class)); - cards.add(new SetCardInfo("Paralyze", 80, Rarity.COMMON, mage.cards.p.Paralyze.class)); - cards.add(new SetCardInfo("Petra Sphinx", 23, Rarity.RARE, mage.cards.p.PetraSphinx.class)); - cards.add(new SetCardInfo("Phantom Monster", 43, Rarity.COMMON, mage.cards.p.PhantomMonster.class)); - cards.add(new SetCardInfo("Phelddagrif", 150, Rarity.RARE, mage.cards.p.Phelddagrif.class)); - cards.add(new SetCardInfo("Phyrexian Boon", 81, Rarity.COMMON, mage.cards.p.PhyrexianBoon.class)); - cards.add(new SetCardInfo("Phyrexian War Beast", 162, Rarity.UNCOMMON, mage.cards.p.PhyrexianWarBeast.class)); - cards.add(new SetCardInfo("Plains", 181, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 182, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 183, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Polar Kraken", 44, Rarity.RARE, mage.cards.p.PolarKraken.class)); - cards.add(new SetCardInfo("Pox", 82, Rarity.RARE, mage.cards.p.Pox.class)); - cards.add(new SetCardInfo("Preacher", 24, Rarity.RARE, mage.cards.p.Preacher.class)); - cards.add(new SetCardInfo("Primal Order", 125, Rarity.RARE, mage.cards.p.PrimalOrder.class)); - cards.add(new SetCardInfo("Psychic Purge", 45, Rarity.UNCOMMON, mage.cards.p.PsychicPurge.class)); - cards.add(new SetCardInfo("Psychic Venom", 46, Rarity.COMMON, mage.cards.p.PsychicVenom.class)); - cards.add(new SetCardInfo("Pyroblast", 107, Rarity.COMMON, mage.cards.p.Pyroblast.class)); - cards.add(new SetCardInfo("Rabid Wombat", 126, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); - cards.add(new SetCardInfo("Rainbow Vale", 179, Rarity.RARE, mage.cards.r.RainbowVale.class)); - cards.add(new SetCardInfo("Righteous Avengers", 25, Rarity.COMMON, mage.cards.r.RighteousAvengers.class)); - cards.add(new SetCardInfo("Ring of Ma'ruf", 163, Rarity.RARE, mage.cards.r.RingOfMaruf.class)); - cards.add(new SetCardInfo("River Merfolk", 47, Rarity.COMMON, mage.cards.r.RiverMerfolk.class)); - cards.add(new SetCardInfo("Roots", 127, Rarity.COMMON, mage.cards.r.Roots.class)); - cards.add(new SetCardInfo("Scryb Sprites", 128, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); - cards.add(new SetCardInfo("Seasinger", 49, Rarity.UNCOMMON, mage.cards.s.Seasinger.class)); - cards.add(new SetCardInfo("Sea Sprite", 48, Rarity.COMMON, mage.cards.s.SeaSprite.class)); - cards.add(new SetCardInfo("Seraph", 26, Rarity.RARE, mage.cards.s.Seraph.class)); - cards.add(new SetCardInfo("Serendib Efreet", 50, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); - cards.add(new SetCardInfo("Serpent Generator", 164, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); - cards.add(new SetCardInfo("Shambling Strider", 129, Rarity.COMMON, mage.cards.s.ShamblingStrider.class)); - cards.add(new SetCardInfo("Shield of the Ages", 165, Rarity.UNCOMMON, mage.cards.s.ShieldOfTheAges.class)); - cards.add(new SetCardInfo("Shield Sphere", 166, Rarity.COMMON, mage.cards.s.ShieldSphere.class)); - cards.add(new SetCardInfo("Singing Tree", 130, Rarity.UNCOMMON, mage.cards.s.SingingTree.class)); - cards.add(new SetCardInfo("Spectral Bears", 131, Rarity.UNCOMMON, mage.cards.s.SpectralBears.class)); - cards.add(new SetCardInfo("Spinal Villain", 108, Rarity.UNCOMMON, mage.cards.s.SpinalVillain.class)); - cards.add(new SetCardInfo("Stone Calendar", 167, Rarity.UNCOMMON, mage.cards.s.StoneCalendar.class)); - cards.add(new SetCardInfo("Stone Giant", 109, Rarity.UNCOMMON, mage.cards.s.StoneGiant.class)); - cards.add(new SetCardInfo("Storm Seeker", 132, Rarity.UNCOMMON, mage.cards.s.StormSeeker.class)); - cards.add(new SetCardInfo("Su-Chi", 168, Rarity.RARE, mage.cards.s.SuChi.class)); - cards.add(new SetCardInfo("Sunken City", 51, Rarity.UNCOMMON, mage.cards.s.SunkenCity.class)); - cards.add(new SetCardInfo("Swamp", 187, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 188, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 189, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sylvan Library", 133, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); - cards.add(new SetCardInfo("Tawnos's Coffin", 169, Rarity.RARE, mage.cards.t.TawnossCoffin.class)); - cards.add(new SetCardInfo("Telekinesis", 52, Rarity.COMMON, mage.cards.t.Telekinesis.class)); - cards.add(new SetCardInfo("Thawing Glaciers", 180, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); - cards.add(new SetCardInfo("Thicket Basilisk", 134, Rarity.UNCOMMON, mage.cards.t.ThicketBasilisk.class)); - cards.add(new SetCardInfo("Thorn Thallid", 135, Rarity.COMMON, mage.cards.t.ThornThallid.class)); - cards.add(new SetCardInfo("Thrull Champion", 83, Rarity.RARE, mage.cards.t.ThrullChampion.class)); - cards.add(new SetCardInfo("Thrull Retainer", 84, Rarity.COMMON, mage.cards.t.ThrullRetainer.class)); - cards.add(new SetCardInfo("Thunder Spirit", 27, Rarity.UNCOMMON, mage.cards.t.ThunderSpirit.class)); - cards.add(new SetCardInfo("Time Elemental", 53, Rarity.RARE, mage.cards.t.TimeElemental.class)); - cards.add(new SetCardInfo("Tivadar's Crusade", 28, Rarity.UNCOMMON, mage.cards.t.TivadarsCrusade.class)); - cards.add(new SetCardInfo("Tornado", 136, Rarity.RARE, mage.cards.t.Tornado.class)); - cards.add(new SetCardInfo("Urza's Bauble", 170, Rarity.UNCOMMON, mage.cards.u.UrzasBauble.class)); - cards.add(new SetCardInfo("Urza's Chalice", 171, Rarity.COMMON, mage.cards.u.UrzasChalice.class)); - cards.add(new SetCardInfo("Varchild's War-Riders", 110, Rarity.RARE, mage.cards.v.VarchildsWarRiders.class)); - cards.add(new SetCardInfo("Vesuvan Doppelganger", 54, Rarity.RARE, mage.cards.v.VesuvanDoppelganger.class)); - cards.add(new SetCardInfo("Vodalian Knights", 55, Rarity.UNCOMMON, mage.cards.v.VodalianKnights.class)); - cards.add(new SetCardInfo("Walking Wall", 172, Rarity.UNCOMMON, mage.cards.w.WalkingWall.class)); - cards.add(new SetCardInfo("Wanderlust", 137, Rarity.COMMON, mage.cards.w.Wanderlust.class)); - cards.add(new SetCardInfo("Winds of Change", 111, Rarity.UNCOMMON, mage.cards.w.WindsOfChange.class)); - cards.add(new SetCardInfo("Winter Blast", 138, Rarity.UNCOMMON, mage.cards.w.WinterBlast.class)); - cards.add(new SetCardInfo("Winter Orb", 173, Rarity.RARE, mage.cards.w.WinterOrb.class)); - cards.add(new SetCardInfo("Word of Undoing", 56, Rarity.COMMON, mage.cards.w.WordOfUndoing.class)); - cards.add(new SetCardInfo("Wyluli Wolf", 139, Rarity.COMMON, mage.cards.w.WyluliWolf.class)); - cards.add(new SetCardInfo("Yavimaya Ants", 140, Rarity.UNCOMMON, mage.cards.y.YavimayaAnts.class)); - cards.add(new SetCardInfo("Ydwen Efreet", 112, Rarity.RARE, mage.cards.y.YdwenEfreet.class)); - cards.add(new SetCardInfo("Zuran Orb", 174, Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class)); - } + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author LevelX2 + */ +public final class MastersEdition extends ExpansionSet { + + private static final MastersEdition instance = new MastersEdition(); + + public static MastersEdition getInstance() { + return instance; + } + + private MastersEdition() { + super("Masters Edition", "MED", ExpansionSet.buildDate(2007, 9, 10), SetType.MAGIC_ONLINE); + this.hasBasicLands = true; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Adun Oakenshield", 141, Rarity.RARE, mage.cards.a.AdunOakenshield.class)); + cards.add(new SetCardInfo("Amnesia", 29, Rarity.RARE, mage.cards.a.Amnesia.class)); + cards.add(new SetCardInfo("Angry Mob", 1, Rarity.UNCOMMON, mage.cards.a.AngryMob.class)); + cards.add(new SetCardInfo("Animate Dead", 57, Rarity.UNCOMMON, mage.cards.a.AnimateDead.class)); + cards.add(new SetCardInfo("Animate Wall", 2, Rarity.UNCOMMON, mage.cards.a.AnimateWall.class)); + cards.add(new SetCardInfo("Ankh of Mishra", 151, Rarity.RARE, mage.cards.a.AnkhOfMishra.class)); + cards.add(new SetCardInfo("Apprentice Wizard", 30, Rarity.COMMON, mage.cards.a.ApprenticeWizard.class)); + cards.add(new SetCardInfo("Arcane Denial", 31, Rarity.COMMON, mage.cards.a.ArcaneDenial.class)); + cards.add(new SetCardInfo("Argivian Archaeologist", 3, Rarity.RARE, mage.cards.a.ArgivianArchaeologist.class)); + cards.add(new SetCardInfo("Armageddon", 4, Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Artifact Blast", 85, Rarity.COMMON, mage.cards.a.ArtifactBlast.class)); + cards.add(new SetCardInfo("Ashnod's Transmogrant", 152, Rarity.COMMON, mage.cards.a.AshnodsTransmogrant.class)); + cards.add(new SetCardInfo("Autumn Willow", 113, Rarity.RARE, mage.cards.a.AutumnWillow.class)); + cards.add(new SetCardInfo("Balduvian Horde", 86, Rarity.RARE, mage.cards.b.BalduvianHorde.class)); + cards.add(new SetCardInfo("Ball Lightning", 87, Rarity.RARE, mage.cards.b.BallLightning.class)); + cards.add(new SetCardInfo("Baron Sengir", 58, Rarity.RARE, mage.cards.b.BaronSengir.class)); + cards.add(new SetCardInfo("Basal Thrull", 59, Rarity.COMMON, mage.cards.b.BasalThrull.class)); + cards.add(new SetCardInfo("Benalish Hero", 5, Rarity.COMMON, mage.cards.b.BenalishHero.class)); + cards.add(new SetCardInfo("Berserk", 114, Rarity.RARE, mage.cards.b.Berserk.class)); + cards.add(new SetCardInfo("Bestial Fury", 88, Rarity.COMMON, mage.cards.b.BestialFury.class)); + cards.add(new SetCardInfo("Black Knight", 60, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); + cards.add(new SetCardInfo("Blight", 61, Rarity.UNCOMMON, mage.cards.b.Blight.class)); + cards.add(new SetCardInfo("Breeding Pit", 62, Rarity.UNCOMMON, mage.cards.b.BreedingPit.class)); + cards.add(new SetCardInfo("Brothers of Fire", 89, Rarity.COMMON, mage.cards.b.BrothersOfFire.class)); + cards.add(new SetCardInfo("Carnivorous Plant", 115, Rarity.UNCOMMON, mage.cards.c.CarnivorousPlant.class)); + cards.add(new SetCardInfo("Centaur Archer", 142, Rarity.UNCOMMON, mage.cards.c.CentaurArcher.class)); + cards.add(new SetCardInfo("Chains of Mephistopheles", 63, Rarity.RARE, mage.cards.c.ChainsOfMephistopheles.class)); + cards.add(new SetCardInfo("Chub Toad", 116, Rarity.COMMON, mage.cards.c.ChubToad.class)); + cards.add(new SetCardInfo("Clockwork Beast", 153, Rarity.UNCOMMON, mage.cards.c.ClockworkBeast.class)); + cards.add(new SetCardInfo("Contagion", 64, Rarity.RARE, mage.cards.c.Contagion.class)); + cards.add(new SetCardInfo("Copper Tablet", 154, Rarity.UNCOMMON, mage.cards.c.CopperTablet.class)); + cards.add(new SetCardInfo("Crookshank Kobolds", 90, Rarity.COMMON, mage.cards.c.CrookshankKobolds.class)); + cards.add(new SetCardInfo("Crusade", 6, Rarity.RARE, mage.cards.c.Crusade.class)); + cards.add(new SetCardInfo("Cuombajj Witches", 65, Rarity.COMMON, mage.cards.c.CuombajjWitches.class)); + cards.add(new SetCardInfo("Cursed Rack", 155, Rarity.UNCOMMON, mage.cards.c.CursedRack.class)); + cards.add(new SetCardInfo("Dakkon Blackblade", 143, Rarity.RARE, mage.cards.d.DakkonBlackblade.class)); + cards.add(new SetCardInfo("Death Speakers", 7, Rarity.COMMON, mage.cards.d.DeathSpeakers.class)); + cards.add(new SetCardInfo("Death Ward", 8, Rarity.COMMON, mage.cards.d.DeathWard.class)); + cards.add(new SetCardInfo("Derelor", 66, Rarity.UNCOMMON, mage.cards.d.Derelor.class)); + cards.add(new SetCardInfo("Diamond Valley", 175, Rarity.RARE, mage.cards.d.DiamondValley.class)); + cards.add(new SetCardInfo("Diminishing Returns", 32, Rarity.RARE, mage.cards.d.DiminishingReturns.class)); + cards.add(new SetCardInfo("Divine Transformation", 9, Rarity.UNCOMMON, mage.cards.d.DivineTransformation.class)); + cards.add(new SetCardInfo("Dragon Engine", 156, Rarity.COMMON, mage.cards.d.DragonEngine.class)); + cards.add(new SetCardInfo("Dust to Dust", 10, Rarity.COMMON, mage.cards.d.DustToDust.class)); + cards.add(new SetCardInfo("Dwarven Catapult", 91, Rarity.UNCOMMON, mage.cards.d.DwarvenCatapult.class)); + cards.add(new SetCardInfo("Dwarven Soldier", 92, Rarity.COMMON, mage.cards.d.DwarvenSoldier.class)); + cards.add(new SetCardInfo("Eater of the Dead", 67, Rarity.UNCOMMON, mage.cards.e.EaterOfTheDead.class)); + cards.add(new SetCardInfo("Elder Land Wurm", 11, Rarity.UNCOMMON, mage.cards.e.ElderLandWurm.class)); + cards.add(new SetCardInfo("Erg Raiders", 68, Rarity.COMMON, mage.cards.e.ErgRaiders.class)); + cards.add(new SetCardInfo("Eureka", 117, Rarity.RARE, mage.cards.e.Eureka.class)); + cards.add(new SetCardInfo("Exile", 12, Rarity.COMMON, mage.cards.e.Exile.class)); + cards.add(new SetCardInfo("The Fallen", 69, Rarity.UNCOMMON, mage.cards.t.TheFallen.class)); + cards.add(new SetCardInfo("Feast or Famine", 70, Rarity.COMMON, mage.cards.f.FeastOrFamine.class)); + cards.add(new SetCardInfo("Fire Covenant", 145, Rarity.UNCOMMON, mage.cards.f.FireCovenant.class)); + cards.add(new SetCardInfo("Fissure", 93, Rarity.COMMON, mage.cards.f.Fissure.class)); + cards.add(new SetCardInfo("Forcefield", 157, Rarity.RARE, mage.cards.f.Forcefield.class)); + cards.add(new SetCardInfo("Force of Will", 33, Rarity.RARE, mage.cards.f.ForceOfWill.class)); + cards.add(new SetCardInfo("Forest", 193, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 194, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 195, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fyndhorn Elves", 118, Rarity.COMMON, mage.cards.f.FyndhornElves.class)); + cards.add(new SetCardInfo("Ghazban Ogre", 120, Rarity.COMMON, mage.cards.g.GhazbanOgre.class)); + cards.add(new SetCardInfo("Giant Tortoise", 34, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); + cards.add(new SetCardInfo("Goblin Chirurgeon", 94, Rarity.COMMON, mage.cards.g.GoblinChirurgeon.class)); + cards.add(new SetCardInfo("Goblin Grenade", 95, Rarity.UNCOMMON, mage.cards.g.GoblinGrenade.class)); + cards.add(new SetCardInfo("Goblin Mutant", 96, Rarity.UNCOMMON, mage.cards.g.GoblinMutant.class)); + cards.add(new SetCardInfo("Goblins of the Flarg", 98, Rarity.COMMON, mage.cards.g.GoblinsOfTheFlarg.class)); + cards.add(new SetCardInfo("Goblin Wizard", 97, Rarity.RARE, mage.cards.g.GoblinWizard.class)); + cards.add(new SetCardInfo("Granite Gargoyle", 99, Rarity.UNCOMMON, mage.cards.g.GraniteGargoyle.class)); + cards.add(new SetCardInfo("Greater Realm of Preservation", 13, Rarity.UNCOMMON, mage.cards.g.GreaterRealmOfPreservation.class)); + cards.add(new SetCardInfo("Hallowed Ground", 14, Rarity.UNCOMMON, mage.cards.h.HallowedGround.class)); + cards.add(new SetCardInfo("Hand of Justice", 15, Rarity.RARE, mage.cards.h.HandOfJustice.class)); + cards.add(new SetCardInfo("Hecatomb", 71, Rarity.RARE, mage.cards.h.Hecatomb.class)); + cards.add(new SetCardInfo("High Tide", 35, Rarity.UNCOMMON, mage.cards.h.HighTide.class)); + cards.add(new SetCardInfo("Holy Light", 16, Rarity.COMMON, mage.cards.h.HolyLight.class)); + cards.add(new SetCardInfo("Homarid Spawning Bed", 36, Rarity.UNCOMMON, mage.cards.h.HomaridSpawningBed.class)); + cards.add(new SetCardInfo("Hungry Mist", 121, Rarity.COMMON, mage.cards.h.HungryMist.class)); + cards.add(new SetCardInfo("Hyalopterous Lemure", 72, Rarity.COMMON, mage.cards.h.HyalopterousLemure.class)); + cards.add(new SetCardInfo("Hydroblast", 37, Rarity.COMMON, mage.cards.h.Hydroblast.class)); + cards.add(new SetCardInfo("Hymn of Rebirth", 146, Rarity.UNCOMMON, mage.cards.h.HymnOfRebirth.class)); + cards.add(new SetCardInfo("Hymn to Tourach", 73, Rarity.UNCOMMON, mage.cards.h.HymnToTourach.class)); + cards.add(new SetCardInfo("Icatian Lieutenant", 17, Rarity.COMMON, mage.cards.i.IcatianLieutenant.class)); + cards.add(new SetCardInfo("Icatian Town", 18, Rarity.UNCOMMON, mage.cards.i.IcatianTown.class)); + cards.add(new SetCardInfo("Ice Storm", 122, Rarity.UNCOMMON, mage.cards.i.IceStorm.class)); + cards.add(new SetCardInfo("Ifh-Biff Efreet", 123, Rarity.RARE, mage.cards.i.IfhBiffEfreet.class)); + cards.add(new SetCardInfo("Illusionary Forces", 38, Rarity.UNCOMMON, mage.cards.i.IllusionaryForces.class)); + cards.add(new SetCardInfo("Illusionary Wall", 39, Rarity.COMMON, mage.cards.i.IllusionaryWall.class)); + cards.add(new SetCardInfo("Illusions of Grandeur", 40, Rarity.RARE, mage.cards.i.IllusionsOfGrandeur.class)); + cards.add(new SetCardInfo("Island", 184, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 185, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 186, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island of Wak-Wak", 176, Rarity.RARE, mage.cards.i.IslandOfWakWak.class)); + cards.add(new SetCardInfo("Ivory Tower", 158, Rarity.RARE, mage.cards.i.IvoryTower.class)); + cards.add(new SetCardInfo("Jacques le Vert", 147, Rarity.RARE, mage.cards.j.JacquesLeVert.class)); + cards.add(new SetCardInfo("Jokulhaups", 100, Rarity.RARE, mage.cards.j.Jokulhaups.class)); + cards.add(new SetCardInfo("Juxtapose", 41, Rarity.UNCOMMON, mage.cards.j.Juxtapose.class)); + cards.add(new SetCardInfo("Juzam Djinn", 74, Rarity.RARE, mage.cards.j.JuzamDjinn.class)); + cards.add(new SetCardInfo("Keldon Warlord", 101, Rarity.UNCOMMON, mage.cards.k.KeldonWarlord.class)); + cards.add(new SetCardInfo("Khabal Ghoul", 75, Rarity.RARE, mage.cards.k.KhabalGhoul.class)); + cards.add(new SetCardInfo("Knights of Thorn", 19, Rarity.COMMON, mage.cards.k.KnightsOfThorn.class)); + cards.add(new SetCardInfo("Lake of the Dead", 177, Rarity.RARE, mage.cards.l.LakeOfTheDead.class)); + cards.add(new SetCardInfo("Lightning Bolt", 102, Rarity.COMMON, mage.cards.l.LightningBolt.class)); + cards.add(new SetCardInfo("Lim-Dul's Vault", 148, Rarity.UNCOMMON, mage.cards.l.LimDulsVault.class)); + cards.add(new SetCardInfo("Lord of Tresserhorn", 149, Rarity.RARE, mage.cards.l.LordOfTresserhorn.class)); + cards.add(new SetCardInfo("Mana Flare", 103, Rarity.RARE, mage.cards.m.ManaFlare.class)); + cards.add(new SetCardInfo("Marton Stromgald", 104, Rarity.RARE, mage.cards.m.MartonStromgald.class)); + cards.add(new SetCardInfo("Mesa Pegasus", 20, Rarity.COMMON, mage.cards.m.MesaPegasus.class)); + cards.add(new SetCardInfo("Mindstab Thrull", 76, Rarity.COMMON, mage.cards.m.MindstabThrull.class)); + cards.add(new SetCardInfo("Mirror Universe", 159, Rarity.RARE, mage.cards.m.MirrorUniverse.class)); + cards.add(new SetCardInfo("Mishra's Factory", 178, Rarity.UNCOMMON, mage.cards.m.MishrasFactory.class)); + cards.add(new SetCardInfo("Moat", 21, Rarity.RARE, mage.cards.m.Moat.class)); + cards.add(new SetCardInfo("Mountain", 190, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 191, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 192, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain Yeti", 105, Rarity.COMMON, mage.cards.m.MountainYeti.class)); + cards.add(new SetCardInfo("Mystic Remora", 42, Rarity.UNCOMMON, mage.cards.m.MysticRemora.class)); + cards.add(new SetCardInfo("Nature's Lore", 124, Rarity.COMMON, mage.cards.n.NaturesLore.class)); + cards.add(new SetCardInfo("Nether Shadow", 77, Rarity.UNCOMMON, mage.cards.n.NetherShadow.class)); + cards.add(new SetCardInfo("Nevinyrral's Disk", 160, Rarity.RARE, mage.cards.n.NevinyrralsDisk.class)); + cards.add(new SetCardInfo("Onulet", 161, Rarity.COMMON, mage.cards.o.Onulet.class)); + cards.add(new SetCardInfo("Orcish Mechanics", 106, Rarity.UNCOMMON, mage.cards.o.OrcishMechanics.class)); + cards.add(new SetCardInfo("Order of Leitbur", 22, Rarity.COMMON, mage.cards.o.OrderOfLeitbur.class)); + cards.add(new SetCardInfo("Order of the Ebon Hand", 78, Rarity.COMMON, mage.cards.o.OrderOfTheEbonHand.class)); + cards.add(new SetCardInfo("Oubliette", 79, Rarity.COMMON, mage.cards.o.Oubliette.class)); + cards.add(new SetCardInfo("Paralyze", 80, Rarity.COMMON, mage.cards.p.Paralyze.class)); + cards.add(new SetCardInfo("Petra Sphinx", 23, Rarity.RARE, mage.cards.p.PetraSphinx.class)); + cards.add(new SetCardInfo("Phantom Monster", 43, Rarity.COMMON, mage.cards.p.PhantomMonster.class)); + cards.add(new SetCardInfo("Phelddagrif", 150, Rarity.RARE, mage.cards.p.Phelddagrif.class)); + cards.add(new SetCardInfo("Phyrexian Boon", 81, Rarity.COMMON, mage.cards.p.PhyrexianBoon.class)); + cards.add(new SetCardInfo("Phyrexian War Beast", 162, Rarity.UNCOMMON, mage.cards.p.PhyrexianWarBeast.class)); + cards.add(new SetCardInfo("Plains", 181, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 182, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 183, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Polar Kraken", 44, Rarity.RARE, mage.cards.p.PolarKraken.class)); + cards.add(new SetCardInfo("Pox", 82, Rarity.RARE, mage.cards.p.Pox.class)); + cards.add(new SetCardInfo("Preacher", 24, Rarity.RARE, mage.cards.p.Preacher.class)); + cards.add(new SetCardInfo("Primal Order", 125, Rarity.RARE, mage.cards.p.PrimalOrder.class)); + cards.add(new SetCardInfo("Psychic Purge", 45, Rarity.UNCOMMON, mage.cards.p.PsychicPurge.class)); + cards.add(new SetCardInfo("Psychic Venom", 46, Rarity.COMMON, mage.cards.p.PsychicVenom.class)); + cards.add(new SetCardInfo("Pyroblast", 107, Rarity.COMMON, mage.cards.p.Pyroblast.class)); + cards.add(new SetCardInfo("Rabid Wombat", 126, Rarity.UNCOMMON, mage.cards.r.RabidWombat.class)); + cards.add(new SetCardInfo("Rainbow Vale", 179, Rarity.RARE, mage.cards.r.RainbowVale.class)); + cards.add(new SetCardInfo("Righteous Avengers", 25, Rarity.COMMON, mage.cards.r.RighteousAvengers.class)); + cards.add(new SetCardInfo("Ring of Ma'ruf", 163, Rarity.RARE, mage.cards.r.RingOfMaruf.class)); + cards.add(new SetCardInfo("River Merfolk", 47, Rarity.COMMON, mage.cards.r.RiverMerfolk.class)); + cards.add(new SetCardInfo("Roots", 127, Rarity.COMMON, mage.cards.r.Roots.class)); + cards.add(new SetCardInfo("Scryb Sprites", 128, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Seasinger", 49, Rarity.UNCOMMON, mage.cards.s.Seasinger.class)); + cards.add(new SetCardInfo("Sea Sprite", 48, Rarity.COMMON, mage.cards.s.SeaSprite.class)); + cards.add(new SetCardInfo("Seraph", 26, Rarity.RARE, mage.cards.s.Seraph.class)); + cards.add(new SetCardInfo("Serendib Efreet", 50, Rarity.RARE, mage.cards.s.SerendibEfreet.class)); + cards.add(new SetCardInfo("Serpent Generator", 164, Rarity.RARE, mage.cards.s.SerpentGenerator.class)); + cards.add(new SetCardInfo("Shambling Strider", 129, Rarity.COMMON, mage.cards.s.ShamblingStrider.class)); + cards.add(new SetCardInfo("Shield of the Ages", 165, Rarity.UNCOMMON, mage.cards.s.ShieldOfTheAges.class)); + cards.add(new SetCardInfo("Shield Sphere", 166, Rarity.COMMON, mage.cards.s.ShieldSphere.class)); + cards.add(new SetCardInfo("Singing Tree", 130, Rarity.UNCOMMON, mage.cards.s.SingingTree.class)); + cards.add(new SetCardInfo("Spectral Bears", 131, Rarity.UNCOMMON, mage.cards.s.SpectralBears.class)); + cards.add(new SetCardInfo("Spinal Villain", 108, Rarity.UNCOMMON, mage.cards.s.SpinalVillain.class)); + cards.add(new SetCardInfo("Stone Calendar", 167, Rarity.UNCOMMON, mage.cards.s.StoneCalendar.class)); + cards.add(new SetCardInfo("Stone Giant", 109, Rarity.UNCOMMON, mage.cards.s.StoneGiant.class)); + cards.add(new SetCardInfo("Storm Seeker", 132, Rarity.UNCOMMON, mage.cards.s.StormSeeker.class)); + cards.add(new SetCardInfo("Su-Chi", 168, Rarity.RARE, mage.cards.s.SuChi.class)); + cards.add(new SetCardInfo("Sunken City", 51, Rarity.UNCOMMON, mage.cards.s.SunkenCity.class)); + cards.add(new SetCardInfo("Swamp", 187, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 188, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 189, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Library", 133, Rarity.RARE, mage.cards.s.SylvanLibrary.class)); + cards.add(new SetCardInfo("Tawnos's Coffin", 169, Rarity.RARE, mage.cards.t.TawnossCoffin.class)); + cards.add(new SetCardInfo("Telekinesis", 52, Rarity.COMMON, mage.cards.t.Telekinesis.class)); + cards.add(new SetCardInfo("Thawing Glaciers", 180, Rarity.RARE, mage.cards.t.ThawingGlaciers.class)); + cards.add(new SetCardInfo("Thicket Basilisk", 134, Rarity.UNCOMMON, mage.cards.t.ThicketBasilisk.class)); + cards.add(new SetCardInfo("Thorn Thallid", 135, Rarity.COMMON, mage.cards.t.ThornThallid.class)); + cards.add(new SetCardInfo("Thrull Champion", 83, Rarity.RARE, mage.cards.t.ThrullChampion.class)); + cards.add(new SetCardInfo("Thrull Retainer", 84, Rarity.COMMON, mage.cards.t.ThrullRetainer.class)); + cards.add(new SetCardInfo("Thunder Spirit", 27, Rarity.UNCOMMON, mage.cards.t.ThunderSpirit.class)); + cards.add(new SetCardInfo("Time Elemental", 53, Rarity.RARE, mage.cards.t.TimeElemental.class)); + cards.add(new SetCardInfo("Tivadar's Crusade", 28, Rarity.UNCOMMON, mage.cards.t.TivadarsCrusade.class)); + cards.add(new SetCardInfo("Tornado", 136, Rarity.RARE, mage.cards.t.Tornado.class)); + cards.add(new SetCardInfo("Urza's Bauble", 170, Rarity.UNCOMMON, mage.cards.u.UrzasBauble.class)); + cards.add(new SetCardInfo("Urza's Chalice", 171, Rarity.COMMON, mage.cards.u.UrzasChalice.class)); + cards.add(new SetCardInfo("Varchild's War-Riders", 110, Rarity.RARE, mage.cards.v.VarchildsWarRiders.class)); + cards.add(new SetCardInfo("Vesuvan Doppelganger", 54, Rarity.RARE, mage.cards.v.VesuvanDoppelganger.class)); + cards.add(new SetCardInfo("Vodalian Knights", 55, Rarity.UNCOMMON, mage.cards.v.VodalianKnights.class)); + cards.add(new SetCardInfo("Walking Wall", 172, Rarity.UNCOMMON, mage.cards.w.WalkingWall.class)); + cards.add(new SetCardInfo("Wanderlust", 137, Rarity.COMMON, mage.cards.w.Wanderlust.class)); + cards.add(new SetCardInfo("Winds of Change", 111, Rarity.UNCOMMON, mage.cards.w.WindsOfChange.class)); + cards.add(new SetCardInfo("Winter Blast", 138, Rarity.UNCOMMON, mage.cards.w.WinterBlast.class)); + cards.add(new SetCardInfo("Winter Orb", 173, Rarity.RARE, mage.cards.w.WinterOrb.class)); + cards.add(new SetCardInfo("Word of Undoing", 56, Rarity.COMMON, mage.cards.w.WordOfUndoing.class)); + cards.add(new SetCardInfo("Wyluli Wolf", 139, Rarity.COMMON, mage.cards.w.WyluliWolf.class)); + cards.add(new SetCardInfo("Yavimaya Ants", 140, Rarity.UNCOMMON, mage.cards.y.YavimayaAnts.class)); + cards.add(new SetCardInfo("Ydwen Efreet", 112, Rarity.RARE, mage.cards.y.YdwenEfreet.class)); + cards.add(new SetCardInfo("Zuran Orb", 174, Rarity.UNCOMMON, mage.cards.z.ZuranOrb.class)); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/MastersEditionII.java b/Mage.Sets/src/mage/sets/MastersEditionII.java index 573f0482dff..35d1b0cc660 100644 --- a/Mage.Sets/src/mage/sets/MastersEditionII.java +++ b/Mage.Sets/src/mage/sets/MastersEditionII.java @@ -1,265 +1,265 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author LevelX2 - */ -public final class MastersEditionII extends ExpansionSet { - - private static final MastersEditionII instance = new MastersEditionII(); - - public static MastersEditionII getInstance() { - return instance; - } - - private MastersEditionII() { - super("Masters Edition II", "ME2", ExpansionSet.buildDate(2008, 9, 22), SetType.MAGIC_ONLINE); - this.hasBasicLands = true; - this.hasBoosters = true; - this.numBoosterLands = 1; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Abbey Gargoyles", 1, Rarity.UNCOMMON, mage.cards.a.AbbeyGargoyles.class)); - cards.add(new SetCardInfo("Adarkar Sentinel", 201, Rarity.COMMON, mage.cards.a.AdarkarSentinel.class)); - cards.add(new SetCardInfo("Aeolipile", 202, Rarity.COMMON, mage.cards.a.Aeolipile.class)); - cards.add(new SetCardInfo("Aether Storm", 39, Rarity.UNCOMMON, mage.cards.a.AetherStorm.class)); - cards.add(new SetCardInfo("Ambush Party", 115, Rarity.COMMON, mage.cards.a.AmbushParty.class)); - cards.add(new SetCardInfo("An-Zerrin Ruins", 117, Rarity.RARE, mage.cards.a.AnZerrinRuins.class)); - cards.add(new SetCardInfo("Anarchy", 116, Rarity.RARE, mage.cards.a.Anarchy.class)); - cards.add(new SetCardInfo("Angel of Fury", 2, Rarity.RARE, mage.cards.a.AngelOfFury.class)); - cards.add(new SetCardInfo("Angel of Light", 3, Rarity.UNCOMMON, mage.cards.a.AngelOfLight.class)); - cards.add(new SetCardInfo("Armor of Faith", 4, Rarity.COMMON, mage.cards.a.ArmorOfFaith.class)); - cards.add(new SetCardInfo("Armor Thrull", 77, Rarity.COMMON, mage.cards.a.ArmorThrull.class)); - cards.add(new SetCardInfo("Armored Griffin", 5, Rarity.COMMON, mage.cards.a.ArmoredGriffin.class)); - cards.add(new SetCardInfo("Ashen Ghoul", 78, Rarity.UNCOMMON, mage.cards.a.AshenGhoul.class)); - cards.add(new SetCardInfo("Ashnod's Cylix", 203, Rarity.RARE, mage.cards.a.AshnodsCylix.class)); - cards.add(new SetCardInfo("Aurochs", 153, Rarity.COMMON, mage.cards.a.Aurochs.class)); - cards.add(new SetCardInfo("Aysen Bureaucrats", 6, Rarity.COMMON, mage.cards.a.AysenBureaucrats.class)); - cards.add(new SetCardInfo("Aysen Crusader", 7, Rarity.UNCOMMON, mage.cards.a.AysenCrusader.class)); - cards.add(new SetCardInfo("Badlands", 225, Rarity.RARE, mage.cards.b.Badlands.class)); - cards.add(new SetCardInfo("Balduvian Conjurer", 40, Rarity.COMMON, mage.cards.b.BalduvianConjurer.class)); - cards.add(new SetCardInfo("Balduvian Dead", 79, Rarity.UNCOMMON, mage.cards.b.BalduvianDead.class)); - cards.add(new SetCardInfo("Balduvian Hydra", 118, Rarity.RARE, mage.cards.b.BalduvianHydra.class)); - cards.add(new SetCardInfo("Balduvian Trading Post", 226, Rarity.RARE, mage.cards.b.BalduvianTradingPost.class)); - cards.add(new SetCardInfo("Barbed Sextant", 204, Rarity.COMMON, mage.cards.b.BarbedSextant.class)); - cards.add(new SetCardInfo("Binding Grasp", 41, Rarity.RARE, mage.cards.b.BindingGrasp.class)); - cards.add(new SetCardInfo("Bounty of the Hunt", 154, Rarity.RARE, mage.cards.b.BountyOfTheHunt.class)); - cards.add(new SetCardInfo("Brainstorm", 42, Rarity.COMMON, mage.cards.b.Brainstorm.class)); - cards.add(new SetCardInfo("Brassclaw Orcs", 119, Rarity.COMMON, mage.cards.b.BrassclawOrcs.class)); - cards.add(new SetCardInfo("Brimstone Dragon", 120, Rarity.RARE, mage.cards.b.BrimstoneDragon.class)); - cards.add(new SetCardInfo("Brine Shaman", 80, Rarity.COMMON, mage.cards.b.BrineShaman.class)); - cards.add(new SetCardInfo("Broken Visage", 81, Rarity.UNCOMMON, mage.cards.b.BrokenVisage.class)); - cards.add(new SetCardInfo("Browse", 43, Rarity.UNCOMMON, mage.cards.b.Browse.class)); - cards.add(new SetCardInfo("Burnout", 121, Rarity.UNCOMMON, mage.cards.b.Burnout.class)); - cards.add(new SetCardInfo("Carapace", 155, Rarity.COMMON, mage.cards.c.Carapace.class)); - cards.add(new SetCardInfo("Caribou Range", 8, Rarity.RARE, mage.cards.c.CaribouRange.class)); - cards.add(new SetCardInfo("Cloak of Confusion", 82, Rarity.COMMON, mage.cards.c.CloakOfConfusion.class)); - cards.add(new SetCardInfo("Clockwork Steed", 205, Rarity.UNCOMMON, mage.cards.c.ClockworkSteed.class)); - cards.add(new SetCardInfo("Combat Medic", 9, Rarity.COMMON, mage.cards.c.CombatMedic.class)); - cards.add(new SetCardInfo("Conquer", 122, Rarity.UNCOMMON, mage.cards.c.Conquer.class)); - cards.add(new SetCardInfo("Counterspell", 44, Rarity.UNCOMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Dance of the Dead", 83, Rarity.UNCOMMON, mage.cards.d.DanceOfTheDead.class)); - cards.add(new SetCardInfo("Dark Banishing", 84, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); - cards.add(new SetCardInfo("Death Spark", 123, Rarity.COMMON, mage.cards.d.DeathSpark.class)); - cards.add(new SetCardInfo("Deep Spawn", 45, Rarity.RARE, mage.cards.d.DeepSpawn.class)); - cards.add(new SetCardInfo("Demonic Consultation", 85, Rarity.UNCOMMON, mage.cards.d.DemonicConsultation.class)); - cards.add(new SetCardInfo("Despotic Scepter", 206, Rarity.RARE, mage.cards.d.DespoticScepter.class)); - cards.add(new SetCardInfo("Diabolic Vision", 191, Rarity.UNCOMMON, mage.cards.d.DiabolicVision.class)); - cards.add(new SetCardInfo("Disenchant", 10, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Dreams of the Dead", 46, Rarity.RARE, mage.cards.d.DreamsOfTheDead.class)); - cards.add(new SetCardInfo("Drift of the Dead", 86, Rarity.COMMON, mage.cards.d.DriftOfTheDead.class)); - cards.add(new SetCardInfo("Dry Spell", 87, Rarity.COMMON, mage.cards.d.DrySpell.class)); - cards.add(new SetCardInfo("Dwarven Ruins", 227, Rarity.UNCOMMON, mage.cards.d.DwarvenRuins.class)); - cards.add(new SetCardInfo("Dystopia", 88, Rarity.RARE, mage.cards.d.Dystopia.class)); - cards.add(new SetCardInfo("Earthlink", 192, Rarity.RARE, mage.cards.e.Earthlink.class)); - cards.add(new SetCardInfo("Ebon Praetor", 89, Rarity.RARE, mage.cards.e.EbonPraetor.class)); - cards.add(new SetCardInfo("Ebon Stronghold", 228, Rarity.UNCOMMON, mage.cards.e.EbonStronghold.class)); - cards.add(new SetCardInfo("Elemental Augury", 193, Rarity.RARE, mage.cards.e.ElementalAugury.class)); - cards.add(new SetCardInfo("Elkin Bottle", 207, Rarity.RARE, mage.cards.e.ElkinBottle.class)); - cards.add(new SetCardInfo("Elven Lyre", 208, Rarity.COMMON, mage.cards.e.ElvenLyre.class)); - cards.add(new SetCardInfo("Elvish Farmer", 156, Rarity.RARE, mage.cards.e.ElvishFarmer.class)); - cards.add(new SetCardInfo("Elvish Hunter", 157, Rarity.COMMON, mage.cards.e.ElvishHunter.class)); - cards.add(new SetCardInfo("Elvish Ranger", 158, Rarity.COMMON, mage.cards.e.ElvishRanger.class)); - cards.add(new SetCardInfo("Elvish Spirit Guide", 159, Rarity.UNCOMMON, mage.cards.e.ElvishSpiritGuide.class)); - cards.add(new SetCardInfo("Energy Storm", 11, Rarity.RARE, mage.cards.e.EnergyStorm.class)); - cards.add(new SetCardInfo("Enervate", 47, Rarity.COMMON, mage.cards.e.Enervate.class)); - cards.add(new SetCardInfo("Errand of Duty", 12, Rarity.UNCOMMON, mage.cards.e.ErrandOfDuty.class)); - cards.add(new SetCardInfo("Errantry", 124, Rarity.COMMON, mage.cards.e.Errantry.class)); - cards.add(new SetCardInfo("Essence Filter", 160, Rarity.UNCOMMON, mage.cards.e.EssenceFilter.class)); - cards.add(new SetCardInfo("Essence Flare", 48, Rarity.COMMON, mage.cards.e.EssenceFlare.class)); - cards.add(new SetCardInfo("Farrel's Mantle", 13, Rarity.UNCOMMON, mage.cards.f.FarrelsMantle.class)); - cards.add(new SetCardInfo("Farrel's Zealot", 14, Rarity.UNCOMMON, mage.cards.f.FarrelsZealot.class)); - cards.add(new SetCardInfo("Feral Thallid", 161, Rarity.COMMON, mage.cards.f.FeralThallid.class)); - cards.add(new SetCardInfo("Fire Dragon", 125, Rarity.RARE, mage.cards.f.FireDragon.class)); - cards.add(new SetCardInfo("Flame Spirit", 126, Rarity.UNCOMMON, mage.cards.f.FlameSpirit.class)); - cards.add(new SetCardInfo("Folk of the Pines", 162, Rarity.COMMON, mage.cards.f.FolkOfThePines.class)); - cards.add(new SetCardInfo("Forbidden Lore", 163, Rarity.UNCOMMON, mage.cards.f.ForbiddenLore.class)); - cards.add(new SetCardInfo("Forgotten Lore", 164, Rarity.UNCOMMON, mage.cards.f.ForgottenLore.class)); - cards.add(new SetCardInfo("Foul Familiar", 90, Rarity.COMMON, mage.cards.f.FoulFamiliar.class)); - cards.add(new SetCardInfo("Fumarole", 194, Rarity.UNCOMMON, mage.cards.f.Fumarole.class)); - cards.add(new SetCardInfo("Funeral March", 91, Rarity.COMMON, mage.cards.f.FuneralMarch.class)); - cards.add(new SetCardInfo("Fungal Bloom", 165, Rarity.RARE, mage.cards.f.FungalBloom.class)); - cards.add(new SetCardInfo("Fyndhorn Pollen", 166, Rarity.RARE, mage.cards.f.FyndhornPollen.class)); - cards.add(new SetCardInfo("Gangrenous Zombies", 92, Rarity.COMMON, mage.cards.g.GangrenousZombies.class)); - cards.add(new SetCardInfo("Giant Growth", 167, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); - cards.add(new SetCardInfo("Giant Trap Door Spider", 195, Rarity.UNCOMMON, mage.cards.g.GiantTrapDoorSpider.class)); - cards.add(new SetCardInfo("Glacial Chasm", 229, Rarity.RARE, mage.cards.g.GlacialChasm.class)); - cards.add(new SetCardInfo("Glacial Crevasses", 127, Rarity.RARE, mage.cards.g.GlacialCrevasses.class)); - cards.add(new SetCardInfo("Gorilla Shaman", 129, Rarity.UNCOMMON, mage.cards.g.GorillaShaman.class)); - cards.add(new SetCardInfo("Grandmother Sengir", 93, Rarity.RARE, mage.cards.g.GrandmotherSengir.class)); - cards.add(new SetCardInfo("Havenwood Battleground", 230, Rarity.UNCOMMON, mage.cards.h.HavenwoodBattleground.class)); - cards.add(new SetCardInfo("Heart of Yavimaya", 231, Rarity.RARE, mage.cards.h.HeartOfYavimaya.class)); - cards.add(new SetCardInfo("Helm of Obedience", 210, Rarity.RARE, mage.cards.h.HelmOfObedience.class)); - cards.add(new SetCardInfo("Icatian Javelineers", 15, Rarity.COMMON, mage.cards.i.IcatianJavelineers.class)); - cards.add(new SetCardInfo("Icatian Phalanx", 16, Rarity.COMMON, mage.cards.i.IcatianPhalanx.class)); - cards.add(new SetCardInfo("Icatian Scout", 17, Rarity.COMMON, mage.cards.i.IcatianScout.class)); - cards.add(new SetCardInfo("Ice Floe", 232, Rarity.UNCOMMON, mage.cards.i.IceFloe.class)); - cards.add(new SetCardInfo("Iceberg", 49, Rarity.UNCOMMON, mage.cards.i.Iceberg.class)); - cards.add(new SetCardInfo("Icequake", 94, Rarity.COMMON, mage.cards.i.Icequake.class)); - cards.add(new SetCardInfo("Icy Prison", 50, Rarity.COMMON, mage.cards.i.IcyPrison.class)); - cards.add(new SetCardInfo("Ihsan's Shade", 95, Rarity.RARE, mage.cards.i.IhsansShade.class)); - cards.add(new SetCardInfo("Imperial Recruiter", 130, Rarity.RARE, mage.cards.i.ImperialRecruiter.class)); - cards.add(new SetCardInfo("Imperial Seal", 96, Rarity.RARE, mage.cards.i.ImperialSeal.class)); - cards.add(new SetCardInfo("Incinerate", 131, Rarity.COMMON, mage.cards.i.Incinerate.class)); - cards.add(new SetCardInfo("Infernal Darkness", 97, Rarity.RARE, mage.cards.i.InfernalDarkness.class)); - cards.add(new SetCardInfo("Inheritance", 18, Rarity.UNCOMMON, mage.cards.i.Inheritance.class)); - cards.add(new SetCardInfo("Ironclaw Orcs", 132, Rarity.COMMON, mage.cards.i.IronclawOrcs.class)); - cards.add(new SetCardInfo("Ivory Gargoyle", 19, Rarity.RARE, mage.cards.i.IvoryGargoyle.class)); - cards.add(new SetCardInfo("Jester's Mask", 211, Rarity.RARE, mage.cards.j.JestersMask.class)); - cards.add(new SetCardInfo("Jeweled Amulet", 212, Rarity.UNCOMMON, mage.cards.j.JeweledAmulet.class)); - cards.add(new SetCardInfo("Johtull Wurm", 168, Rarity.UNCOMMON, mage.cards.j.JohtullWurm.class)); - cards.add(new SetCardInfo("Joven's Ferrets", 169, Rarity.UNCOMMON, mage.cards.j.JovensFerrets.class)); - cards.add(new SetCardInfo("Juniper Order Advocate", 20, Rarity.UNCOMMON, mage.cards.j.JuniperOrderAdvocate.class)); - cards.add(new SetCardInfo("Karplusan Giant", 133, Rarity.UNCOMMON, mage.cards.k.KarplusanGiant.class)); - cards.add(new SetCardInfo("Kaysa", 170, Rarity.RARE, mage.cards.k.Kaysa.class)); - cards.add(new SetCardInfo("Kjeldoran Dead", 98, Rarity.COMMON, mage.cards.k.KjeldoranDead.class)); - cards.add(new SetCardInfo("Kjeldoran Home Guard", 22, Rarity.UNCOMMON, mage.cards.k.KjeldoranHomeGuard.class)); - cards.add(new SetCardInfo("Kjeldoran Outpost", 233, Rarity.RARE, mage.cards.k.KjeldoranOutpost.class)); - cards.add(new SetCardInfo("Kjeldoran Skycaptain", 23, Rarity.COMMON, mage.cards.k.KjeldoranSkycaptain.class)); - cards.add(new SetCardInfo("Knight of Stromgald", 99, Rarity.UNCOMMON, mage.cards.k.KnightOfStromgald.class)); - cards.add(new SetCardInfo("Krovikan Fetish", 100, Rarity.COMMON, mage.cards.k.KrovikanFetish.class)); - cards.add(new SetCardInfo("Krovikan Horror", 101, Rarity.RARE, mage.cards.k.KrovikanHorror.class)); - cards.add(new SetCardInfo("Krovikan Sorcerer", 51, Rarity.COMMON, mage.cards.k.KrovikanSorcerer.class)); - cards.add(new SetCardInfo("Krovikan Vampire", 102, Rarity.UNCOMMON, mage.cards.k.KrovikanVampire.class)); - cards.add(new SetCardInfo("Lat-Nam's Legacy", 52, Rarity.COMMON, mage.cards.l.LatNamsLegacy.class)); - cards.add(new SetCardInfo("Leaping Lizard", 171, Rarity.COMMON, mage.cards.l.LeapingLizard.class)); - cards.add(new SetCardInfo("Lim-Dul's High Guard", 103, Rarity.UNCOMMON, mage.cards.l.LimDulsHighGuard.class)); - cards.add(new SetCardInfo("Lodestone Bauble", 213, Rarity.RARE, mage.cards.l.LodestoneBauble.class)); - cards.add(new SetCardInfo("Lost Order of Jarkeld", 24, Rarity.RARE, mage.cards.l.LostOrderOfJarkeld.class)); - cards.add(new SetCardInfo("Magus of the Unseen", 53, Rarity.RARE, mage.cards.m.MagusOfTheUnseen.class)); - cards.add(new SetCardInfo("Mana Crypt", 214, Rarity.RARE, mage.cards.m.ManaCrypt.class)); - cards.add(new SetCardInfo("Marjhan", 54, Rarity.RARE, mage.cards.m.Marjhan.class)); - cards.add(new SetCardInfo("Mesmeric Trance", 55, Rarity.RARE, mage.cards.m.MesmericTrance.class)); - cards.add(new SetCardInfo("Meteor Shower", 135, Rarity.COMMON, mage.cards.m.MeteorShower.class)); - cards.add(new SetCardInfo("Minion of Leshrac", 104, Rarity.RARE, mage.cards.m.MinionOfLeshrac.class)); - cards.add(new SetCardInfo("Mishra's Groundbreaker", 215, Rarity.UNCOMMON, mage.cards.m.MishrasGroundbreaker.class)); - cards.add(new SetCardInfo("Misinformation", 105, Rarity.UNCOMMON, mage.cards.m.Misinformation.class)); - cards.add(new SetCardInfo("Mudslide", 136, Rarity.RARE, mage.cards.m.Mudslide.class)); - cards.add(new SetCardInfo("Musician", 56, Rarity.RARE, mage.cards.m.Musician.class)); - cards.add(new SetCardInfo("Narwhal", 57, Rarity.UNCOMMON, mage.cards.n.Narwhal.class)); - cards.add(new SetCardInfo("Nature's Blessing", 196, Rarity.UNCOMMON, mage.cards.n.NaturesBlessing.class)); - cards.add(new SetCardInfo("Nature's Wrath", 172, Rarity.RARE, mage.cards.n.NaturesWrath.class)); - cards.add(new SetCardInfo("Necrite", 106, Rarity.COMMON, mage.cards.n.Necrite.class)); - cards.add(new SetCardInfo("Necropotence", 107, Rarity.RARE, mage.cards.n.Necropotence.class)); - cards.add(new SetCardInfo("Night Soil", 173, Rarity.UNCOMMON, mage.cards.n.NightSoil.class)); - cards.add(new SetCardInfo("Orc General", 137, Rarity.UNCOMMON, mage.cards.o.OrcGeneral.class)); - cards.add(new SetCardInfo("Orcish Cannoneers", 138, Rarity.UNCOMMON, mage.cards.o.OrcishCannoneers.class)); - cards.add(new SetCardInfo("Orcish Captain", 139, Rarity.UNCOMMON, mage.cards.o.OrcishCaptain.class)); - cards.add(new SetCardInfo("Orcish Lumberjack", 142, Rarity.COMMON, mage.cards.o.OrcishLumberjack.class)); - cards.add(new SetCardInfo("Orcish Squatters", 143, Rarity.RARE, mage.cards.o.OrcishSquatters.class)); - cards.add(new SetCardInfo("Orcish Veteran", 144, Rarity.COMMON, mage.cards.o.OrcishVeteran.class)); - cards.add(new SetCardInfo("Order of the Sacred Torch", 25, Rarity.RARE, mage.cards.o.OrderOfTheSacredTorch.class)); - cards.add(new SetCardInfo("Order of the White Shield", 26, Rarity.UNCOMMON, mage.cards.o.OrderOfTheWhiteShield.class)); - cards.add(new SetCardInfo("Panic", 145, Rarity.COMMON, mage.cards.p.Panic.class)); - cards.add(new SetCardInfo("Personal Tutor", 58, Rarity.UNCOMMON, mage.cards.p.PersonalTutor.class)); - cards.add(new SetCardInfo("Phantasmal Fiend", 108, Rarity.COMMON, mage.cards.p.PhantasmalFiend.class)); - cards.add(new SetCardInfo("Phantasmal Mount", 59, Rarity.COMMON, mage.cards.p.PhantasmalMount.class)); - cards.add(new SetCardInfo("Phyrexian Devourer", 216, Rarity.UNCOMMON, mage.cards.p.PhyrexianDevourer.class)); - cards.add(new SetCardInfo("Pillage", 146, Rarity.UNCOMMON, mage.cards.p.Pillage.class)); - cards.add(new SetCardInfo("Portent", 60, Rarity.COMMON, mage.cards.p.Portent.class)); - cards.add(new SetCardInfo("Pyrokinesis", 147, Rarity.RARE, mage.cards.p.Pyrokinesis.class)); - cards.add(new SetCardInfo("Ravages of War", 27, Rarity.RARE, mage.cards.r.RavagesOfWar.class)); - cards.add(new SetCardInfo("Ray of Command", 61, Rarity.UNCOMMON, mage.cards.r.RayOfCommand.class)); - cards.add(new SetCardInfo("Red Cliffs Armada", 62, Rarity.COMMON, mage.cards.r.RedCliffsArmada.class)); - cards.add(new SetCardInfo("Reinforcements", 28, Rarity.COMMON, mage.cards.r.Reinforcements.class)); - cards.add(new SetCardInfo("Reprisal", 29, Rarity.COMMON, mage.cards.r.Reprisal.class)); - cards.add(new SetCardInfo("Retribution", 148, Rarity.UNCOMMON, mage.cards.r.Retribution.class)); - cards.add(new SetCardInfo("Righteous Fury", 30, Rarity.RARE, mage.cards.r.RighteousFury.class)); - cards.add(new SetCardInfo("Ritual of Subdual", 174, Rarity.RARE, mage.cards.r.RitualOfSubdual.class)); - cards.add(new SetCardInfo("Ritual of the Machine", 109, Rarity.RARE, mage.cards.r.RitualOfTheMachine.class)); - cards.add(new SetCardInfo("Roterothopter", 218, Rarity.COMMON, mage.cards.r.Roterothopter.class)); - cards.add(new SetCardInfo("Rogue Skycaptain", 149, Rarity.RARE, mage.cards.r.RogueSkycaptain.class)); - cards.add(new SetCardInfo("Royal Decree", 31, Rarity.RARE, mage.cards.r.RoyalDecree.class)); - cards.add(new SetCardInfo("Royal Trooper", 32, Rarity.COMMON, mage.cards.r.RoyalTrooper.class)); - cards.add(new SetCardInfo("Ruins of Trokair", 234, Rarity.UNCOMMON, mage.cards.r.RuinsOfTrokair.class)); - cards.add(new SetCardInfo("Savannah", 235, Rarity.RARE, mage.cards.s.Savannah.class)); - cards.add(new SetCardInfo("Screeching Drake", 63, Rarity.COMMON, mage.cards.s.ScreechingDrake.class)); - cards.add(new SetCardInfo("Sea Drake", 64, Rarity.RARE, mage.cards.s.SeaDrake.class)); - cards.add(new SetCardInfo("Sea Spirit", 65, Rarity.UNCOMMON, mage.cards.s.SeaSpirit.class)); - cards.add(new SetCardInfo("Shield Bearer", 35, Rarity.COMMON, mage.cards.s.ShieldBearer.class)); - cards.add(new SetCardInfo("Shrink", 175, Rarity.COMMON, mage.cards.s.Shrink.class)); - cards.add(new SetCardInfo("Shyft", 66, Rarity.COMMON, mage.cards.s.Shyft.class)); - cards.add(new SetCardInfo("Sibilant Spirit", 67, Rarity.RARE, mage.cards.s.SibilantSpirit.class)); - cards.add(new SetCardInfo("Skeleton Ship", 197, Rarity.RARE, mage.cards.s.SkeletonShip.class)); - cards.add(new SetCardInfo("Skull Catapult", 219, Rarity.UNCOMMON, mage.cards.s.SkullCatapult.class)); - cards.add(new SetCardInfo("Snow Fortress", 220, Rarity.UNCOMMON, mage.cards.s.SnowFortress.class)); - cards.add(new SetCardInfo("Snow-Covered Forest", 245, Rarity.LAND, mage.cards.s.SnowCoveredForest.class)); - cards.add(new SetCardInfo("Snow-Covered Island", 242, Rarity.LAND, mage.cards.s.SnowCoveredIsland.class)); - cards.add(new SetCardInfo("Snow-Covered Mountain", 244, Rarity.LAND, mage.cards.s.SnowCoveredMountain.class)); - cards.add(new SetCardInfo("Snow-Covered Plains", 241, Rarity.LAND, mage.cards.s.SnowCoveredPlains.class)); - cards.add(new SetCardInfo("Snow-Covered Swamp", 243, Rarity.LAND, mage.cards.s.SnowCoveredSwamp.class)); - cards.add(new SetCardInfo("Soldevi Digger", 221, Rarity.UNCOMMON, mage.cards.s.SoldeviDigger.class)); - cards.add(new SetCardInfo("Soldevi Excavations", 236, Rarity.RARE, mage.cards.s.SoldeviExcavations.class)); - cards.add(new SetCardInfo("Soldevi Simulacrum", 222, Rarity.UNCOMMON, mage.cards.s.SoldeviSimulacrum.class)); - cards.add(new SetCardInfo("Songs of the Damned", 110, Rarity.COMMON, mage.cards.s.SongsOfTheDamned.class)); - cards.add(new SetCardInfo("Soul Exchange", 111, Rarity.UNCOMMON, mage.cards.s.SoulExchange.class)); - cards.add(new SetCardInfo("Soul Kiss", 112, Rarity.UNCOMMON, mage.cards.s.SoulKiss.class)); - cards.add(new SetCardInfo("Spore Cloud", 176, Rarity.UNCOMMON, mage.cards.s.SporeCloud.class)); - cards.add(new SetCardInfo("Spore Flower", 177, Rarity.UNCOMMON, mage.cards.s.SporeFlower.class)); - cards.add(new SetCardInfo("Stampede", 178, Rarity.UNCOMMON, mage.cards.s.Stampede.class)); - cards.add(new SetCardInfo("Stone Spirit", 150, Rarity.UNCOMMON, mage.cards.s.StoneSpirit.class)); - cards.add(new SetCardInfo("Stonehands", 151, Rarity.COMMON, mage.cards.s.Stonehands.class)); - cards.add(new SetCardInfo("Storm Spirit", 198, Rarity.RARE, mage.cards.s.StormSpirit.class)); - cards.add(new SetCardInfo("Stromgald Cabal", 113, Rarity.RARE, mage.cards.s.StromgaldCabal.class)); - cards.add(new SetCardInfo("Stunted Growth", 179, Rarity.RARE, mage.cards.s.StuntedGrowth.class)); - cards.add(new SetCardInfo("Sustaining Spirit", 36, Rarity.RARE, mage.cards.s.SustainingSpirit.class)); - cards.add(new SetCardInfo("Svyelunite Temple", 237, Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class)); - cards.add(new SetCardInfo("Swords to Plowshares", 37, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); - cards.add(new SetCardInfo("Taiga", 238, Rarity.RARE, mage.cards.t.Taiga.class)); - cards.add(new SetCardInfo("Temporal Manipulation", 69, Rarity.RARE, mage.cards.t.TemporalManipulation.class)); - cards.add(new SetCardInfo("Thallid Devourer", 181, Rarity.COMMON, mage.cards.t.ThallidDevourer.class)); - cards.add(new SetCardInfo("Thallid", 180, Rarity.COMMON, mage.cards.t.Thallid.class)); - cards.add(new SetCardInfo("Thelonite Druid", 182, Rarity.RARE, mage.cards.t.TheloniteDruid.class)); - cards.add(new SetCardInfo("Thermokarst", 183, Rarity.COMMON, mage.cards.t.Thermokarst.class)); - cards.add(new SetCardInfo("Thought Lash", 70, Rarity.RARE, mage.cards.t.ThoughtLash.class)); - cards.add(new SetCardInfo("Thunder Wall", 71, Rarity.UNCOMMON, mage.cards.t.ThunderWall.class)); - cards.add(new SetCardInfo("Time Bomb", 223, Rarity.RARE, mage.cards.t.TimeBomb.class)); - cards.add(new SetCardInfo("Tinder Wall", 184, Rarity.COMMON, mage.cards.t.TinderWall.class)); - cards.add(new SetCardInfo("Tundra", 239, Rarity.RARE, mage.cards.t.Tundra.class)); - cards.add(new SetCardInfo("Underground Sea", 240, Rarity.RARE, mage.cards.u.UndergroundSea.class)); - cards.add(new SetCardInfo("Varchild's Crusader", 152, Rarity.COMMON, mage.cards.v.VarchildsCrusader.class)); - cards.add(new SetCardInfo("Viscerid Armor", 72, Rarity.COMMON, mage.cards.v.VisceridArmor.class)); - cards.add(new SetCardInfo("Viscerid Drone", 73, Rarity.UNCOMMON, mage.cards.v.VisceridDrone.class)); - cards.add(new SetCardInfo("Wall of Kelp", 74, Rarity.COMMON, mage.cards.w.WallOfKelp.class)); - cards.add(new SetCardInfo("Warning", 38, Rarity.COMMON, mage.cards.w.Warning.class)); - cards.add(new SetCardInfo("Whirling Catapult", 224, Rarity.UNCOMMON, mage.cards.w.WhirlingCatapult.class)); - cards.add(new SetCardInfo("Whiteout", 185, Rarity.COMMON, mage.cards.w.Whiteout.class)); - cards.add(new SetCardInfo("Wiitigo", 186, Rarity.RARE, mage.cards.w.Wiitigo.class)); - cards.add(new SetCardInfo("Wind Spirit", 75, Rarity.UNCOMMON, mage.cards.w.WindSpirit.class)); - cards.add(new SetCardInfo("Wings of Aesthir", 199, Rarity.UNCOMMON, mage.cards.w.WingsOfAesthir.class)); - cards.add(new SetCardInfo("Winter's Night", 200, Rarity.RARE, mage.cards.w.WintersNight.class)); - cards.add(new SetCardInfo("Withering Wisps", 114, Rarity.UNCOMMON, mage.cards.w.WitheringWisps.class)); - cards.add(new SetCardInfo("Wolf Pack", 187, Rarity.RARE, mage.cards.w.WolfPack.class)); - cards.add(new SetCardInfo("Woolly Mammoths", 188, Rarity.COMMON, mage.cards.w.WoollyMammoths.class)); - cards.add(new SetCardInfo("Woolly Spider", 189, Rarity.UNCOMMON, mage.cards.w.WoollySpider.class)); - cards.add(new SetCardInfo("Yavimaya Ancients", 190, Rarity.UNCOMMON, mage.cards.y.YavimayaAncients.class)); - cards.add(new SetCardInfo("Zuran Spellcaster", 76, Rarity.COMMON, mage.cards.z.ZuranSpellcaster.class)); - } -} + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author LevelX2 + */ +public final class MastersEditionII extends ExpansionSet { + + private static final MastersEditionII instance = new MastersEditionII(); + + public static MastersEditionII getInstance() { + return instance; + } + + private MastersEditionII() { + super("Masters Edition II", "ME2", ExpansionSet.buildDate(2008, 9, 22), SetType.MAGIC_ONLINE); + this.hasBasicLands = true; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Abbey Gargoyles", 1, Rarity.UNCOMMON, mage.cards.a.AbbeyGargoyles.class)); + cards.add(new SetCardInfo("Adarkar Sentinel", 201, Rarity.COMMON, mage.cards.a.AdarkarSentinel.class)); + cards.add(new SetCardInfo("Aeolipile", 202, Rarity.COMMON, mage.cards.a.Aeolipile.class)); + cards.add(new SetCardInfo("Aether Storm", 39, Rarity.UNCOMMON, mage.cards.a.AetherStorm.class)); + cards.add(new SetCardInfo("Ambush Party", 115, Rarity.COMMON, mage.cards.a.AmbushParty.class)); + cards.add(new SetCardInfo("An-Zerrin Ruins", 117, Rarity.RARE, mage.cards.a.AnZerrinRuins.class)); + cards.add(new SetCardInfo("Anarchy", 116, Rarity.RARE, mage.cards.a.Anarchy.class)); + cards.add(new SetCardInfo("Angel of Fury", 2, Rarity.RARE, mage.cards.a.AngelOfFury.class)); + cards.add(new SetCardInfo("Angel of Light", 3, Rarity.UNCOMMON, mage.cards.a.AngelOfLight.class)); + cards.add(new SetCardInfo("Armor of Faith", 4, Rarity.COMMON, mage.cards.a.ArmorOfFaith.class)); + cards.add(new SetCardInfo("Armor Thrull", 77, Rarity.COMMON, mage.cards.a.ArmorThrull.class)); + cards.add(new SetCardInfo("Armored Griffin", 5, Rarity.COMMON, mage.cards.a.ArmoredGriffin.class)); + cards.add(new SetCardInfo("Ashen Ghoul", 78, Rarity.UNCOMMON, mage.cards.a.AshenGhoul.class)); + cards.add(new SetCardInfo("Ashnod's Cylix", 203, Rarity.RARE, mage.cards.a.AshnodsCylix.class)); + cards.add(new SetCardInfo("Aurochs", 153, Rarity.COMMON, mage.cards.a.Aurochs.class)); + cards.add(new SetCardInfo("Aysen Bureaucrats", 6, Rarity.COMMON, mage.cards.a.AysenBureaucrats.class)); + cards.add(new SetCardInfo("Aysen Crusader", 7, Rarity.UNCOMMON, mage.cards.a.AysenCrusader.class)); + cards.add(new SetCardInfo("Badlands", 225, Rarity.RARE, mage.cards.b.Badlands.class)); + cards.add(new SetCardInfo("Balduvian Conjurer", 40, Rarity.COMMON, mage.cards.b.BalduvianConjurer.class)); + cards.add(new SetCardInfo("Balduvian Dead", 79, Rarity.UNCOMMON, mage.cards.b.BalduvianDead.class)); + cards.add(new SetCardInfo("Balduvian Hydra", 118, Rarity.RARE, mage.cards.b.BalduvianHydra.class)); + cards.add(new SetCardInfo("Balduvian Trading Post", 226, Rarity.RARE, mage.cards.b.BalduvianTradingPost.class)); + cards.add(new SetCardInfo("Barbed Sextant", 204, Rarity.COMMON, mage.cards.b.BarbedSextant.class)); + cards.add(new SetCardInfo("Binding Grasp", 41, Rarity.RARE, mage.cards.b.BindingGrasp.class)); + cards.add(new SetCardInfo("Bounty of the Hunt", 154, Rarity.RARE, mage.cards.b.BountyOfTheHunt.class)); + cards.add(new SetCardInfo("Brainstorm", 42, Rarity.COMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Brassclaw Orcs", 119, Rarity.COMMON, mage.cards.b.BrassclawOrcs.class)); + cards.add(new SetCardInfo("Brimstone Dragon", 120, Rarity.RARE, mage.cards.b.BrimstoneDragon.class)); + cards.add(new SetCardInfo("Brine Shaman", 80, Rarity.COMMON, mage.cards.b.BrineShaman.class)); + cards.add(new SetCardInfo("Broken Visage", 81, Rarity.UNCOMMON, mage.cards.b.BrokenVisage.class)); + cards.add(new SetCardInfo("Browse", 43, Rarity.UNCOMMON, mage.cards.b.Browse.class)); + cards.add(new SetCardInfo("Burnout", 121, Rarity.UNCOMMON, mage.cards.b.Burnout.class)); + cards.add(new SetCardInfo("Carapace", 155, Rarity.COMMON, mage.cards.c.Carapace.class)); + cards.add(new SetCardInfo("Caribou Range", 8, Rarity.RARE, mage.cards.c.CaribouRange.class)); + cards.add(new SetCardInfo("Cloak of Confusion", 82, Rarity.COMMON, mage.cards.c.CloakOfConfusion.class)); + cards.add(new SetCardInfo("Clockwork Steed", 205, Rarity.UNCOMMON, mage.cards.c.ClockworkSteed.class)); + cards.add(new SetCardInfo("Combat Medic", 9, Rarity.COMMON, mage.cards.c.CombatMedic.class)); + cards.add(new SetCardInfo("Conquer", 122, Rarity.UNCOMMON, mage.cards.c.Conquer.class)); + cards.add(new SetCardInfo("Counterspell", 44, Rarity.UNCOMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Dance of the Dead", 83, Rarity.UNCOMMON, mage.cards.d.DanceOfTheDead.class)); + cards.add(new SetCardInfo("Dark Banishing", 84, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); + cards.add(new SetCardInfo("Death Spark", 123, Rarity.COMMON, mage.cards.d.DeathSpark.class)); + cards.add(new SetCardInfo("Deep Spawn", 45, Rarity.RARE, mage.cards.d.DeepSpawn.class)); + cards.add(new SetCardInfo("Demonic Consultation", 85, Rarity.UNCOMMON, mage.cards.d.DemonicConsultation.class)); + cards.add(new SetCardInfo("Despotic Scepter", 206, Rarity.RARE, mage.cards.d.DespoticScepter.class)); + cards.add(new SetCardInfo("Diabolic Vision", 191, Rarity.UNCOMMON, mage.cards.d.DiabolicVision.class)); + cards.add(new SetCardInfo("Disenchant", 10, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Dreams of the Dead", 46, Rarity.RARE, mage.cards.d.DreamsOfTheDead.class)); + cards.add(new SetCardInfo("Drift of the Dead", 86, Rarity.COMMON, mage.cards.d.DriftOfTheDead.class)); + cards.add(new SetCardInfo("Dry Spell", 87, Rarity.COMMON, mage.cards.d.DrySpell.class)); + cards.add(new SetCardInfo("Dwarven Ruins", 227, Rarity.UNCOMMON, mage.cards.d.DwarvenRuins.class)); + cards.add(new SetCardInfo("Dystopia", 88, Rarity.RARE, mage.cards.d.Dystopia.class)); + cards.add(new SetCardInfo("Earthlink", 192, Rarity.RARE, mage.cards.e.Earthlink.class)); + cards.add(new SetCardInfo("Ebon Praetor", 89, Rarity.RARE, mage.cards.e.EbonPraetor.class)); + cards.add(new SetCardInfo("Ebon Stronghold", 228, Rarity.UNCOMMON, mage.cards.e.EbonStronghold.class)); + cards.add(new SetCardInfo("Elemental Augury", 193, Rarity.RARE, mage.cards.e.ElementalAugury.class)); + cards.add(new SetCardInfo("Elkin Bottle", 207, Rarity.RARE, mage.cards.e.ElkinBottle.class)); + cards.add(new SetCardInfo("Elven Lyre", 208, Rarity.COMMON, mage.cards.e.ElvenLyre.class)); + cards.add(new SetCardInfo("Elvish Farmer", 156, Rarity.RARE, mage.cards.e.ElvishFarmer.class)); + cards.add(new SetCardInfo("Elvish Hunter", 157, Rarity.COMMON, mage.cards.e.ElvishHunter.class)); + cards.add(new SetCardInfo("Elvish Ranger", 158, Rarity.COMMON, mage.cards.e.ElvishRanger.class)); + cards.add(new SetCardInfo("Elvish Spirit Guide", 159, Rarity.UNCOMMON, mage.cards.e.ElvishSpiritGuide.class)); + cards.add(new SetCardInfo("Energy Storm", 11, Rarity.RARE, mage.cards.e.EnergyStorm.class)); + cards.add(new SetCardInfo("Enervate", 47, Rarity.COMMON, mage.cards.e.Enervate.class)); + cards.add(new SetCardInfo("Errand of Duty", 12, Rarity.UNCOMMON, mage.cards.e.ErrandOfDuty.class)); + cards.add(new SetCardInfo("Errantry", 124, Rarity.COMMON, mage.cards.e.Errantry.class)); + cards.add(new SetCardInfo("Essence Filter", 160, Rarity.UNCOMMON, mage.cards.e.EssenceFilter.class)); + cards.add(new SetCardInfo("Essence Flare", 48, Rarity.COMMON, mage.cards.e.EssenceFlare.class)); + cards.add(new SetCardInfo("Farrel's Mantle", 13, Rarity.UNCOMMON, mage.cards.f.FarrelsMantle.class)); + cards.add(new SetCardInfo("Farrel's Zealot", 14, Rarity.UNCOMMON, mage.cards.f.FarrelsZealot.class)); + cards.add(new SetCardInfo("Feral Thallid", 161, Rarity.COMMON, mage.cards.f.FeralThallid.class)); + cards.add(new SetCardInfo("Fire Dragon", 125, Rarity.RARE, mage.cards.f.FireDragon.class)); + cards.add(new SetCardInfo("Flame Spirit", 126, Rarity.UNCOMMON, mage.cards.f.FlameSpirit.class)); + cards.add(new SetCardInfo("Folk of the Pines", 162, Rarity.COMMON, mage.cards.f.FolkOfThePines.class)); + cards.add(new SetCardInfo("Forbidden Lore", 163, Rarity.UNCOMMON, mage.cards.f.ForbiddenLore.class)); + cards.add(new SetCardInfo("Forgotten Lore", 164, Rarity.UNCOMMON, mage.cards.f.ForgottenLore.class)); + cards.add(new SetCardInfo("Foul Familiar", 90, Rarity.COMMON, mage.cards.f.FoulFamiliar.class)); + cards.add(new SetCardInfo("Fumarole", 194, Rarity.UNCOMMON, mage.cards.f.Fumarole.class)); + cards.add(new SetCardInfo("Funeral March", 91, Rarity.COMMON, mage.cards.f.FuneralMarch.class)); + cards.add(new SetCardInfo("Fungal Bloom", 165, Rarity.RARE, mage.cards.f.FungalBloom.class)); + cards.add(new SetCardInfo("Fyndhorn Pollen", 166, Rarity.RARE, mage.cards.f.FyndhornPollen.class)); + cards.add(new SetCardInfo("Gangrenous Zombies", 92, Rarity.COMMON, mage.cards.g.GangrenousZombies.class)); + cards.add(new SetCardInfo("Giant Growth", 167, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Giant Trap Door Spider", 195, Rarity.UNCOMMON, mage.cards.g.GiantTrapDoorSpider.class)); + cards.add(new SetCardInfo("Glacial Chasm", 229, Rarity.RARE, mage.cards.g.GlacialChasm.class)); + cards.add(new SetCardInfo("Glacial Crevasses", 127, Rarity.RARE, mage.cards.g.GlacialCrevasses.class)); + cards.add(new SetCardInfo("Gorilla Shaman", 129, Rarity.UNCOMMON, mage.cards.g.GorillaShaman.class)); + cards.add(new SetCardInfo("Grandmother Sengir", 93, Rarity.RARE, mage.cards.g.GrandmotherSengir.class)); + cards.add(new SetCardInfo("Havenwood Battleground", 230, Rarity.UNCOMMON, mage.cards.h.HavenwoodBattleground.class)); + cards.add(new SetCardInfo("Heart of Yavimaya", 231, Rarity.RARE, mage.cards.h.HeartOfYavimaya.class)); + cards.add(new SetCardInfo("Helm of Obedience", 210, Rarity.RARE, mage.cards.h.HelmOfObedience.class)); + cards.add(new SetCardInfo("Icatian Javelineers", 15, Rarity.COMMON, mage.cards.i.IcatianJavelineers.class)); + cards.add(new SetCardInfo("Icatian Phalanx", 16, Rarity.COMMON, mage.cards.i.IcatianPhalanx.class)); + cards.add(new SetCardInfo("Icatian Scout", 17, Rarity.COMMON, mage.cards.i.IcatianScout.class)); + cards.add(new SetCardInfo("Ice Floe", 232, Rarity.UNCOMMON, mage.cards.i.IceFloe.class)); + cards.add(new SetCardInfo("Iceberg", 49, Rarity.UNCOMMON, mage.cards.i.Iceberg.class)); + cards.add(new SetCardInfo("Icequake", 94, Rarity.COMMON, mage.cards.i.Icequake.class)); + cards.add(new SetCardInfo("Icy Prison", 50, Rarity.COMMON, mage.cards.i.IcyPrison.class)); + cards.add(new SetCardInfo("Ihsan's Shade", 95, Rarity.RARE, mage.cards.i.IhsansShade.class)); + cards.add(new SetCardInfo("Imperial Recruiter", 130, Rarity.RARE, mage.cards.i.ImperialRecruiter.class)); + cards.add(new SetCardInfo("Imperial Seal", 96, Rarity.RARE, mage.cards.i.ImperialSeal.class)); + cards.add(new SetCardInfo("Incinerate", 131, Rarity.COMMON, mage.cards.i.Incinerate.class)); + cards.add(new SetCardInfo("Infernal Darkness", 97, Rarity.RARE, mage.cards.i.InfernalDarkness.class)); + cards.add(new SetCardInfo("Inheritance", 18, Rarity.UNCOMMON, mage.cards.i.Inheritance.class)); + cards.add(new SetCardInfo("Ironclaw Orcs", 132, Rarity.COMMON, mage.cards.i.IronclawOrcs.class)); + cards.add(new SetCardInfo("Ivory Gargoyle", 19, Rarity.RARE, mage.cards.i.IvoryGargoyle.class)); + cards.add(new SetCardInfo("Jester's Mask", 211, Rarity.RARE, mage.cards.j.JestersMask.class)); + cards.add(new SetCardInfo("Jeweled Amulet", 212, Rarity.UNCOMMON, mage.cards.j.JeweledAmulet.class)); + cards.add(new SetCardInfo("Johtull Wurm", 168, Rarity.UNCOMMON, mage.cards.j.JohtullWurm.class)); + cards.add(new SetCardInfo("Joven's Ferrets", 169, Rarity.UNCOMMON, mage.cards.j.JovensFerrets.class)); + cards.add(new SetCardInfo("Juniper Order Advocate", 20, Rarity.UNCOMMON, mage.cards.j.JuniperOrderAdvocate.class)); + cards.add(new SetCardInfo("Karplusan Giant", 133, Rarity.UNCOMMON, mage.cards.k.KarplusanGiant.class)); + cards.add(new SetCardInfo("Kaysa", 170, Rarity.RARE, mage.cards.k.Kaysa.class)); + cards.add(new SetCardInfo("Kjeldoran Dead", 98, Rarity.COMMON, mage.cards.k.KjeldoranDead.class)); + cards.add(new SetCardInfo("Kjeldoran Home Guard", 22, Rarity.UNCOMMON, mage.cards.k.KjeldoranHomeGuard.class)); + cards.add(new SetCardInfo("Kjeldoran Outpost", 233, Rarity.RARE, mage.cards.k.KjeldoranOutpost.class)); + cards.add(new SetCardInfo("Kjeldoran Skycaptain", 23, Rarity.COMMON, mage.cards.k.KjeldoranSkycaptain.class)); + cards.add(new SetCardInfo("Knight of Stromgald", 99, Rarity.UNCOMMON, mage.cards.k.KnightOfStromgald.class)); + cards.add(new SetCardInfo("Krovikan Fetish", 100, Rarity.COMMON, mage.cards.k.KrovikanFetish.class)); + cards.add(new SetCardInfo("Krovikan Horror", 101, Rarity.RARE, mage.cards.k.KrovikanHorror.class)); + cards.add(new SetCardInfo("Krovikan Sorcerer", 51, Rarity.COMMON, mage.cards.k.KrovikanSorcerer.class)); + cards.add(new SetCardInfo("Krovikan Vampire", 102, Rarity.UNCOMMON, mage.cards.k.KrovikanVampire.class)); + cards.add(new SetCardInfo("Lat-Nam's Legacy", 52, Rarity.COMMON, mage.cards.l.LatNamsLegacy.class)); + cards.add(new SetCardInfo("Leaping Lizard", 171, Rarity.COMMON, mage.cards.l.LeapingLizard.class)); + cards.add(new SetCardInfo("Lim-Dul's High Guard", 103, Rarity.UNCOMMON, mage.cards.l.LimDulsHighGuard.class)); + cards.add(new SetCardInfo("Lodestone Bauble", 213, Rarity.RARE, mage.cards.l.LodestoneBauble.class)); + cards.add(new SetCardInfo("Lost Order of Jarkeld", 24, Rarity.RARE, mage.cards.l.LostOrderOfJarkeld.class)); + cards.add(new SetCardInfo("Magus of the Unseen", 53, Rarity.RARE, mage.cards.m.MagusOfTheUnseen.class)); + cards.add(new SetCardInfo("Mana Crypt", 214, Rarity.RARE, mage.cards.m.ManaCrypt.class)); + cards.add(new SetCardInfo("Marjhan", 54, Rarity.RARE, mage.cards.m.Marjhan.class)); + cards.add(new SetCardInfo("Mesmeric Trance", 55, Rarity.RARE, mage.cards.m.MesmericTrance.class)); + cards.add(new SetCardInfo("Meteor Shower", 135, Rarity.COMMON, mage.cards.m.MeteorShower.class)); + cards.add(new SetCardInfo("Minion of Leshrac", 104, Rarity.RARE, mage.cards.m.MinionOfLeshrac.class)); + cards.add(new SetCardInfo("Mishra's Groundbreaker", 215, Rarity.UNCOMMON, mage.cards.m.MishrasGroundbreaker.class)); + cards.add(new SetCardInfo("Misinformation", 105, Rarity.UNCOMMON, mage.cards.m.Misinformation.class)); + cards.add(new SetCardInfo("Mudslide", 136, Rarity.RARE, mage.cards.m.Mudslide.class)); + cards.add(new SetCardInfo("Musician", 56, Rarity.RARE, mage.cards.m.Musician.class)); + cards.add(new SetCardInfo("Narwhal", 57, Rarity.UNCOMMON, mage.cards.n.Narwhal.class)); + cards.add(new SetCardInfo("Nature's Blessing", 196, Rarity.UNCOMMON, mage.cards.n.NaturesBlessing.class)); + cards.add(new SetCardInfo("Nature's Wrath", 172, Rarity.RARE, mage.cards.n.NaturesWrath.class)); + cards.add(new SetCardInfo("Necrite", 106, Rarity.COMMON, mage.cards.n.Necrite.class)); + cards.add(new SetCardInfo("Necropotence", 107, Rarity.RARE, mage.cards.n.Necropotence.class)); + cards.add(new SetCardInfo("Night Soil", 173, Rarity.UNCOMMON, mage.cards.n.NightSoil.class)); + cards.add(new SetCardInfo("Orc General", 137, Rarity.UNCOMMON, mage.cards.o.OrcGeneral.class)); + cards.add(new SetCardInfo("Orcish Cannoneers", 138, Rarity.UNCOMMON, mage.cards.o.OrcishCannoneers.class)); + cards.add(new SetCardInfo("Orcish Captain", 139, Rarity.UNCOMMON, mage.cards.o.OrcishCaptain.class)); + cards.add(new SetCardInfo("Orcish Lumberjack", 142, Rarity.COMMON, mage.cards.o.OrcishLumberjack.class)); + cards.add(new SetCardInfo("Orcish Squatters", 143, Rarity.RARE, mage.cards.o.OrcishSquatters.class)); + cards.add(new SetCardInfo("Orcish Veteran", 144, Rarity.COMMON, mage.cards.o.OrcishVeteran.class)); + cards.add(new SetCardInfo("Order of the Sacred Torch", 25, Rarity.RARE, mage.cards.o.OrderOfTheSacredTorch.class)); + cards.add(new SetCardInfo("Order of the White Shield", 26, Rarity.UNCOMMON, mage.cards.o.OrderOfTheWhiteShield.class)); + cards.add(new SetCardInfo("Panic", 145, Rarity.COMMON, mage.cards.p.Panic.class)); + cards.add(new SetCardInfo("Personal Tutor", 58, Rarity.UNCOMMON, mage.cards.p.PersonalTutor.class)); + cards.add(new SetCardInfo("Phantasmal Fiend", 108, Rarity.COMMON, mage.cards.p.PhantasmalFiend.class)); + cards.add(new SetCardInfo("Phantasmal Mount", 59, Rarity.COMMON, mage.cards.p.PhantasmalMount.class)); + cards.add(new SetCardInfo("Phyrexian Devourer", 216, Rarity.UNCOMMON, mage.cards.p.PhyrexianDevourer.class)); + cards.add(new SetCardInfo("Pillage", 146, Rarity.UNCOMMON, mage.cards.p.Pillage.class)); + cards.add(new SetCardInfo("Portent", 60, Rarity.COMMON, mage.cards.p.Portent.class)); + cards.add(new SetCardInfo("Pyrokinesis", 147, Rarity.RARE, mage.cards.p.Pyrokinesis.class)); + cards.add(new SetCardInfo("Ravages of War", 27, Rarity.RARE, mage.cards.r.RavagesOfWar.class)); + cards.add(new SetCardInfo("Ray of Command", 61, Rarity.UNCOMMON, mage.cards.r.RayOfCommand.class)); + cards.add(new SetCardInfo("Red Cliffs Armada", 62, Rarity.COMMON, mage.cards.r.RedCliffsArmada.class)); + cards.add(new SetCardInfo("Reinforcements", 28, Rarity.COMMON, mage.cards.r.Reinforcements.class)); + cards.add(new SetCardInfo("Reprisal", 29, Rarity.COMMON, mage.cards.r.Reprisal.class)); + cards.add(new SetCardInfo("Retribution", 148, Rarity.UNCOMMON, mage.cards.r.Retribution.class)); + cards.add(new SetCardInfo("Righteous Fury", 30, Rarity.RARE, mage.cards.r.RighteousFury.class)); + cards.add(new SetCardInfo("Ritual of Subdual", 174, Rarity.RARE, mage.cards.r.RitualOfSubdual.class)); + cards.add(new SetCardInfo("Ritual of the Machine", 109, Rarity.RARE, mage.cards.r.RitualOfTheMachine.class)); + cards.add(new SetCardInfo("Roterothopter", 218, Rarity.COMMON, mage.cards.r.Roterothopter.class)); + cards.add(new SetCardInfo("Rogue Skycaptain", 149, Rarity.RARE, mage.cards.r.RogueSkycaptain.class)); + cards.add(new SetCardInfo("Royal Decree", 31, Rarity.RARE, mage.cards.r.RoyalDecree.class)); + cards.add(new SetCardInfo("Royal Trooper", 32, Rarity.COMMON, mage.cards.r.RoyalTrooper.class)); + cards.add(new SetCardInfo("Ruins of Trokair", 234, Rarity.UNCOMMON, mage.cards.r.RuinsOfTrokair.class)); + cards.add(new SetCardInfo("Savannah", 235, Rarity.RARE, mage.cards.s.Savannah.class)); + cards.add(new SetCardInfo("Screeching Drake", 63, Rarity.COMMON, mage.cards.s.ScreechingDrake.class)); + cards.add(new SetCardInfo("Sea Drake", 64, Rarity.RARE, mage.cards.s.SeaDrake.class)); + cards.add(new SetCardInfo("Sea Spirit", 65, Rarity.UNCOMMON, mage.cards.s.SeaSpirit.class)); + cards.add(new SetCardInfo("Shield Bearer", 35, Rarity.COMMON, mage.cards.s.ShieldBearer.class)); + cards.add(new SetCardInfo("Shrink", 175, Rarity.COMMON, mage.cards.s.Shrink.class)); + cards.add(new SetCardInfo("Shyft", 66, Rarity.COMMON, mage.cards.s.Shyft.class)); + cards.add(new SetCardInfo("Sibilant Spirit", 67, Rarity.RARE, mage.cards.s.SibilantSpirit.class)); + cards.add(new SetCardInfo("Skeleton Ship", 197, Rarity.RARE, mage.cards.s.SkeletonShip.class)); + cards.add(new SetCardInfo("Skull Catapult", 219, Rarity.UNCOMMON, mage.cards.s.SkullCatapult.class)); + cards.add(new SetCardInfo("Snow Fortress", 220, Rarity.UNCOMMON, mage.cards.s.SnowFortress.class)); + cards.add(new SetCardInfo("Snow-Covered Forest", 245, Rarity.LAND, mage.cards.s.SnowCoveredForest.class)); + cards.add(new SetCardInfo("Snow-Covered Island", 242, Rarity.LAND, mage.cards.s.SnowCoveredIsland.class)); + cards.add(new SetCardInfo("Snow-Covered Mountain", 244, Rarity.LAND, mage.cards.s.SnowCoveredMountain.class)); + cards.add(new SetCardInfo("Snow-Covered Plains", 241, Rarity.LAND, mage.cards.s.SnowCoveredPlains.class)); + cards.add(new SetCardInfo("Snow-Covered Swamp", 243, Rarity.LAND, mage.cards.s.SnowCoveredSwamp.class)); + cards.add(new SetCardInfo("Soldevi Digger", 221, Rarity.UNCOMMON, mage.cards.s.SoldeviDigger.class)); + cards.add(new SetCardInfo("Soldevi Excavations", 236, Rarity.RARE, mage.cards.s.SoldeviExcavations.class)); + cards.add(new SetCardInfo("Soldevi Simulacrum", 222, Rarity.UNCOMMON, mage.cards.s.SoldeviSimulacrum.class)); + cards.add(new SetCardInfo("Songs of the Damned", 110, Rarity.COMMON, mage.cards.s.SongsOfTheDamned.class)); + cards.add(new SetCardInfo("Soul Exchange", 111, Rarity.UNCOMMON, mage.cards.s.SoulExchange.class)); + cards.add(new SetCardInfo("Soul Kiss", 112, Rarity.UNCOMMON, mage.cards.s.SoulKiss.class)); + cards.add(new SetCardInfo("Spore Cloud", 176, Rarity.UNCOMMON, mage.cards.s.SporeCloud.class)); + cards.add(new SetCardInfo("Spore Flower", 177, Rarity.UNCOMMON, mage.cards.s.SporeFlower.class)); + cards.add(new SetCardInfo("Stampede", 178, Rarity.UNCOMMON, mage.cards.s.Stampede.class)); + cards.add(new SetCardInfo("Stone Spirit", 150, Rarity.UNCOMMON, mage.cards.s.StoneSpirit.class)); + cards.add(new SetCardInfo("Stonehands", 151, Rarity.COMMON, mage.cards.s.Stonehands.class)); + cards.add(new SetCardInfo("Storm Spirit", 198, Rarity.RARE, mage.cards.s.StormSpirit.class)); + cards.add(new SetCardInfo("Stromgald Cabal", 113, Rarity.RARE, mage.cards.s.StromgaldCabal.class)); + cards.add(new SetCardInfo("Stunted Growth", 179, Rarity.RARE, mage.cards.s.StuntedGrowth.class)); + cards.add(new SetCardInfo("Sustaining Spirit", 36, Rarity.RARE, mage.cards.s.SustainingSpirit.class)); + cards.add(new SetCardInfo("Svyelunite Temple", 237, Rarity.UNCOMMON, mage.cards.s.SvyeluniteTemple.class)); + cards.add(new SetCardInfo("Swords to Plowshares", 37, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Taiga", 238, Rarity.RARE, mage.cards.t.Taiga.class)); + cards.add(new SetCardInfo("Temporal Manipulation", 69, Rarity.RARE, mage.cards.t.TemporalManipulation.class)); + cards.add(new SetCardInfo("Thallid Devourer", 181, Rarity.COMMON, mage.cards.t.ThallidDevourer.class)); + cards.add(new SetCardInfo("Thallid", 180, Rarity.COMMON, mage.cards.t.Thallid.class)); + cards.add(new SetCardInfo("Thelonite Druid", 182, Rarity.RARE, mage.cards.t.TheloniteDruid.class)); + cards.add(new SetCardInfo("Thermokarst", 183, Rarity.COMMON, mage.cards.t.Thermokarst.class)); + cards.add(new SetCardInfo("Thought Lash", 70, Rarity.RARE, mage.cards.t.ThoughtLash.class)); + cards.add(new SetCardInfo("Thunder Wall", 71, Rarity.UNCOMMON, mage.cards.t.ThunderWall.class)); + cards.add(new SetCardInfo("Time Bomb", 223, Rarity.RARE, mage.cards.t.TimeBomb.class)); + cards.add(new SetCardInfo("Tinder Wall", 184, Rarity.COMMON, mage.cards.t.TinderWall.class)); + cards.add(new SetCardInfo("Tundra", 239, Rarity.RARE, mage.cards.t.Tundra.class)); + cards.add(new SetCardInfo("Underground Sea", 240, Rarity.RARE, mage.cards.u.UndergroundSea.class)); + cards.add(new SetCardInfo("Varchild's Crusader", 152, Rarity.COMMON, mage.cards.v.VarchildsCrusader.class)); + cards.add(new SetCardInfo("Viscerid Armor", 72, Rarity.COMMON, mage.cards.v.VisceridArmor.class)); + cards.add(new SetCardInfo("Viscerid Drone", 73, Rarity.UNCOMMON, mage.cards.v.VisceridDrone.class)); + cards.add(new SetCardInfo("Wall of Kelp", 74, Rarity.COMMON, mage.cards.w.WallOfKelp.class)); + cards.add(new SetCardInfo("Warning", 38, Rarity.COMMON, mage.cards.w.Warning.class)); + cards.add(new SetCardInfo("Whirling Catapult", 224, Rarity.UNCOMMON, mage.cards.w.WhirlingCatapult.class)); + cards.add(new SetCardInfo("Whiteout", 185, Rarity.COMMON, mage.cards.w.Whiteout.class)); + cards.add(new SetCardInfo("Wiitigo", 186, Rarity.RARE, mage.cards.w.Wiitigo.class)); + cards.add(new SetCardInfo("Wind Spirit", 75, Rarity.UNCOMMON, mage.cards.w.WindSpirit.class)); + cards.add(new SetCardInfo("Wings of Aesthir", 199, Rarity.UNCOMMON, mage.cards.w.WingsOfAesthir.class)); + cards.add(new SetCardInfo("Winter's Night", 200, Rarity.RARE, mage.cards.w.WintersNight.class)); + cards.add(new SetCardInfo("Withering Wisps", 114, Rarity.UNCOMMON, mage.cards.w.WitheringWisps.class)); + cards.add(new SetCardInfo("Wolf Pack", 187, Rarity.RARE, mage.cards.w.WolfPack.class)); + cards.add(new SetCardInfo("Woolly Mammoths", 188, Rarity.COMMON, mage.cards.w.WoollyMammoths.class)); + cards.add(new SetCardInfo("Woolly Spider", 189, Rarity.UNCOMMON, mage.cards.w.WoollySpider.class)); + cards.add(new SetCardInfo("Yavimaya Ancients", 190, Rarity.UNCOMMON, mage.cards.y.YavimayaAncients.class)); + cards.add(new SetCardInfo("Zuran Spellcaster", 76, Rarity.COMMON, mage.cards.z.ZuranSpellcaster.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/MastersEditionIII.java b/Mage.Sets/src/mage/sets/MastersEditionIII.java index f3ebcd7cd77..45f3a9e9708 100644 --- a/Mage.Sets/src/mage/sets/MastersEditionIII.java +++ b/Mage.Sets/src/mage/sets/MastersEditionIII.java @@ -1,252 +1,252 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author LevelX2 - */ -public final class MastersEditionIII extends ExpansionSet { - - private static final MastersEditionIII instance = new MastersEditionIII(); - - public static MastersEditionIII getInstance() { - return instance; - } - - private MastersEditionIII() { - super("Masters Edition III", "ME3", ExpansionSet.buildDate(2009, 9, 7), SetType.MAGIC_ONLINE); - this.hasBasicLands = true; - this.hasBoosters = true; - this.numBoosterLands = 1; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Active Volcano", 85, Rarity.UNCOMMON, mage.cards.a.ActiveVolcano.class)); - cards.add(new SetCardInfo("Akron Legionnaire", 1, Rarity.RARE, mage.cards.a.AkronLegionnaire.class)); - cards.add(new SetCardInfo("Alabaster Potion", 2, Rarity.UNCOMMON, mage.cards.a.AlabasterPotion.class)); - cards.add(new SetCardInfo("All Hallow's Eve", 57, Rarity.RARE, mage.cards.a.AllHallowsEve.class)); - cards.add(new SetCardInfo("Amrou Kithkin", 3, Rarity.COMMON, mage.cards.a.AmrouKithkin.class)); - cards.add(new SetCardInfo("Anaba Ancestor", 86, Rarity.COMMON, mage.cards.a.AnabaAncestor.class)); - cards.add(new SetCardInfo("Anaba Spirit Crafter", 87, Rarity.COMMON, mage.cards.a.AnabaSpiritCrafter.class)); - cards.add(new SetCardInfo("Angus Mackenzie", 141, Rarity.RARE, mage.cards.a.AngusMackenzie.class)); - cards.add(new SetCardInfo("Arboria", 113, Rarity.RARE, mage.cards.a.Arboria.class)); - cards.add(new SetCardInfo("Arcades Sabboth", 142, Rarity.RARE, mage.cards.a.ArcadesSabboth.class)); - cards.add(new SetCardInfo("Arena of the Ancients", 188, Rarity.RARE, mage.cards.a.ArenaOfTheAncients.class)); - cards.add(new SetCardInfo("Ashes to Ashes", 58, Rarity.UNCOMMON, mage.cards.a.AshesToAshes.class)); - cards.add(new SetCardInfo("Astrolabe", 189, Rarity.COMMON, mage.cards.a.Astrolabe.class)); - cards.add(new SetCardInfo("Axelrod Gunnarson", 143, Rarity.UNCOMMON, mage.cards.a.AxelrodGunnarson.class)); - cards.add(new SetCardInfo("Banshee", 59, Rarity.UNCOMMON, mage.cards.b.Banshee.class)); - cards.add(new SetCardInfo("Barktooth Warbeard", 144, Rarity.COMMON, mage.cards.b.BarktoothWarbeard.class)); - cards.add(new SetCardInfo("Barl's Cage", 190, Rarity.RARE, mage.cards.b.BarlsCage.class)); - cards.add(new SetCardInfo("Bartel Runeaxe", 145, Rarity.UNCOMMON, mage.cards.b.BartelRuneaxe.class)); - cards.add(new SetCardInfo("Bayou", 204, Rarity.RARE, mage.cards.b.Bayou.class)); - cards.add(new SetCardInfo("Bazaar of Baghdad", 205, Rarity.RARE, mage.cards.b.BazaarOfBaghdad.class)); - cards.add(new SetCardInfo("Black Vise", 191, Rarity.RARE, mage.cards.b.BlackVise.class)); - cards.add(new SetCardInfo("Blood Lust", 88, Rarity.COMMON, mage.cards.b.BloodLust.class)); - cards.add(new SetCardInfo("Bone Flute", 192, Rarity.COMMON, mage.cards.b.BoneFlute.class)); - cards.add(new SetCardInfo("Boomerang", 30, Rarity.COMMON, mage.cards.b.Boomerang.class)); - cards.add(new SetCardInfo("Boris Devilboon", 146, Rarity.UNCOMMON, mage.cards.b.BorisDevilboon.class)); - cards.add(new SetCardInfo("Borrowing 100,000 Arrows", 31, Rarity.UNCOMMON, mage.cards.b.Borrowing100000Arrows.class)); - cards.add(new SetCardInfo("Brilliant Plan", 32, Rarity.COMMON, mage.cards.b.BrilliantPlan.class)); - cards.add(new SetCardInfo("Burning of Xinye", 89, Rarity.RARE, mage.cards.b.BurningOfXinye.class)); - cards.add(new SetCardInfo("Call to Arms", 4, Rarity.UNCOMMON, mage.cards.c.CallToArms.class)); - cards.add(new SetCardInfo("Capture of Jingzhou", 33, Rarity.RARE, mage.cards.c.CaptureOfJingzhou.class)); - cards.add(new SetCardInfo("Carrion Ants", 60, Rarity.UNCOMMON, mage.cards.c.CarrionAnts.class)); - cards.add(new SetCardInfo("Chain Lightning", 90, Rarity.COMMON, mage.cards.c.ChainLightning.class)); - cards.add(new SetCardInfo("Chromium", 147, Rarity.RARE, mage.cards.c.Chromium.class)); - cards.add(new SetCardInfo("Cinder Storm", 91, Rarity.UNCOMMON, mage.cards.c.CinderStorm.class)); - cards.add(new SetCardInfo("City of Shadows", 206, Rarity.RARE, mage.cards.c.CityOfShadows.class)); - cards.add(new SetCardInfo("Cleanse", 5, Rarity.RARE, mage.cards.c.Cleanse.class)); - cards.add(new SetCardInfo("Coal Golem", 193, Rarity.COMMON, mage.cards.c.CoalGolem.class)); - cards.add(new SetCardInfo("Concordant Crossroads", 114, Rarity.RARE, mage.cards.c.ConcordantCrossroads.class)); - cards.add(new SetCardInfo("Corrupt Eunuchs", 92, Rarity.UNCOMMON, mage.cards.c.CorruptEunuchs.class)); - cards.add(new SetCardInfo("Cosmic Horror", 61, Rarity.RARE, mage.cards.c.CosmicHorror.class)); - cards.add(new SetCardInfo("Crimson Kobolds", 93, Rarity.COMMON, mage.cards.c.CrimsonKobolds.class)); - cards.add(new SetCardInfo("Crimson Manticore", 94, Rarity.UNCOMMON, mage.cards.c.CrimsonManticore.class)); - cards.add(new SetCardInfo("Dance of Many", 34, Rarity.UNCOMMON, mage.cards.d.DanceOfMany.class)); - cards.add(new SetCardInfo("D'Avenant Archer", 6, Rarity.COMMON, mage.cards.d.DAvenantArcher.class)); - cards.add(new SetCardInfo("Demonic Torment", 62, Rarity.COMMON, mage.cards.d.DemonicTorment.class)); - cards.add(new SetCardInfo("Desert Twister", 115, Rarity.UNCOMMON, mage.cards.d.DesertTwister.class)); - cards.add(new SetCardInfo("Desperate Charge", 63, Rarity.COMMON, mage.cards.d.DesperateCharge.class)); - cards.add(new SetCardInfo("Didgeridoo", 194, Rarity.UNCOMMON, mage.cards.d.Didgeridoo.class)); - cards.add(new SetCardInfo("Disenchant", 7, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Disharmony", 95, Rarity.UNCOMMON, mage.cards.d.Disharmony.class)); - cards.add(new SetCardInfo("Divine Intervention", 8, Rarity.RARE, mage.cards.d.DivineIntervention.class)); - cards.add(new SetCardInfo("Dong Zhou, the Tyrant", 96, Rarity.RARE, mage.cards.d.DongZhouTheTyrant.class)); - cards.add(new SetCardInfo("Eightfold Maze", 9, Rarity.UNCOMMON, mage.cards.e.EightfoldMaze.class)); - cards.add(new SetCardInfo("Elves of Deep Shadow", 116, Rarity.COMMON, mage.cards.e.ElvesOfDeepShadow.class)); - cards.add(new SetCardInfo("Evil Presence", 64, Rarity.COMMON, mage.cards.e.EvilPresence.class)); - cards.add(new SetCardInfo("Exorcist", 10, Rarity.UNCOMMON, mage.cards.e.Exorcist.class)); - cards.add(new SetCardInfo("Faerie Noble", 117, Rarity.UNCOMMON, mage.cards.f.FaerieNoble.class)); - cards.add(new SetCardInfo("False Defeat", 11, Rarity.UNCOMMON, mage.cards.f.FalseDefeat.class)); - cards.add(new SetCardInfo("Famine", 65, Rarity.UNCOMMON, mage.cards.f.Famine.class)); - cards.add(new SetCardInfo("Fellwar Stone", 195, Rarity.COMMON, mage.cards.f.FellwarStone.class)); - cards.add(new SetCardInfo("Fevered Strength", 66, Rarity.COMMON, mage.cards.f.FeveredStrength.class)); - cards.add(new SetCardInfo("Fire Ambush", 97, Rarity.COMMON, mage.cards.f.FireAmbush.class)); - cards.add(new SetCardInfo("Fire Drake", 98, Rarity.COMMON, mage.cards.f.FireDrake.class)); - cards.add(new SetCardInfo("Fire Sprites", 118, Rarity.COMMON, mage.cards.f.FireSprites.class)); - cards.add(new SetCardInfo("Flash Flood", 35, Rarity.UNCOMMON, mage.cards.f.FlashFlood.class)); - cards.add(new SetCardInfo("Forced Retreat", 37, Rarity.COMMON, mage.cards.f.ForcedRetreat.class)); - cards.add(new SetCardInfo("Force Spike", 36, Rarity.COMMON, mage.cards.f.ForceSpike.class)); - cards.add(new SetCardInfo("Forest", 228, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 229, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 230, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forked Lightning", 100, Rarity.UNCOMMON, mage.cards.f.ForkedLightning.class)); - cards.add(new SetCardInfo("Freyalise's Winds", 119, Rarity.RARE, mage.cards.f.FreyalisesWinds.class)); - cards.add(new SetCardInfo("Frost Giant", 101, Rarity.UNCOMMON, mage.cards.f.FrostGiant.class)); - cards.add(new SetCardInfo("Gabriel Angelfire", 148, Rarity.RARE, mage.cards.g.GabrielAngelfire.class)); - cards.add(new SetCardInfo("Gaea's Touch", 120, Rarity.UNCOMMON, mage.cards.g.GaeasTouch.class)); - cards.add(new SetCardInfo("Gauntlets of Chaos", 196, Rarity.RARE, mage.cards.g.GauntletsOfChaos.class)); - cards.add(new SetCardInfo("Ghostly Visit", 67, Rarity.COMMON, mage.cards.g.GhostlyVisit.class)); - cards.add(new SetCardInfo("Ghosts of the Damned", 68, Rarity.COMMON, mage.cards.g.GhostsOfTheDamned.class)); - cards.add(new SetCardInfo("Giant Growth", 121, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); - cards.add(new SetCardInfo("Grim Tutor", 69, Rarity.RARE, mage.cards.g.GrimTutor.class)); - cards.add(new SetCardInfo("Guan Yu's 1,000-Li March", 13, Rarity.RARE, mage.cards.g.GuanYus1000LiMarch.class)); - cards.add(new SetCardInfo("Guan Yu, Sainted Warrior", 12, Rarity.UNCOMMON, mage.cards.g.GuanYuSaintedWarrior.class)); - cards.add(new SetCardInfo("Gwendlyn Di Corci", 149, Rarity.RARE, mage.cards.g.GwendlynDiCorci.class)); - cards.add(new SetCardInfo("Halfdane", 150, Rarity.RARE, mage.cards.h.Halfdane.class)); - cards.add(new SetCardInfo("Hammerheim", 207, Rarity.UNCOMMON, mage.cards.h.Hammerheim.class)); - cards.add(new SetCardInfo("Hazezon Tamar", 151, Rarity.RARE, mage.cards.h.HazezonTamar.class)); - cards.add(new SetCardInfo("Heal", 14, Rarity.COMMON, mage.cards.h.Heal.class)); - cards.add(new SetCardInfo("Heavy Fog", 122, Rarity.COMMON, mage.cards.h.HeavyFog.class)); - cards.add(new SetCardInfo("Hellfire", 70, Rarity.RARE, mage.cards.h.Hellfire.class)); - cards.add(new SetCardInfo("Hua Tuo, Honored Physician", 123, Rarity.RARE, mage.cards.h.HuaTuoHonoredPhysician.class)); - cards.add(new SetCardInfo("Hunding Gjornersen", 152, Rarity.UNCOMMON, mage.cards.h.HundingGjornersen.class)); - cards.add(new SetCardInfo("Hunting Cheetah", 124, Rarity.COMMON, mage.cards.h.HuntingCheetah.class)); - cards.add(new SetCardInfo("Hurloon Minotaur", 102, Rarity.COMMON, mage.cards.h.HurloonMinotaur.class)); - cards.add(new SetCardInfo("Immolation", 103, Rarity.COMMON, mage.cards.i.Immolation.class)); - cards.add(new SetCardInfo("Infuse", 38, Rarity.COMMON, mage.cards.i.Infuse.class)); - cards.add(new SetCardInfo("Island", 219, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 220, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 221, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ivory Guardians", 15, Rarity.UNCOMMON, mage.cards.i.IvoryGuardians.class)); - cards.add(new SetCardInfo("Jedit Ojanen", 153, Rarity.COMMON, mage.cards.j.JeditOjanen.class)); - cards.add(new SetCardInfo("Jerrard of the Closed Fist", 154, Rarity.COMMON, mage.cards.j.JerrardOfTheClosedFist.class)); - cards.add(new SetCardInfo("Jungle Lion", 125, Rarity.COMMON, mage.cards.j.JungleLion.class)); - cards.add(new SetCardInfo("Karakas", 208, Rarity.RARE, mage.cards.k.Karakas.class)); - cards.add(new SetCardInfo("Kei Takahashi", 155, Rarity.UNCOMMON, mage.cards.k.KeiTakahashi.class)); - cards.add(new SetCardInfo("Killer Bees", 126, Rarity.UNCOMMON, mage.cards.k.KillerBees.class)); - cards.add(new SetCardInfo("Kjeldoran Frostbeast", 156, Rarity.UNCOMMON, mage.cards.k.KjeldoranFrostbeast.class)); - cards.add(new SetCardInfo("Kobold Drill Sergeant", 104, Rarity.UNCOMMON, mage.cards.k.KoboldDrillSergeant.class)); - cards.add(new SetCardInfo("Kobold Overlord", 105, Rarity.UNCOMMON, mage.cards.k.KoboldOverlord.class)); - cards.add(new SetCardInfo("Kobolds of Kher Keep", 107, Rarity.COMMON, mage.cards.k.KoboldsOfKherKeep.class)); - cards.add(new SetCardInfo("Kobold Taskmaster", 106, Rarity.COMMON, mage.cards.k.KoboldTaskmaster.class)); - cards.add(new SetCardInfo("Kongming, 'Sleeping Dragon'", 16, Rarity.RARE, mage.cards.k.KongmingSleepingDragon.class)); - cards.add(new SetCardInfo("Labyrinth Minotaur", 39, Rarity.COMMON, mage.cards.l.LabyrinthMinotaur.class)); - cards.add(new SetCardInfo("Lady Caleria", 157, Rarity.UNCOMMON, mage.cards.l.LadyCaleria.class)); - cards.add(new SetCardInfo("Lady Evangela", 158, Rarity.UNCOMMON, mage.cards.l.LadyEvangela.class)); - cards.add(new SetCardInfo("Lady Orca", 159, Rarity.COMMON, mage.cards.l.LadyOrca.class)); - cards.add(new SetCardInfo("Land Equilibrium", 40, Rarity.RARE, mage.cards.l.LandEquilibrium.class)); - cards.add(new SetCardInfo("Land Tax", 17, Rarity.RARE, mage.cards.l.LandTax.class)); - cards.add(new SetCardInfo("Life Chisel", 199, Rarity.RARE, mage.cards.l.LifeChisel.class)); - cards.add(new SetCardInfo("Lightning Blow", 18, Rarity.COMMON, mage.cards.l.LightningBlow.class)); - cards.add(new SetCardInfo("Liu Bei, Lord of Shu", 19, Rarity.RARE, mage.cards.l.LiuBeiLordOfShu.class)); - cards.add(new SetCardInfo("Living Plane", 127, Rarity.RARE, mage.cards.l.LivingPlane.class)); - cards.add(new SetCardInfo("Livonya Silone", 160, Rarity.UNCOMMON, mage.cards.l.LivonyaSilone.class)); - cards.add(new SetCardInfo("Loyal Retainers", 20, Rarity.UNCOMMON, mage.cards.l.LoyalRetainers.class)); - cards.add(new SetCardInfo("Lu Bu, Master-at-Arms", 108, Rarity.RARE, mage.cards.l.LuBuMasterAtArms.class)); - cards.add(new SetCardInfo("Lu Meng, Wu General", 41, Rarity.UNCOMMON, mage.cards.l.LuMengWuGeneral.class)); - cards.add(new SetCardInfo("Lu Xun, Scholar General", 42, Rarity.UNCOMMON, mage.cards.l.LuXunScholarGeneral.class)); - cards.add(new SetCardInfo("Mana Drain", 43, Rarity.RARE, mage.cards.m.ManaDrain.class)); - cards.add(new SetCardInfo("Mana Vortex", 44, Rarity.RARE, mage.cards.m.ManaVortex.class)); - cards.add(new SetCardInfo("Marhault Elsdragon", 161, Rarity.UNCOMMON, mage.cards.m.MarhaultElsdragon.class)); - cards.add(new SetCardInfo("Meng Huo, Barbarian King", 128, Rarity.RARE, mage.cards.m.MengHuoBarbarianKing.class)); - cards.add(new SetCardInfo("Meng Huo's Horde", 129, Rarity.COMMON, mage.cards.m.MengHuosHorde.class)); - cards.add(new SetCardInfo("Mind Twist", 72, Rarity.RARE, mage.cards.m.MindTwist.class)); - cards.add(new SetCardInfo("Misfortune's Gain", 21, Rarity.COMMON, mage.cards.m.MisfortunesGain.class)); - cards.add(new SetCardInfo("Mountain", 225, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 226, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 227, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Nebuchadnezzar", 162, Rarity.UNCOMMON, mage.cards.n.Nebuchadnezzar.class)); - cards.add(new SetCardInfo("Nether Void", 73, Rarity.RARE, mage.cards.n.NetherVoid.class)); - cards.add(new SetCardInfo("Nicol Bolas", 163, Rarity.RARE, mage.cards.n.NicolBolas.class)); - cards.add(new SetCardInfo("Nova Pentacle", 200, Rarity.RARE, mage.cards.n.NovaPentacle.class)); - cards.add(new SetCardInfo("Old Man of the Sea", 45, Rarity.RARE, mage.cards.o.OldManOfTheSea.class)); - cards.add(new SetCardInfo("Palladia-Mors", 164, Rarity.RARE, mage.cards.p.PalladiaMors.class)); - cards.add(new SetCardInfo("Pavel Maliki", 165, Rarity.UNCOMMON, mage.cards.p.PavelMaliki.class)); - cards.add(new SetCardInfo("Peach Garden Oath", 22, Rarity.COMMON, mage.cards.p.PeachGardenOath.class)); - cards.add(new SetCardInfo("Plains", 216, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 217, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 218, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plateau", 209, Rarity.RARE, mage.cards.p.Plateau.class)); - cards.add(new SetCardInfo("Princess Lucrezia", 166, Rarity.UNCOMMON, mage.cards.p.PrincessLucrezia.class)); - cards.add(new SetCardInfo("Raging Minotaur", 109, Rarity.COMMON, mage.cards.r.RagingMinotaur.class)); - cards.add(new SetCardInfo("Ragnar", 167, Rarity.UNCOMMON, mage.cards.r.Ragnar.class)); - cards.add(new SetCardInfo("Ramirez DePietro", 168, Rarity.COMMON, mage.cards.r.RamirezDePietro.class)); - cards.add(new SetCardInfo("Ramses Overdark", 169, Rarity.UNCOMMON, mage.cards.r.RamsesOverdark.class)); - cards.add(new SetCardInfo("Rasputin Dreamweaver", 170, Rarity.RARE, mage.cards.r.RasputinDreamweaver.class)); - cards.add(new SetCardInfo("Recall", 46, Rarity.UNCOMMON, mage.cards.r.Recall.class)); - cards.add(new SetCardInfo("Reincarnation", 130, Rarity.UNCOMMON, mage.cards.r.Reincarnation.class)); - cards.add(new SetCardInfo("Remove Soul", 47, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); - cards.add(new SetCardInfo("Reset", 48, Rarity.RARE, mage.cards.r.Reset.class)); - cards.add(new SetCardInfo("Reveka, Wizard Savant", 49, Rarity.UNCOMMON, mage.cards.r.RevekaWizardSavant.class)); - cards.add(new SetCardInfo("Riding the Dilu Horse", 131, Rarity.UNCOMMON, mage.cards.r.RidingTheDiluHorse.class)); - cards.add(new SetCardInfo("Riven Turnbull", 171, Rarity.UNCOMMON, mage.cards.r.RivenTurnbull.class)); - cards.add(new SetCardInfo("Rohgahh of Kher Keep", 172, Rarity.RARE, mage.cards.r.RohgahhOfKherKeep.class)); - cards.add(new SetCardInfo("Rolling Earthquake", 110, Rarity.RARE, mage.cards.r.RollingEarthquake.class)); - cards.add(new SetCardInfo("Rubinia Soulsinger", 173, Rarity.RARE, mage.cards.r.RubiniaSoulsinger.class)); - cards.add(new SetCardInfo("Scrubland", 210, Rarity.RARE, mage.cards.s.Scrubland.class)); - cards.add(new SetCardInfo("Scryb Sprites", 132, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); - cards.add(new SetCardInfo("Shu Cavalry", 23, Rarity.COMMON, mage.cards.s.ShuCavalry.class)); - cards.add(new SetCardInfo("Shu Elite Companions", 24, Rarity.COMMON, mage.cards.s.ShuEliteCompanions.class)); - cards.add(new SetCardInfo("Shu General", 25, Rarity.COMMON, mage.cards.s.ShuGeneral.class)); - cards.add(new SetCardInfo("Shu Soldier-Farmers", 26, Rarity.COMMON, mage.cards.s.ShuSoldierFarmers.class)); - cards.add(new SetCardInfo("Sir Shandlar of Eberyn", 174, Rarity.COMMON, mage.cards.s.SirShandlarOfEberyn.class)); - cards.add(new SetCardInfo("Sivitri Scarzam", 175, Rarity.COMMON, mage.cards.s.SivitriScarzam.class)); - cards.add(new SetCardInfo("Slashing Tiger", 133, Rarity.COMMON, mage.cards.s.SlashingTiger.class)); - cards.add(new SetCardInfo("Sol Grail", 201, Rarity.COMMON, mage.cards.s.SolGrail.class)); - cards.add(new SetCardInfo("Sorrow's Path", 211, Rarity.RARE, mage.cards.s.SorrowsPath.class)); - cards.add(new SetCardInfo("Spectral Shield", 176, Rarity.UNCOMMON, mage.cards.s.SpectralShield.class)); - cards.add(new SetCardInfo("Spirit Shackle", 74, Rarity.COMMON, mage.cards.s.SpiritShackle.class)); - cards.add(new SetCardInfo("Spoils of Victory", 134, Rarity.COMMON, mage.cards.s.SpoilsOfVictory.class)); - cards.add(new SetCardInfo("Stangg", 177, Rarity.UNCOMMON, mage.cards.s.Stangg.class)); - cards.add(new SetCardInfo("Stolen Grain", 75, Rarity.UNCOMMON, mage.cards.s.StolenGrain.class)); - cards.add(new SetCardInfo("Storm World", 111, Rarity.RARE, mage.cards.s.StormWorld.class)); - cards.add(new SetCardInfo("Strategic Planning", 51, Rarity.COMMON, mage.cards.s.StrategicPlanning.class)); - cards.add(new SetCardInfo("Sunastian Falconer", 178, Rarity.UNCOMMON, mage.cards.s.SunastianFalconer.class)); - cards.add(new SetCardInfo("Sun Ce, Young Conquerer", 52, Rarity.UNCOMMON, mage.cards.s.SunCeYoungConquerer.class)); - cards.add(new SetCardInfo("Sun Quan, Lord of Wu", 53, Rarity.RARE, mage.cards.s.SunQuanLordOfWu.class)); - cards.add(new SetCardInfo("Swamp", 222, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 223, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 224, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sword of the Ages", 202, Rarity.RARE, mage.cards.s.SwordOfTheAges.class)); - cards.add(new SetCardInfo("Tetsuo Umezawa", 179, Rarity.RARE, mage.cards.t.TetsuoUmezawa.class)); - cards.add(new SetCardInfo("The Abyss", 77, Rarity.RARE, mage.cards.t.TheAbyss.class)); - cards.add(new SetCardInfo("The Lady of the Mountain", 180, Rarity.COMMON, mage.cards.t.TheLadyOfTheMountain.class)); - cards.add(new SetCardInfo("The Tabernacle at Pendrell Vale", 212, Rarity.RARE, mage.cards.t.TheTabernacleAtPendrellVale.class)); - cards.add(new SetCardInfo("The Wretched", 78, Rarity.UNCOMMON, mage.cards.t.TheWretched.class)); - cards.add(new SetCardInfo("Three Visits", 135, Rarity.COMMON, mage.cards.t.ThreeVisits.class)); - cards.add(new SetCardInfo("Tobias Andrion", 181, Rarity.COMMON, mage.cards.t.TobiasAndrion.class)); - cards.add(new SetCardInfo("Torsten Von Ursus", 183, Rarity.COMMON, mage.cards.t.TorstenVonUrsus.class)); - cards.add(new SetCardInfo("Tor Wauki", 182, Rarity.UNCOMMON, mage.cards.t.TorWauki.class)); - cards.add(new SetCardInfo("Tracker", 136, Rarity.UNCOMMON, mage.cards.t.Tracker.class)); - cards.add(new SetCardInfo("Trip Wire", 137, Rarity.COMMON, mage.cards.t.TripWire.class)); - cards.add(new SetCardInfo("Tropical Island", 213, Rarity.RARE, mage.cards.t.TropicalIsland.class)); - cards.add(new SetCardInfo("Tuknir Deathlock", 184, Rarity.UNCOMMON, mage.cards.t.TuknirDeathlock.class)); - cards.add(new SetCardInfo("Urborg", 214, Rarity.UNCOMMON, mage.cards.u.Urborg.class)); - cards.add(new SetCardInfo("Vaevictis Asmadi", 185, Rarity.RARE, mage.cards.v.VaevictisAsmadi.class)); - cards.add(new SetCardInfo("Volcanic Island", 215, Rarity.RARE, mage.cards.v.VolcanicIsland.class)); - cards.add(new SetCardInfo("Wall of Light", 27, Rarity.COMMON, mage.cards.w.WallOfLight.class)); - cards.add(new SetCardInfo("Wandering Mage", 186, Rarity.RARE, mage.cards.w.WanderingMage.class)); - cards.add(new SetCardInfo("Wei Elite Companions", 79, Rarity.COMMON, mage.cards.w.WeiEliteCompanions.class)); - cards.add(new SetCardInfo("Wei Infantry", 80, Rarity.COMMON, mage.cards.w.WeiInfantry.class)); - cards.add(new SetCardInfo("Wei Night Raiders", 81, Rarity.UNCOMMON, mage.cards.w.WeiNightRaiders.class)); - cards.add(new SetCardInfo("Wei Strike Force", 82, Rarity.COMMON, mage.cards.w.WeiStrikeForce.class)); - cards.add(new SetCardInfo("Willow Priestess", 138, Rarity.UNCOMMON, mage.cards.w.WillowPriestess.class)); - cards.add(new SetCardInfo("Willow Satyr", 139, Rarity.RARE, mage.cards.w.WillowSatyr.class)); - cards.add(new SetCardInfo("Wormwood Treefolk", 140, Rarity.UNCOMMON, mage.cards.w.WormwoodTreefolk.class)); - cards.add(new SetCardInfo("Wu Elite Cavalry", 54, Rarity.COMMON, mage.cards.w.WuEliteCavalry.class)); - cards.add(new SetCardInfo("Wu Longbowman", 55, Rarity.COMMON, mage.cards.w.WuLongbowman.class)); - cards.add(new SetCardInfo("Wu Warship", 56, Rarity.COMMON, mage.cards.w.WuWarship.class)); - cards.add(new SetCardInfo("Xiahou Dun, the One-Eyed", 83, Rarity.UNCOMMON, mage.cards.x.XiahouDunTheOneEyed.class)); - cards.add(new SetCardInfo("Xira Arien", 187, Rarity.RARE, mage.cards.x.XiraArien.class)); - cards.add(new SetCardInfo("Young Wei Recruits", 84, Rarity.COMMON, mage.cards.y.YoungWeiRecruits.class)); - cards.add(new SetCardInfo("Zhang Fei, Fierce Warrior", 28, Rarity.UNCOMMON, mage.cards.z.ZhangFeiFierceWarrior.class)); - cards.add(new SetCardInfo("Zodiac Dragon", 112, Rarity.RARE, mage.cards.z.ZodiacDragon.class)); - } + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author LevelX2 + */ +public final class MastersEditionIII extends ExpansionSet { + + private static final MastersEditionIII instance = new MastersEditionIII(); + + public static MastersEditionIII getInstance() { + return instance; + } + + private MastersEditionIII() { + super("Masters Edition III", "ME3", ExpansionSet.buildDate(2009, 9, 7), SetType.MAGIC_ONLINE); + this.hasBasicLands = true; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Active Volcano", 85, Rarity.UNCOMMON, mage.cards.a.ActiveVolcano.class)); + cards.add(new SetCardInfo("Akron Legionnaire", 1, Rarity.RARE, mage.cards.a.AkronLegionnaire.class)); + cards.add(new SetCardInfo("Alabaster Potion", 2, Rarity.UNCOMMON, mage.cards.a.AlabasterPotion.class)); + cards.add(new SetCardInfo("All Hallow's Eve", 57, Rarity.RARE, mage.cards.a.AllHallowsEve.class)); + cards.add(new SetCardInfo("Amrou Kithkin", 3, Rarity.COMMON, mage.cards.a.AmrouKithkin.class)); + cards.add(new SetCardInfo("Anaba Ancestor", 86, Rarity.COMMON, mage.cards.a.AnabaAncestor.class)); + cards.add(new SetCardInfo("Anaba Spirit Crafter", 87, Rarity.COMMON, mage.cards.a.AnabaSpiritCrafter.class)); + cards.add(new SetCardInfo("Angus Mackenzie", 141, Rarity.RARE, mage.cards.a.AngusMackenzie.class)); + cards.add(new SetCardInfo("Arboria", 113, Rarity.RARE, mage.cards.a.Arboria.class)); + cards.add(new SetCardInfo("Arcades Sabboth", 142, Rarity.RARE, mage.cards.a.ArcadesSabboth.class)); + cards.add(new SetCardInfo("Arena of the Ancients", 188, Rarity.RARE, mage.cards.a.ArenaOfTheAncients.class)); + cards.add(new SetCardInfo("Ashes to Ashes", 58, Rarity.UNCOMMON, mage.cards.a.AshesToAshes.class)); + cards.add(new SetCardInfo("Astrolabe", 189, Rarity.COMMON, mage.cards.a.Astrolabe.class)); + cards.add(new SetCardInfo("Axelrod Gunnarson", 143, Rarity.UNCOMMON, mage.cards.a.AxelrodGunnarson.class)); + cards.add(new SetCardInfo("Banshee", 59, Rarity.UNCOMMON, mage.cards.b.Banshee.class)); + cards.add(new SetCardInfo("Barktooth Warbeard", 144, Rarity.COMMON, mage.cards.b.BarktoothWarbeard.class)); + cards.add(new SetCardInfo("Barl's Cage", 190, Rarity.RARE, mage.cards.b.BarlsCage.class)); + cards.add(new SetCardInfo("Bartel Runeaxe", 145, Rarity.UNCOMMON, mage.cards.b.BartelRuneaxe.class)); + cards.add(new SetCardInfo("Bayou", 204, Rarity.RARE, mage.cards.b.Bayou.class)); + cards.add(new SetCardInfo("Bazaar of Baghdad", 205, Rarity.RARE, mage.cards.b.BazaarOfBaghdad.class)); + cards.add(new SetCardInfo("Black Vise", 191, Rarity.RARE, mage.cards.b.BlackVise.class)); + cards.add(new SetCardInfo("Blood Lust", 88, Rarity.COMMON, mage.cards.b.BloodLust.class)); + cards.add(new SetCardInfo("Bone Flute", 192, Rarity.COMMON, mage.cards.b.BoneFlute.class)); + cards.add(new SetCardInfo("Boomerang", 30, Rarity.COMMON, mage.cards.b.Boomerang.class)); + cards.add(new SetCardInfo("Boris Devilboon", 146, Rarity.UNCOMMON, mage.cards.b.BorisDevilboon.class)); + cards.add(new SetCardInfo("Borrowing 100,000 Arrows", 31, Rarity.UNCOMMON, mage.cards.b.Borrowing100000Arrows.class)); + cards.add(new SetCardInfo("Brilliant Plan", 32, Rarity.COMMON, mage.cards.b.BrilliantPlan.class)); + cards.add(new SetCardInfo("Burning of Xinye", 89, Rarity.RARE, mage.cards.b.BurningOfXinye.class)); + cards.add(new SetCardInfo("Call to Arms", 4, Rarity.UNCOMMON, mage.cards.c.CallToArms.class)); + cards.add(new SetCardInfo("Capture of Jingzhou", 33, Rarity.RARE, mage.cards.c.CaptureOfJingzhou.class)); + cards.add(new SetCardInfo("Carrion Ants", 60, Rarity.UNCOMMON, mage.cards.c.CarrionAnts.class)); + cards.add(new SetCardInfo("Chain Lightning", 90, Rarity.COMMON, mage.cards.c.ChainLightning.class)); + cards.add(new SetCardInfo("Chromium", 147, Rarity.RARE, mage.cards.c.Chromium.class)); + cards.add(new SetCardInfo("Cinder Storm", 91, Rarity.UNCOMMON, mage.cards.c.CinderStorm.class)); + cards.add(new SetCardInfo("City of Shadows", 206, Rarity.RARE, mage.cards.c.CityOfShadows.class)); + cards.add(new SetCardInfo("Cleanse", 5, Rarity.RARE, mage.cards.c.Cleanse.class)); + cards.add(new SetCardInfo("Coal Golem", 193, Rarity.COMMON, mage.cards.c.CoalGolem.class)); + cards.add(new SetCardInfo("Concordant Crossroads", 114, Rarity.RARE, mage.cards.c.ConcordantCrossroads.class)); + cards.add(new SetCardInfo("Corrupt Eunuchs", 92, Rarity.UNCOMMON, mage.cards.c.CorruptEunuchs.class)); + cards.add(new SetCardInfo("Cosmic Horror", 61, Rarity.RARE, mage.cards.c.CosmicHorror.class)); + cards.add(new SetCardInfo("Crimson Kobolds", 93, Rarity.COMMON, mage.cards.c.CrimsonKobolds.class)); + cards.add(new SetCardInfo("Crimson Manticore", 94, Rarity.UNCOMMON, mage.cards.c.CrimsonManticore.class)); + cards.add(new SetCardInfo("Dance of Many", 34, Rarity.UNCOMMON, mage.cards.d.DanceOfMany.class)); + cards.add(new SetCardInfo("D'Avenant Archer", 6, Rarity.COMMON, mage.cards.d.DAvenantArcher.class)); + cards.add(new SetCardInfo("Demonic Torment", 62, Rarity.COMMON, mage.cards.d.DemonicTorment.class)); + cards.add(new SetCardInfo("Desert Twister", 115, Rarity.UNCOMMON, mage.cards.d.DesertTwister.class)); + cards.add(new SetCardInfo("Desperate Charge", 63, Rarity.COMMON, mage.cards.d.DesperateCharge.class)); + cards.add(new SetCardInfo("Didgeridoo", 194, Rarity.UNCOMMON, mage.cards.d.Didgeridoo.class)); + cards.add(new SetCardInfo("Disenchant", 7, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Disharmony", 95, Rarity.UNCOMMON, mage.cards.d.Disharmony.class)); + cards.add(new SetCardInfo("Divine Intervention", 8, Rarity.RARE, mage.cards.d.DivineIntervention.class)); + cards.add(new SetCardInfo("Dong Zhou, the Tyrant", 96, Rarity.RARE, mage.cards.d.DongZhouTheTyrant.class)); + cards.add(new SetCardInfo("Eightfold Maze", 9, Rarity.UNCOMMON, mage.cards.e.EightfoldMaze.class)); + cards.add(new SetCardInfo("Elves of Deep Shadow", 116, Rarity.COMMON, mage.cards.e.ElvesOfDeepShadow.class)); + cards.add(new SetCardInfo("Evil Presence", 64, Rarity.COMMON, mage.cards.e.EvilPresence.class)); + cards.add(new SetCardInfo("Exorcist", 10, Rarity.UNCOMMON, mage.cards.e.Exorcist.class)); + cards.add(new SetCardInfo("Faerie Noble", 117, Rarity.UNCOMMON, mage.cards.f.FaerieNoble.class)); + cards.add(new SetCardInfo("False Defeat", 11, Rarity.UNCOMMON, mage.cards.f.FalseDefeat.class)); + cards.add(new SetCardInfo("Famine", 65, Rarity.UNCOMMON, mage.cards.f.Famine.class)); + cards.add(new SetCardInfo("Fellwar Stone", 195, Rarity.COMMON, mage.cards.f.FellwarStone.class)); + cards.add(new SetCardInfo("Fevered Strength", 66, Rarity.COMMON, mage.cards.f.FeveredStrength.class)); + cards.add(new SetCardInfo("Fire Ambush", 97, Rarity.COMMON, mage.cards.f.FireAmbush.class)); + cards.add(new SetCardInfo("Fire Drake", 98, Rarity.COMMON, mage.cards.f.FireDrake.class)); + cards.add(new SetCardInfo("Fire Sprites", 118, Rarity.COMMON, mage.cards.f.FireSprites.class)); + cards.add(new SetCardInfo("Flash Flood", 35, Rarity.UNCOMMON, mage.cards.f.FlashFlood.class)); + cards.add(new SetCardInfo("Forced Retreat", 37, Rarity.COMMON, mage.cards.f.ForcedRetreat.class)); + cards.add(new SetCardInfo("Force Spike", 36, Rarity.COMMON, mage.cards.f.ForceSpike.class)); + cards.add(new SetCardInfo("Forest", 228, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 229, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 230, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forked Lightning", 100, Rarity.UNCOMMON, mage.cards.f.ForkedLightning.class)); + cards.add(new SetCardInfo("Freyalise's Winds", 119, Rarity.RARE, mage.cards.f.FreyalisesWinds.class)); + cards.add(new SetCardInfo("Frost Giant", 101, Rarity.UNCOMMON, mage.cards.f.FrostGiant.class)); + cards.add(new SetCardInfo("Gabriel Angelfire", 148, Rarity.RARE, mage.cards.g.GabrielAngelfire.class)); + cards.add(new SetCardInfo("Gaea's Touch", 120, Rarity.UNCOMMON, mage.cards.g.GaeasTouch.class)); + cards.add(new SetCardInfo("Gauntlets of Chaos", 196, Rarity.RARE, mage.cards.g.GauntletsOfChaos.class)); + cards.add(new SetCardInfo("Ghostly Visit", 67, Rarity.COMMON, mage.cards.g.GhostlyVisit.class)); + cards.add(new SetCardInfo("Ghosts of the Damned", 68, Rarity.COMMON, mage.cards.g.GhostsOfTheDamned.class)); + cards.add(new SetCardInfo("Giant Growth", 121, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Grim Tutor", 69, Rarity.RARE, mage.cards.g.GrimTutor.class)); + cards.add(new SetCardInfo("Guan Yu's 1,000-Li March", 13, Rarity.RARE, mage.cards.g.GuanYus1000LiMarch.class)); + cards.add(new SetCardInfo("Guan Yu, Sainted Warrior", 12, Rarity.UNCOMMON, mage.cards.g.GuanYuSaintedWarrior.class)); + cards.add(new SetCardInfo("Gwendlyn Di Corci", 149, Rarity.RARE, mage.cards.g.GwendlynDiCorci.class)); + cards.add(new SetCardInfo("Halfdane", 150, Rarity.RARE, mage.cards.h.Halfdane.class)); + cards.add(new SetCardInfo("Hammerheim", 207, Rarity.UNCOMMON, mage.cards.h.Hammerheim.class)); + cards.add(new SetCardInfo("Hazezon Tamar", 151, Rarity.RARE, mage.cards.h.HazezonTamar.class)); + cards.add(new SetCardInfo("Heal", 14, Rarity.COMMON, mage.cards.h.Heal.class)); + cards.add(new SetCardInfo("Heavy Fog", 122, Rarity.COMMON, mage.cards.h.HeavyFog.class)); + cards.add(new SetCardInfo("Hellfire", 70, Rarity.RARE, mage.cards.h.Hellfire.class)); + cards.add(new SetCardInfo("Hua Tuo, Honored Physician", 123, Rarity.RARE, mage.cards.h.HuaTuoHonoredPhysician.class)); + cards.add(new SetCardInfo("Hunding Gjornersen", 152, Rarity.UNCOMMON, mage.cards.h.HundingGjornersen.class)); + cards.add(new SetCardInfo("Hunting Cheetah", 124, Rarity.COMMON, mage.cards.h.HuntingCheetah.class)); + cards.add(new SetCardInfo("Hurloon Minotaur", 102, Rarity.COMMON, mage.cards.h.HurloonMinotaur.class)); + cards.add(new SetCardInfo("Immolation", 103, Rarity.COMMON, mage.cards.i.Immolation.class)); + cards.add(new SetCardInfo("Infuse", 38, Rarity.COMMON, mage.cards.i.Infuse.class)); + cards.add(new SetCardInfo("Island", 219, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 220, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 221, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Guardians", 15, Rarity.UNCOMMON, mage.cards.i.IvoryGuardians.class)); + cards.add(new SetCardInfo("Jedit Ojanen", 153, Rarity.COMMON, mage.cards.j.JeditOjanen.class)); + cards.add(new SetCardInfo("Jerrard of the Closed Fist", 154, Rarity.COMMON, mage.cards.j.JerrardOfTheClosedFist.class)); + cards.add(new SetCardInfo("Jungle Lion", 125, Rarity.COMMON, mage.cards.j.JungleLion.class)); + cards.add(new SetCardInfo("Karakas", 208, Rarity.RARE, mage.cards.k.Karakas.class)); + cards.add(new SetCardInfo("Kei Takahashi", 155, Rarity.UNCOMMON, mage.cards.k.KeiTakahashi.class)); + cards.add(new SetCardInfo("Killer Bees", 126, Rarity.UNCOMMON, mage.cards.k.KillerBees.class)); + cards.add(new SetCardInfo("Kjeldoran Frostbeast", 156, Rarity.UNCOMMON, mage.cards.k.KjeldoranFrostbeast.class)); + cards.add(new SetCardInfo("Kobold Drill Sergeant", 104, Rarity.UNCOMMON, mage.cards.k.KoboldDrillSergeant.class)); + cards.add(new SetCardInfo("Kobold Overlord", 105, Rarity.UNCOMMON, mage.cards.k.KoboldOverlord.class)); + cards.add(new SetCardInfo("Kobolds of Kher Keep", 107, Rarity.COMMON, mage.cards.k.KoboldsOfKherKeep.class)); + cards.add(new SetCardInfo("Kobold Taskmaster", 106, Rarity.COMMON, mage.cards.k.KoboldTaskmaster.class)); + cards.add(new SetCardInfo("Kongming, 'Sleeping Dragon'", 16, Rarity.RARE, mage.cards.k.KongmingSleepingDragon.class)); + cards.add(new SetCardInfo("Labyrinth Minotaur", 39, Rarity.COMMON, mage.cards.l.LabyrinthMinotaur.class)); + cards.add(new SetCardInfo("Lady Caleria", 157, Rarity.UNCOMMON, mage.cards.l.LadyCaleria.class)); + cards.add(new SetCardInfo("Lady Evangela", 158, Rarity.UNCOMMON, mage.cards.l.LadyEvangela.class)); + cards.add(new SetCardInfo("Lady Orca", 159, Rarity.COMMON, mage.cards.l.LadyOrca.class)); + cards.add(new SetCardInfo("Land Equilibrium", 40, Rarity.RARE, mage.cards.l.LandEquilibrium.class)); + cards.add(new SetCardInfo("Land Tax", 17, Rarity.RARE, mage.cards.l.LandTax.class)); + cards.add(new SetCardInfo("Life Chisel", 199, Rarity.RARE, mage.cards.l.LifeChisel.class)); + cards.add(new SetCardInfo("Lightning Blow", 18, Rarity.COMMON, mage.cards.l.LightningBlow.class)); + cards.add(new SetCardInfo("Liu Bei, Lord of Shu", 19, Rarity.RARE, mage.cards.l.LiuBeiLordOfShu.class)); + cards.add(new SetCardInfo("Living Plane", 127, Rarity.RARE, mage.cards.l.LivingPlane.class)); + cards.add(new SetCardInfo("Livonya Silone", 160, Rarity.UNCOMMON, mage.cards.l.LivonyaSilone.class)); + cards.add(new SetCardInfo("Loyal Retainers", 20, Rarity.UNCOMMON, mage.cards.l.LoyalRetainers.class)); + cards.add(new SetCardInfo("Lu Bu, Master-at-Arms", 108, Rarity.RARE, mage.cards.l.LuBuMasterAtArms.class)); + cards.add(new SetCardInfo("Lu Meng, Wu General", 41, Rarity.UNCOMMON, mage.cards.l.LuMengWuGeneral.class)); + cards.add(new SetCardInfo("Lu Xun, Scholar General", 42, Rarity.UNCOMMON, mage.cards.l.LuXunScholarGeneral.class)); + cards.add(new SetCardInfo("Mana Drain", 43, Rarity.RARE, mage.cards.m.ManaDrain.class)); + cards.add(new SetCardInfo("Mana Vortex", 44, Rarity.RARE, mage.cards.m.ManaVortex.class)); + cards.add(new SetCardInfo("Marhault Elsdragon", 161, Rarity.UNCOMMON, mage.cards.m.MarhaultElsdragon.class)); + cards.add(new SetCardInfo("Meng Huo, Barbarian King", 128, Rarity.RARE, mage.cards.m.MengHuoBarbarianKing.class)); + cards.add(new SetCardInfo("Meng Huo's Horde", 129, Rarity.COMMON, mage.cards.m.MengHuosHorde.class)); + cards.add(new SetCardInfo("Mind Twist", 72, Rarity.RARE, mage.cards.m.MindTwist.class)); + cards.add(new SetCardInfo("Misfortune's Gain", 21, Rarity.COMMON, mage.cards.m.MisfortunesGain.class)); + cards.add(new SetCardInfo("Mountain", 225, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 226, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 227, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Nebuchadnezzar", 162, Rarity.UNCOMMON, mage.cards.n.Nebuchadnezzar.class)); + cards.add(new SetCardInfo("Nether Void", 73, Rarity.RARE, mage.cards.n.NetherVoid.class)); + cards.add(new SetCardInfo("Nicol Bolas", 163, Rarity.RARE, mage.cards.n.NicolBolas.class)); + cards.add(new SetCardInfo("Nova Pentacle", 200, Rarity.RARE, mage.cards.n.NovaPentacle.class)); + cards.add(new SetCardInfo("Old Man of the Sea", 45, Rarity.RARE, mage.cards.o.OldManOfTheSea.class)); + cards.add(new SetCardInfo("Palladia-Mors", 164, Rarity.RARE, mage.cards.p.PalladiaMors.class)); + cards.add(new SetCardInfo("Pavel Maliki", 165, Rarity.UNCOMMON, mage.cards.p.PavelMaliki.class)); + cards.add(new SetCardInfo("Peach Garden Oath", 22, Rarity.COMMON, mage.cards.p.PeachGardenOath.class)); + cards.add(new SetCardInfo("Plains", 216, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 217, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 218, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plateau", 209, Rarity.RARE, mage.cards.p.Plateau.class)); + cards.add(new SetCardInfo("Princess Lucrezia", 166, Rarity.UNCOMMON, mage.cards.p.PrincessLucrezia.class)); + cards.add(new SetCardInfo("Raging Minotaur", 109, Rarity.COMMON, mage.cards.r.RagingMinotaur.class)); + cards.add(new SetCardInfo("Ragnar", 167, Rarity.UNCOMMON, mage.cards.r.Ragnar.class)); + cards.add(new SetCardInfo("Ramirez DePietro", 168, Rarity.COMMON, mage.cards.r.RamirezDePietro.class)); + cards.add(new SetCardInfo("Ramses Overdark", 169, Rarity.UNCOMMON, mage.cards.r.RamsesOverdark.class)); + cards.add(new SetCardInfo("Rasputin Dreamweaver", 170, Rarity.RARE, mage.cards.r.RasputinDreamweaver.class)); + cards.add(new SetCardInfo("Recall", 46, Rarity.UNCOMMON, mage.cards.r.Recall.class)); + cards.add(new SetCardInfo("Reincarnation", 130, Rarity.UNCOMMON, mage.cards.r.Reincarnation.class)); + cards.add(new SetCardInfo("Remove Soul", 47, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); + cards.add(new SetCardInfo("Reset", 48, Rarity.RARE, mage.cards.r.Reset.class)); + cards.add(new SetCardInfo("Reveka, Wizard Savant", 49, Rarity.UNCOMMON, mage.cards.r.RevekaWizardSavant.class)); + cards.add(new SetCardInfo("Riding the Dilu Horse", 131, Rarity.UNCOMMON, mage.cards.r.RidingTheDiluHorse.class)); + cards.add(new SetCardInfo("Riven Turnbull", 171, Rarity.UNCOMMON, mage.cards.r.RivenTurnbull.class)); + cards.add(new SetCardInfo("Rohgahh of Kher Keep", 172, Rarity.RARE, mage.cards.r.RohgahhOfKherKeep.class)); + cards.add(new SetCardInfo("Rolling Earthquake", 110, Rarity.RARE, mage.cards.r.RollingEarthquake.class)); + cards.add(new SetCardInfo("Rubinia Soulsinger", 173, Rarity.RARE, mage.cards.r.RubiniaSoulsinger.class)); + cards.add(new SetCardInfo("Scrubland", 210, Rarity.RARE, mage.cards.s.Scrubland.class)); + cards.add(new SetCardInfo("Scryb Sprites", 132, Rarity.COMMON, mage.cards.s.ScrybSprites.class)); + cards.add(new SetCardInfo("Shu Cavalry", 23, Rarity.COMMON, mage.cards.s.ShuCavalry.class)); + cards.add(new SetCardInfo("Shu Elite Companions", 24, Rarity.COMMON, mage.cards.s.ShuEliteCompanions.class)); + cards.add(new SetCardInfo("Shu General", 25, Rarity.COMMON, mage.cards.s.ShuGeneral.class)); + cards.add(new SetCardInfo("Shu Soldier-Farmers", 26, Rarity.COMMON, mage.cards.s.ShuSoldierFarmers.class)); + cards.add(new SetCardInfo("Sir Shandlar of Eberyn", 174, Rarity.COMMON, mage.cards.s.SirShandlarOfEberyn.class)); + cards.add(new SetCardInfo("Sivitri Scarzam", 175, Rarity.COMMON, mage.cards.s.SivitriScarzam.class)); + cards.add(new SetCardInfo("Slashing Tiger", 133, Rarity.COMMON, mage.cards.s.SlashingTiger.class)); + cards.add(new SetCardInfo("Sol Grail", 201, Rarity.COMMON, mage.cards.s.SolGrail.class)); + cards.add(new SetCardInfo("Sorrow's Path", 211, Rarity.RARE, mage.cards.s.SorrowsPath.class)); + cards.add(new SetCardInfo("Spectral Shield", 176, Rarity.UNCOMMON, mage.cards.s.SpectralShield.class)); + cards.add(new SetCardInfo("Spirit Shackle", 74, Rarity.COMMON, mage.cards.s.SpiritShackle.class)); + cards.add(new SetCardInfo("Spoils of Victory", 134, Rarity.COMMON, mage.cards.s.SpoilsOfVictory.class)); + cards.add(new SetCardInfo("Stangg", 177, Rarity.UNCOMMON, mage.cards.s.Stangg.class)); + cards.add(new SetCardInfo("Stolen Grain", 75, Rarity.UNCOMMON, mage.cards.s.StolenGrain.class)); + cards.add(new SetCardInfo("Storm World", 111, Rarity.RARE, mage.cards.s.StormWorld.class)); + cards.add(new SetCardInfo("Strategic Planning", 51, Rarity.COMMON, mage.cards.s.StrategicPlanning.class)); + cards.add(new SetCardInfo("Sunastian Falconer", 178, Rarity.UNCOMMON, mage.cards.s.SunastianFalconer.class)); + cards.add(new SetCardInfo("Sun Ce, Young Conquerer", 52, Rarity.UNCOMMON, mage.cards.s.SunCeYoungConquerer.class)); + cards.add(new SetCardInfo("Sun Quan, Lord of Wu", 53, Rarity.RARE, mage.cards.s.SunQuanLordOfWu.class)); + cards.add(new SetCardInfo("Swamp", 222, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 223, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 224, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sword of the Ages", 202, Rarity.RARE, mage.cards.s.SwordOfTheAges.class)); + cards.add(new SetCardInfo("Tetsuo Umezawa", 179, Rarity.RARE, mage.cards.t.TetsuoUmezawa.class)); + cards.add(new SetCardInfo("The Abyss", 77, Rarity.RARE, mage.cards.t.TheAbyss.class)); + cards.add(new SetCardInfo("The Lady of the Mountain", 180, Rarity.COMMON, mage.cards.t.TheLadyOfTheMountain.class)); + cards.add(new SetCardInfo("The Tabernacle at Pendrell Vale", 212, Rarity.RARE, mage.cards.t.TheTabernacleAtPendrellVale.class)); + cards.add(new SetCardInfo("The Wretched", 78, Rarity.UNCOMMON, mage.cards.t.TheWretched.class)); + cards.add(new SetCardInfo("Three Visits", 135, Rarity.COMMON, mage.cards.t.ThreeVisits.class)); + cards.add(new SetCardInfo("Tobias Andrion", 181, Rarity.COMMON, mage.cards.t.TobiasAndrion.class)); + cards.add(new SetCardInfo("Torsten Von Ursus", 183, Rarity.COMMON, mage.cards.t.TorstenVonUrsus.class)); + cards.add(new SetCardInfo("Tor Wauki", 182, Rarity.UNCOMMON, mage.cards.t.TorWauki.class)); + cards.add(new SetCardInfo("Tracker", 136, Rarity.UNCOMMON, mage.cards.t.Tracker.class)); + cards.add(new SetCardInfo("Trip Wire", 137, Rarity.COMMON, mage.cards.t.TripWire.class)); + cards.add(new SetCardInfo("Tropical Island", 213, Rarity.RARE, mage.cards.t.TropicalIsland.class)); + cards.add(new SetCardInfo("Tuknir Deathlock", 184, Rarity.UNCOMMON, mage.cards.t.TuknirDeathlock.class)); + cards.add(new SetCardInfo("Urborg", 214, Rarity.UNCOMMON, mage.cards.u.Urborg.class)); + cards.add(new SetCardInfo("Vaevictis Asmadi", 185, Rarity.RARE, mage.cards.v.VaevictisAsmadi.class)); + cards.add(new SetCardInfo("Volcanic Island", 215, Rarity.RARE, mage.cards.v.VolcanicIsland.class)); + cards.add(new SetCardInfo("Wall of Light", 27, Rarity.COMMON, mage.cards.w.WallOfLight.class)); + cards.add(new SetCardInfo("Wandering Mage", 186, Rarity.RARE, mage.cards.w.WanderingMage.class)); + cards.add(new SetCardInfo("Wei Elite Companions", 79, Rarity.COMMON, mage.cards.w.WeiEliteCompanions.class)); + cards.add(new SetCardInfo("Wei Infantry", 80, Rarity.COMMON, mage.cards.w.WeiInfantry.class)); + cards.add(new SetCardInfo("Wei Night Raiders", 81, Rarity.UNCOMMON, mage.cards.w.WeiNightRaiders.class)); + cards.add(new SetCardInfo("Wei Strike Force", 82, Rarity.COMMON, mage.cards.w.WeiStrikeForce.class)); + cards.add(new SetCardInfo("Willow Priestess", 138, Rarity.UNCOMMON, mage.cards.w.WillowPriestess.class)); + cards.add(new SetCardInfo("Willow Satyr", 139, Rarity.RARE, mage.cards.w.WillowSatyr.class)); + cards.add(new SetCardInfo("Wormwood Treefolk", 140, Rarity.UNCOMMON, mage.cards.w.WormwoodTreefolk.class)); + cards.add(new SetCardInfo("Wu Elite Cavalry", 54, Rarity.COMMON, mage.cards.w.WuEliteCavalry.class)); + cards.add(new SetCardInfo("Wu Longbowman", 55, Rarity.COMMON, mage.cards.w.WuLongbowman.class)); + cards.add(new SetCardInfo("Wu Warship", 56, Rarity.COMMON, mage.cards.w.WuWarship.class)); + cards.add(new SetCardInfo("Xiahou Dun, the One-Eyed", 83, Rarity.UNCOMMON, mage.cards.x.XiahouDunTheOneEyed.class)); + cards.add(new SetCardInfo("Xira Arien", 187, Rarity.RARE, mage.cards.x.XiraArien.class)); + cards.add(new SetCardInfo("Young Wei Recruits", 84, Rarity.COMMON, mage.cards.y.YoungWeiRecruits.class)); + cards.add(new SetCardInfo("Zhang Fei, Fierce Warrior", 28, Rarity.UNCOMMON, mage.cards.z.ZhangFeiFierceWarrior.class)); + cards.add(new SetCardInfo("Zodiac Dragon", 112, Rarity.RARE, mage.cards.z.ZodiacDragon.class)); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/MastersEditionIV.java b/Mage.Sets/src/mage/sets/MastersEditionIV.java index 555bfe9b183..9c6fedd1638 100644 --- a/Mage.Sets/src/mage/sets/MastersEditionIV.java +++ b/Mage.Sets/src/mage/sets/MastersEditionIV.java @@ -1,320 +1,320 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.cards.repository.CardCriteria; -import mage.cards.repository.CardInfo; -import mage.cards.repository.CardRepository; -import mage.constants.Rarity; -import mage.constants.SetType; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author LevelX2 - */ -public final class MastersEditionIV extends ExpansionSet { - - private static final MastersEditionIV instance = new MastersEditionIV(); - - public static MastersEditionIV getInstance() { - return instance; - } - - private final List savedSpecialLand = new ArrayList<>(); - - private MastersEditionIV() { - super("Masters Edition IV", "ME4", ExpansionSet.buildDate(2011, 1, 10), SetType.MAGIC_ONLINE); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 1; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - this.ratioBoosterSpecialLand = 1; // replace all basic lands - - cards.add(new SetCardInfo("Acid Rain", 36, Rarity.RARE, mage.cards.a.AcidRain.class)); - cards.add(new SetCardInfo("Aesthir Glider", 176, Rarity.COMMON, mage.cards.a.AesthirGlider.class)); - cards.add(new SetCardInfo("Air Elemental", 37, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); - cards.add(new SetCardInfo("Al-abara's Carpet", 177, Rarity.RARE, mage.cards.a.AlAbarasCarpet.class)); - cards.add(new SetCardInfo("Alaborn Musketeer", 1, Rarity.COMMON, mage.cards.a.AlabornMusketeer.class)); - cards.add(new SetCardInfo("Alaborn Trooper", 2, Rarity.COMMON, mage.cards.a.AlabornTrooper.class)); - cards.add(new SetCardInfo("Aladdin", 106, Rarity.RARE, mage.cards.a.Aladdin.class)); - cards.add(new SetCardInfo("Alchor's Tomb", 178, Rarity.RARE, mage.cards.a.AlchorsTomb.class)); - cards.add(new SetCardInfo("Ali from Cairo", 107, Rarity.RARE, mage.cards.a.AliFromCairo.class)); - cards.add(new SetCardInfo("Alluring Scent", 141, Rarity.COMMON, mage.cards.a.AlluringScent.class)); - cards.add(new SetCardInfo("Amulet of Kroog", 179, Rarity.COMMON, mage.cards.a.AmuletOfKroog.class)); - cards.add(new SetCardInfo("Angelic Voices", 3, Rarity.UNCOMMON, mage.cards.a.AngelicVoices.class)); - cards.add(new SetCardInfo("Animate Artifact", 38, Rarity.UNCOMMON, mage.cards.a.AnimateArtifact.class)); - cards.add(new SetCardInfo("Argivian Blacksmith", 4, Rarity.UNCOMMON, mage.cards.a.ArgivianBlacksmith.class)); - cards.add(new SetCardInfo("Argothian Pixies", 142, Rarity.COMMON, mage.cards.a.ArgothianPixies.class)); - cards.add(new SetCardInfo("Argothian Treefolk", 143, Rarity.UNCOMMON, mage.cards.a.ArgothianTreefolk.class)); - cards.add(new SetCardInfo("Armageddon Clock", 180, Rarity.RARE, mage.cards.a.ArmageddonClock.class)); - cards.add(new SetCardInfo("Armageddon", 5, Rarity.RARE, mage.cards.a.Armageddon.class)); - cards.add(new SetCardInfo("Artifact Blast", 108, Rarity.COMMON, mage.cards.a.ArtifactBlast.class)); - cards.add(new SetCardInfo("Ashnod's Altar", 181, Rarity.RARE, mage.cards.a.AshnodsAltar.class)); - cards.add(new SetCardInfo("Atog", 109, Rarity.COMMON, mage.cards.a.Atog.class)); - cards.add(new SetCardInfo("Badlands", 241, Rarity.RARE, mage.cards.b.Badlands.class)); - cards.add(new SetCardInfo("Balance", 6, Rarity.RARE, mage.cards.b.Balance.class)); - cards.add(new SetCardInfo("Basalt Monolith", 182, Rarity.UNCOMMON, mage.cards.b.BasaltMonolith.class)); - cards.add(new SetCardInfo("Bayou", 242, Rarity.RARE, mage.cards.b.Bayou.class)); - cards.add(new SetCardInfo("Bee Sting", 144, Rarity.UNCOMMON, mage.cards.b.BeeSting.class)); - cards.add(new SetCardInfo("Bird Maiden", 110, Rarity.COMMON, mage.cards.b.BirdMaiden.class)); - cards.add(new SetCardInfo("Black Knight", 71, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); - cards.add(new SetCardInfo("Blaze of Glory", 7, Rarity.UNCOMMON, mage.cards.b.BlazeOfGlory.class)); - cards.add(new SetCardInfo("Blue Elemental Blast", 39, Rarity.UNCOMMON, mage.cards.b.BlueElementalBlast.class)); - cards.add(new SetCardInfo("Book of Rass", 183, Rarity.UNCOMMON, mage.cards.b.BookOfRass.class)); - cards.add(new SetCardInfo("Bottle of Suleiman", 184, Rarity.RARE, mage.cards.b.BottleOfSuleiman.class)); - cards.add(new SetCardInfo("Braingeyser", 40, Rarity.RARE, mage.cards.b.Braingeyser.class)); - cards.add(new SetCardInfo("Brass Man", 185, Rarity.COMMON, mage.cards.b.BrassMan.class)); - cards.add(new SetCardInfo("Candelabra of Tawnos", 187, Rarity.RARE, mage.cards.c.CandelabraOfTawnos.class)); - cards.add(new SetCardInfo("Celestial Sword", 188, Rarity.UNCOMMON, mage.cards.c.CelestialSword.class)); - cards.add(new SetCardInfo("Champion Lancer", 8, Rarity.RARE, mage.cards.c.ChampionLancer.class)); - cards.add(new SetCardInfo("Channel", 145, Rarity.RARE, mage.cards.c.Channel.class)); - cards.add(new SetCardInfo("Citanul Druid", 146, Rarity.COMMON, mage.cards.c.CitanulDruid.class)); - cards.add(new SetCardInfo("City of Brass", 243, Rarity.RARE, mage.cards.c.CityOfBrass.class)); - cards.add(new SetCardInfo("Clay Statue", 189, Rarity.UNCOMMON, mage.cards.c.ClayStatue.class)); - cards.add(new SetCardInfo("Clockwork Avian", 190, Rarity.UNCOMMON, mage.cards.c.ClockworkAvian.class)); - cards.add(new SetCardInfo("Clockwork Gnomes", 191, Rarity.UNCOMMON, mage.cards.c.ClockworkGnomes.class)); - cards.add(new SetCardInfo("Clockwork Swarm", 192, Rarity.COMMON, mage.cards.c.ClockworkSwarm.class)); - cards.add(new SetCardInfo("Cloud Dragon", 41, Rarity.RARE, mage.cards.c.CloudDragon.class)); - cards.add(new SetCardInfo("Cloud Spirit", 42, Rarity.COMMON, mage.cards.c.CloudSpirit.class)); - cards.add(new SetCardInfo("Colossus of Sardia", 193, Rarity.RARE, mage.cards.c.ColossusOfSardia.class)); - cards.add(new SetCardInfo("Control Magic", 43, Rarity.RARE, mage.cards.c.ControlMagic.class)); - cards.add(new SetCardInfo("Conversion", 9, Rarity.RARE, mage.cards.c.Conversion.class)); - cards.add(new SetCardInfo("Copy Artifact", 44, Rarity.RARE, mage.cards.c.CopyArtifact.class)); - cards.add(new SetCardInfo("Coral Helm", 194, Rarity.UNCOMMON, mage.cards.c.CoralHelm.class)); - cards.add(new SetCardInfo("Counterspell", 45, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Crumble", 147, Rarity.COMMON, mage.cards.c.Crumble.class)); - cards.add(new SetCardInfo("Cyclone", 148, Rarity.RARE, mage.cards.c.Cyclone.class)); - cards.add(new SetCardInfo("Cyclopean Mummy", 72, Rarity.COMMON, mage.cards.c.CyclopeanMummy.class)); - cards.add(new SetCardInfo("Cyclopean Tomb", 195, Rarity.RARE, mage.cards.c.CyclopeanTomb.class)); - cards.add(new SetCardInfo("Dakmor Plague", 73, Rarity.UNCOMMON, mage.cards.d.DakmorPlague.class)); - cards.add(new SetCardInfo("Dark Ritual", 74, Rarity.COMMON, mage.cards.d.DarkRitual.class)); - cards.add(new SetCardInfo("Deathcoil Wurm", 149, Rarity.RARE, mage.cards.d.DeathcoilWurm.class)); - cards.add(new SetCardInfo("Deathgrip", 75, Rarity.RARE, mage.cards.d.Deathgrip.class)); - cards.add(new SetCardInfo("Demonic Hordes", 76, Rarity.RARE, mage.cards.d.DemonicHordes.class)); - cards.add(new SetCardInfo("Demonic Tutor", 77, Rarity.RARE, mage.cards.d.DemonicTutor.class)); - cards.add(new SetCardInfo("Detonate", 111, Rarity.UNCOMMON, mage.cards.d.Detonate.class)); - cards.add(new SetCardInfo("Devastation", 112, Rarity.RARE, mage.cards.d.Devastation.class)); - cards.add(new SetCardInfo("Diabolic Machine", 196, Rarity.UNCOMMON, mage.cards.d.DiabolicMachine.class)); - cards.add(new SetCardInfo("Divine Offering", 10, Rarity.COMMON, mage.cards.d.DivineOffering.class)); - cards.add(new SetCardInfo("Dragon Engine", 197, Rarity.COMMON, mage.cards.d.DragonEngine.class)); - cards.add(new SetCardInfo("Drain Power", 46, Rarity.RARE, mage.cards.d.DrainPower.class)); - cards.add(new SetCardInfo("Dread Reaper", 78, Rarity.RARE, mage.cards.d.DreadReaper.class)); - cards.add(new SetCardInfo("Dread Wight", 79, Rarity.UNCOMMON, mage.cards.d.DreadWight.class)); - cards.add(new SetCardInfo("Drop of Honey", 150, Rarity.RARE, mage.cards.d.DropOfHoney.class)); - cards.add(new SetCardInfo("Drowned", 47, Rarity.COMMON, mage.cards.d.Drowned.class)); - cards.add(new SetCardInfo("Dust to Dust", 11, Rarity.UNCOMMON, mage.cards.d.DustToDust.class)); - cards.add(new SetCardInfo("Ebon Dragon", 80, Rarity.RARE, mage.cards.e.EbonDragon.class)); - cards.add(new SetCardInfo("Ebony Horse", 198, Rarity.COMMON, mage.cards.e.EbonyHorse.class)); - cards.add(new SetCardInfo("Ebony Rhino", 199, Rarity.COMMON, mage.cards.e.EbonyRhino.class)); - cards.add(new SetCardInfo("Elephant Graveyard", 244, Rarity.UNCOMMON, mage.cards.e.ElephantGraveyard.class)); - cards.add(new SetCardInfo("Elite Cat Warrior", 151, Rarity.COMMON, mage.cards.e.EliteCatWarrior.class)); - cards.add(new SetCardInfo("Energy Flux", 48, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); - cards.add(new SetCardInfo("Eye for an Eye", 12, Rarity.RARE, mage.cards.e.EyeForAnEye.class)); - cards.add(new SetCardInfo("False Summoning", 49, Rarity.COMMON, mage.cards.f.FalseSummoning.class)); - cards.add(new SetCardInfo("Fastbond", 152, Rarity.RARE, mage.cards.f.Fastbond.class)); - cards.add(new SetCardInfo("Fire Imp", 113, Rarity.UNCOMMON, mage.cards.f.FireImp.class)); - cards.add(new SetCardInfo("Fire Tempest", 114, Rarity.RARE, mage.cards.f.FireTempest.class)); - cards.add(new SetCardInfo("Fireball", 115, Rarity.UNCOMMON, mage.cards.f.Fireball.class)); - cards.add(new SetCardInfo("Floodwater Dam", 200, Rarity.RARE, mage.cards.f.FloodwaterDam.class)); - cards.add(new SetCardInfo("Flying Carpet", 201, Rarity.COMMON, mage.cards.f.FlyingCarpet.class)); - cards.add(new SetCardInfo("Fog", 153, Rarity.COMMON, mage.cards.f.Fog.class)); - cards.add(new SetCardInfo("Force of Nature", 154, Rarity.RARE, mage.cards.f.ForceOfNature.class)); - cards.add(new SetCardInfo("Fork", 116, Rarity.RARE, mage.cards.f.Fork.class)); - cards.add(new SetCardInfo("Foul Spirit", 81, Rarity.COMMON, mage.cards.f.FoulSpirit.class)); - cards.add(new SetCardInfo("Gaea's Avenger", 155, Rarity.UNCOMMON, mage.cards.g.GaeasAvenger.class)); - cards.add(new SetCardInfo("Gate to Phyrexia", 82, Rarity.UNCOMMON, mage.cards.g.GateToPhyrexia.class)); - cards.add(new SetCardInfo("Gauntlet of Might", 202, Rarity.RARE, mage.cards.g.GauntletOfMight.class)); - cards.add(new SetCardInfo("Giant Growth", 156, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); - cards.add(new SetCardInfo("Giant Tortoise", 50, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); - cards.add(new SetCardInfo("Glasses of Urza", 203, Rarity.COMMON, mage.cards.g.GlassesOfUrza.class)); - cards.add(new SetCardInfo("Gloom", 83, Rarity.RARE, mage.cards.g.Gloom.class)); - cards.add(new SetCardInfo("Goblin Bully", 117, Rarity.COMMON, mage.cards.g.GoblinBully.class)); - cards.add(new SetCardInfo("Goblin Cavaliers", 118, Rarity.COMMON, mage.cards.g.GoblinCavaliers.class)); - cards.add(new SetCardInfo("Goblin Caves", 119, Rarity.COMMON, mage.cards.g.GoblinCaves.class)); - cards.add(new SetCardInfo("Goblin Firestarter", 120, Rarity.COMMON, mage.cards.g.GoblinFirestarter.class)); - cards.add(new SetCardInfo("Goblin General", 121, Rarity.UNCOMMON, mage.cards.g.GoblinGeneral.class)); - cards.add(new SetCardInfo("Goblin Shrine", 122, Rarity.COMMON, mage.cards.g.GoblinShrine.class)); - cards.add(new SetCardInfo("Goblin Warrens", 123, Rarity.UNCOMMON, mage.cards.g.GoblinWarrens.class)); - cards.add(new SetCardInfo("Gorilla War Cry", 124, Rarity.COMMON, mage.cards.g.GorillaWarCry.class)); - cards.add(new SetCardInfo("Grapeshot Catapult", 204, Rarity.UNCOMMON, mage.cards.g.GrapeshotCatapult.class)); - cards.add(new SetCardInfo("Gravebind", 84, Rarity.COMMON, mage.cards.g.Gravebind.class)); - cards.add(new SetCardInfo("Guardian Beast", 85, Rarity.RARE, mage.cards.g.GuardianBeast.class)); - cards.add(new SetCardInfo("Harsh Justice", 13, Rarity.RARE, mage.cards.h.HarshJustice.class)); - cards.add(new SetCardInfo("Hasran Ogress", 86, Rarity.COMMON, mage.cards.h.HasranOgress.class)); - cards.add(new SetCardInfo("Healing Salve", 14, Rarity.COMMON, mage.cards.h.HealingSalve.class)); - cards.add(new SetCardInfo("Horn of Deafening", 205, Rarity.UNCOMMON, mage.cards.h.HornOfDeafening.class)); - cards.add(new SetCardInfo("Howl from Beyond", 87, Rarity.COMMON, mage.cards.h.HowlFromBeyond.class)); - cards.add(new SetCardInfo("Ice Cauldron", 206, Rarity.RARE, mage.cards.i.IceCauldron.class)); - cards.add(new SetCardInfo("Icy Manipulator", 207, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); - cards.add(new SetCardInfo("In the Eye of Chaos", 51, Rarity.RARE, mage.cards.i.InTheEyeOfChaos.class)); - cards.add(new SetCardInfo("Instill Energy", 157, Rarity.UNCOMMON, mage.cards.i.InstillEnergy.class)); - cards.add(new SetCardInfo("Ironhoof Ox", 158, Rarity.COMMON, mage.cards.i.IronhoofOx.class)); - cards.add(new SetCardInfo("Island Sanctuary", 15, Rarity.RARE, mage.cards.i.IslandSanctuary.class)); - cards.add(new SetCardInfo("Jade Monolith", 208, Rarity.RARE, mage.cards.j.JadeMonolith.class)); - cards.add(new SetCardInfo("Juggernaut", 209, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); - cards.add(new SetCardInfo("Junun Efreet", 88, Rarity.UNCOMMON, mage.cards.j.JununEfreet.class)); - cards.add(new SetCardInfo("Just Fate", 16, Rarity.COMMON, mage.cards.j.JustFate.class)); - cards.add(new SetCardInfo("Kismet", 17, Rarity.RARE, mage.cards.k.Kismet.class)); - cards.add(new SetCardInfo("Kormus Bell", 210, Rarity.RARE, mage.cards.k.KormusBell.class)); - cards.add(new SetCardInfo("Kudzu", 159, Rarity.UNCOMMON, mage.cards.k.Kudzu.class)); - cards.add(new SetCardInfo("Last Chance", 125, Rarity.RARE, mage.cards.l.LastChance.class)); - cards.add(new SetCardInfo("Lava Flow", 126, Rarity.COMMON, mage.cards.l.LavaFlow.class)); - cards.add(new SetCardInfo("Leeches", 18, Rarity.RARE, mage.cards.l.Leeches.class)); - cards.add(new SetCardInfo("Library of Alexandria", 245, Rarity.RARE, mage.cards.l.LibraryOfAlexandria.class)); - cards.add(new SetCardInfo("Library of Leng", 211, Rarity.COMMON, mage.cards.l.LibraryOfLeng.class)); - cards.add(new SetCardInfo("Lich", 89, Rarity.RARE, mage.cards.l.Lich.class)); - cards.add(new SetCardInfo("Lifeforce", 160, Rarity.RARE, mage.cards.l.Lifeforce.class)); - cards.add(new SetCardInfo("Lim-Dul's Cohort", 90, Rarity.COMMON, mage.cards.l.LimDulsCohort.class)); - cards.add(new SetCardInfo("Living Lands", 161, Rarity.RARE, mage.cards.l.LivingLands.class)); - cards.add(new SetCardInfo("Living Wall", 212, Rarity.UNCOMMON, mage.cards.l.LivingWall.class)); - cards.add(new SetCardInfo("Mahamoti Djinn", 52, Rarity.RARE, mage.cards.m.MahamotiDjinn.class)); - cards.add(new SetCardInfo("Mana Matrix", 213, Rarity.RARE, mage.cards.m.ManaMatrix.class)); - cards.add(new SetCardInfo("Mana Vault", 214, Rarity.RARE, mage.cards.m.ManaVault.class)); - cards.add(new SetCardInfo("Martyr's Cry", 19, Rarity.RARE, mage.cards.m.MartyrsCry.class)); - cards.add(new SetCardInfo("Martyrs of Korlis", 20, Rarity.UNCOMMON, mage.cards.m.MartyrsOfKorlis.class)); - cards.add(new SetCardInfo("Maze of Ith", 246, Rarity.RARE, mage.cards.m.MazeOfIth.class)); - cards.add(new SetCardInfo("Mightstone", 215, Rarity.COMMON, mage.cards.m.Mightstone.class)); - cards.add(new SetCardInfo("Mijae Djinn", 127, Rarity.RARE, mage.cards.m.MijaeDjinn.class)); - cards.add(new SetCardInfo("Minion of Tevesh Szat", 91, Rarity.RARE, mage.cards.m.MinionOfTeveshSzat.class)); - cards.add(new SetCardInfo("Mishra's Workshop", 247, Rarity.RARE, mage.cards.m.MishrasWorkshop.class)); - cards.add(new SetCardInfo("Mystic Decree", 53, Rarity.UNCOMMON, mage.cards.m.MysticDecree.class)); - cards.add(new SetCardInfo("Naked Singularity", 216, Rarity.RARE, mage.cards.n.NakedSingularity.class)); - cards.add(new SetCardInfo("Oasis", 248, Rarity.COMMON, mage.cards.o.Oasis.class)); - cards.add(new SetCardInfo("Obelisk of Undoing", 217, Rarity.RARE, mage.cards.o.ObeliskOfUndoing.class)); - cards.add(new SetCardInfo("Obsianus Golem", 218, Rarity.COMMON, mage.cards.o.ObsianusGolem.class)); - cards.add(new SetCardInfo("Ogre Taskmaster", 128, Rarity.COMMON, mage.cards.o.OgreTaskmaster.class)); - cards.add(new SetCardInfo("Onulet", 219, Rarity.COMMON, mage.cards.o.Onulet.class)); - cards.add(new SetCardInfo("Orcish Mechanics", 129, Rarity.UNCOMMON, mage.cards.o.OrcishMechanics.class)); - cards.add(new SetCardInfo("Osai Vultures", 21, Rarity.COMMON, mage.cards.o.OsaiVultures.class)); - cards.add(new SetCardInfo("Overwhelming Forces", 92, Rarity.RARE, mage.cards.o.OverwhelmingForces.class)); - cards.add(new SetCardInfo("Owl Familiar", 54, Rarity.COMMON, mage.cards.o.OwlFamiliar.class)); - cards.add(new SetCardInfo("Pentagram of the Ages", 220, Rarity.UNCOMMON, mage.cards.p.PentagramOfTheAges.class)); - cards.add(new SetCardInfo("Personal Incarnation", 22, Rarity.RARE, mage.cards.p.PersonalIncarnation.class)); - cards.add(new SetCardInfo("Phantasmal Forces", 55, Rarity.COMMON, mage.cards.p.PhantasmalForces.class)); - cards.add(new SetCardInfo("Phantasmal Terrain", 56, Rarity.COMMON, mage.cards.p.PhantasmalTerrain.class)); - cards.add(new SetCardInfo("Planar Gate", 221, Rarity.UNCOMMON, mage.cards.p.PlanarGate.class)); - cards.add(new SetCardInfo("Plateau", 249, Rarity.RARE, mage.cards.p.Plateau.class)); - cards.add(new SetCardInfo("Power Artifact", 57, Rarity.RARE, mage.cards.p.PowerArtifact.class)); - cards.add(new SetCardInfo("Primal Clay", 222, Rarity.COMMON, mage.cards.p.PrimalClay.class)); - cards.add(new SetCardInfo("Prodigal Sorcerer", 58, Rarity.UNCOMMON, mage.cards.p.ProdigalSorcerer.class)); - cards.add(new SetCardInfo("Prowling Nightstalker", 93, Rarity.COMMON, mage.cards.p.ProwlingNightstalker.class)); - cards.add(new SetCardInfo("Radjan Spirit", 162, Rarity.UNCOMMON, mage.cards.r.RadjanSpirit.class)); - cards.add(new SetCardInfo("Rain of Daggers", 94, Rarity.RARE, mage.cards.r.RainOfDaggers.class)); - cards.add(new SetCardInfo("Rakalite", 223, Rarity.RARE, mage.cards.r.Rakalite.class)); - cards.add(new SetCardInfo("Reconstruction", 59, Rarity.COMMON, mage.cards.r.Reconstruction.class)); - cards.add(new SetCardInfo("Red Elemental Blast", 131, Rarity.UNCOMMON, mage.cards.r.RedElementalBlast.class)); - cards.add(new SetCardInfo("Regrowth", 163, Rarity.RARE, mage.cards.r.Regrowth.class)); - cards.add(new SetCardInfo("Righteous Charge", 23, Rarity.COMMON, mage.cards.r.RighteousCharge.class)); - cards.add(new SetCardInfo("Ring of Renewal", 224, Rarity.RARE, mage.cards.r.RingOfRenewal.class)); - cards.add(new SetCardInfo("Roc of Kher Ridges", 132, Rarity.UNCOMMON, mage.cards.r.RocOfKherRidges.class)); - cards.add(new SetCardInfo("Rock Hydra", 133, Rarity.RARE, mage.cards.r.RockHydra.class)); - cards.add(new SetCardInfo("Rockslide Ambush", 134, Rarity.COMMON, mage.cards.r.RockslideAmbush.class)); - cards.add(new SetCardInfo("Sandstorm", 164, Rarity.COMMON, mage.cards.s.Sandstorm.class)); - cards.add(new SetCardInfo("Savannah Lions", 24, Rarity.UNCOMMON, mage.cards.s.SavannahLions.class)); - cards.add(new SetCardInfo("Savannah", 250, Rarity.RARE, mage.cards.s.Savannah.class)); - cards.add(new SetCardInfo("Scarecrow", 225, Rarity.UNCOMMON, mage.cards.s.Scarecrow.class)); - cards.add(new SetCardInfo("Scarwood Bandits", 165, Rarity.RARE, mage.cards.s.ScarwoodBandits.class)); - cards.add(new SetCardInfo("Scavenger Folk", 166, Rarity.COMMON, mage.cards.s.ScavengerFolk.class)); - cards.add(new SetCardInfo("Scavenging Ghoul", 95, Rarity.UNCOMMON, mage.cards.s.ScavengingGhoul.class)); - cards.add(new SetCardInfo("Scrubland", 251, Rarity.RARE, mage.cards.s.Scrubland.class)); - cards.add(new SetCardInfo("Sea Serpent", 60, Rarity.COMMON, mage.cards.s.SeaSerpent.class)); - cards.add(new SetCardInfo("Sedge Troll", 135, Rarity.RARE, mage.cards.s.SedgeTroll.class)); - cards.add(new SetCardInfo("Sengir Vampire", 96, Rarity.UNCOMMON, mage.cards.s.SengirVampire.class)); - cards.add(new SetCardInfo("Serendib Djinn", 61, Rarity.RARE, mage.cards.s.SerendibDjinn.class)); - cards.add(new SetCardInfo("Serra Angel", 25, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); - cards.add(new SetCardInfo("Serra Aviary", 26, Rarity.UNCOMMON, mage.cards.s.SerraAviary.class)); - cards.add(new SetCardInfo("Serra Bestiary", 27, Rarity.COMMON, mage.cards.s.SerraBestiary.class)); - cards.add(new SetCardInfo("Shapeshifter", 226, Rarity.UNCOMMON, mage.cards.s.Shapeshifter.class)); - cards.add(new SetCardInfo("Shivan Dragon", 136, Rarity.RARE, mage.cards.s.ShivanDragon.class)); - cards.add(new SetCardInfo("Sinkhole", 97, Rarity.RARE, mage.cards.s.Sinkhole.class)); - cards.add(new SetCardInfo("Sleight of Hand", 62, Rarity.COMMON, mage.cards.s.SleightOfHand.class)); - cards.add(new SetCardInfo("Smoke", 137, Rarity.RARE, mage.cards.s.Smoke.class)); - cards.add(new SetCardInfo("Sol Ring", 227, Rarity.RARE, mage.cards.s.SolRing.class)); - cards.add(new SetCardInfo("Soldevi Golem", 228, Rarity.UNCOMMON, mage.cards.s.SoldeviGolem.class)); - cards.add(new SetCardInfo("Soldevi Machinist", 63, Rarity.UNCOMMON, mage.cards.s.SoldeviMachinist.class)); - cards.add(new SetCardInfo("Soul Shred", 98, Rarity.COMMON, mage.cards.s.SoulShred.class)); - cards.add(new SetCardInfo("Southern Elephant", 167, Rarity.COMMON, mage.cards.s.SouthernElephant.class)); - cards.add(new SetCardInfo("Spotted Griffin", 28, Rarity.COMMON, mage.cards.s.SpottedGriffin.class)); - cards.add(new SetCardInfo("Squall", 168, Rarity.UNCOMMON, mage.cards.s.Squall.class)); - cards.add(new SetCardInfo("Staff of Zegon", 229, Rarity.COMMON, mage.cards.s.StaffOfZegon.class)); - cards.add(new SetCardInfo("Stasis", 64, Rarity.RARE, mage.cards.s.Stasis.class)); - cards.add(new SetCardInfo("Steam Catapult", 29, Rarity.RARE, mage.cards.s.SteamCatapult.class)); - cards.add(new SetCardInfo("Strip Mine", 252, Rarity.RARE, mage.cards.s.StripMine.class)); - cards.add(new SetCardInfo("Swords to Plowshares", 30, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); - cards.add(new SetCardInfo("Sylvan Tutor", 169, Rarity.UNCOMMON, mage.cards.s.SylvanTutor.class)); - cards.add(new SetCardInfo("Symbol of Unsummoning", 65, Rarity.COMMON, mage.cards.s.SymbolOfUnsummoning.class)); - cards.add(new SetCardInfo("Tablet of Epityr", 230, Rarity.COMMON, mage.cards.t.TabletOfEpityr.class)); - cards.add(new SetCardInfo("Taiga", 253, Rarity.RARE, mage.cards.t.Taiga.class)); - cards.add(new SetCardInfo("Talas Researcher", 66, Rarity.UNCOMMON, mage.cards.t.TalasResearcher.class)); - cards.add(new SetCardInfo("Tawnos's Wand", 231, Rarity.COMMON, mage.cards.t.TawnossWand.class)); - cards.add(new SetCardInfo("Tawnos's Weaponry", 232, Rarity.UNCOMMON, mage.cards.t.TawnossWeaponry.class)); - cards.add(new SetCardInfo("Temple Acolyte", 31, Rarity.COMMON, mage.cards.t.TempleAcolyte.class)); - cards.add(new SetCardInfo("Terror", 99, Rarity.COMMON, mage.cards.t.Terror.class)); - cards.add(new SetCardInfo("Tetravus", 233, Rarity.RARE, mage.cards.t.Tetravus.class)); - cards.add(new SetCardInfo("Theft of Dreams", 67, Rarity.UNCOMMON, mage.cards.t.TheftOfDreams.class)); - cards.add(new SetCardInfo("Thing from the Deep", 68, Rarity.RARE, mage.cards.t.ThingFromTheDeep.class)); - cards.add(new SetCardInfo("Thunder Dragon", 138, Rarity.RARE, mage.cards.t.ThunderDragon.class)); - cards.add(new SetCardInfo("Time Vault", 234, Rarity.RARE, mage.cards.t.TimeVault.class)); - cards.add(new SetCardInfo("Titania's Song", 170, Rarity.RARE, mage.cards.t.TitaniasSong.class)); - cards.add(new SetCardInfo("Transmute Artifact", 69, Rarity.RARE, mage.cards.t.TransmuteArtifact.class)); - cards.add(new SetCardInfo("Triassic Egg", 235, Rarity.RARE, mage.cards.t.TriassicEgg.class)); - cards.add(new SetCardInfo("Tropical Island", 254, Rarity.RARE, mage.cards.t.TropicalIsland.class)); - cards.add(new SetCardInfo("Tsunami", 171, Rarity.RARE, mage.cards.t.Tsunami.class)); - cards.add(new SetCardInfo("Tundra", 255, Rarity.RARE, mage.cards.t.Tundra.class)); - cards.add(new SetCardInfo("Two-Headed Giant of Foriys", 139, Rarity.UNCOMMON, mage.cards.t.TwoHeadedGiantOfForiys.class)); - cards.add(new SetCardInfo("Underground Sea", 256, Rarity.RARE, mage.cards.u.UndergroundSea.class)); - cards.add(new SetCardInfo("Urza's Chalice", 236, Rarity.COMMON, mage.cards.u.UrzasChalice.class)); - cards.add(new SetCardInfo("Urza's Mine", "257a", Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Mine", "257b", Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Mine", "257c", Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Mine", "257d", Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Miter", 237, Rarity.RARE, mage.cards.u.UrzasMiter.class)); - cards.add(new SetCardInfo("Urza's Power Plant", "258a", Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Power Plant", "258b", Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Power Plant", "258c", Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Power Plant", "258d", Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Tower", "259a", Rarity.COMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Tower", "259b", Rarity.COMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Tower", "259c", Rarity.COMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Urza's Tower", "259d", Rarity.COMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Veteran Bodyguard", 32, Rarity.RARE, mage.cards.v.VeteranBodyguard.class)); - cards.add(new SetCardInfo("Vibrating Sphere", 238, Rarity.RARE, mage.cards.v.VibratingSphere.class)); - cards.add(new SetCardInfo("Volcanic Island", 260, Rarity.RARE, mage.cards.v.VolcanicIsland.class)); - cards.add(new SetCardInfo("War Mammoth", 172, Rarity.COMMON, mage.cards.w.WarMammoth.class)); - cards.add(new SetCardInfo("Warp Artifact", 100, Rarity.COMMON, mage.cards.w.WarpArtifact.class)); - cards.add(new SetCardInfo("Water Elemental", 70, Rarity.UNCOMMON, mage.cards.w.WaterElemental.class)); - cards.add(new SetCardInfo("Weakness", 101, Rarity.COMMON, mage.cards.w.Weakness.class)); - cards.add(new SetCardInfo("Weakstone", 239, Rarity.UNCOMMON, mage.cards.w.Weakstone.class)); - cards.add(new SetCardInfo("Wheel of Fortune", 140, Rarity.RARE, mage.cards.w.WheelOfFortune.class)); - cards.add(new SetCardInfo("Whiptail Wurm", 173, Rarity.UNCOMMON, mage.cards.w.WhiptailWurm.class)); - cards.add(new SetCardInfo("White Knight", 33, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); - cards.add(new SetCardInfo("Wicked Pact", 102, Rarity.UNCOMMON, mage.cards.w.WickedPact.class)); - cards.add(new SetCardInfo("Wild Aesthir", 34, Rarity.COMMON, mage.cards.w.WildAesthir.class)); - cards.add(new SetCardInfo("Wild Griffin", 35, Rarity.COMMON, mage.cards.w.WildGriffin.class)); - cards.add(new SetCardInfo("Wild Ox", 174, Rarity.UNCOMMON, mage.cards.w.WildOx.class)); - cards.add(new SetCardInfo("Wood Elemental", 175, Rarity.RARE, mage.cards.w.WoodElemental.class)); - cards.add(new SetCardInfo("Word of Command", 103, Rarity.RARE, mage.cards.w.WordOfCommand.class)); - cards.add(new SetCardInfo("Xenic Poltergeist", 104, Rarity.UNCOMMON, mage.cards.x.XenicPoltergeist.class)); - cards.add(new SetCardInfo("Yotian Soldier", 240, Rarity.COMMON, mage.cards.y.YotianSoldier.class)); - cards.add(new SetCardInfo("Zombie Master", 105, Rarity.UNCOMMON, mage.cards.z.ZombieMaster.class)); - } - - @Override - public List getSpecialLand() { - // ME4 replace all basic lands with special (1 per booster) - // https://mtg.gamepedia.com/Masters_Edition_IV - - if (savedSpecialLand.isEmpty()) { - savedSpecialLand.addAll(CardRepository.instance.findCards(new CardCriteria().setCodes(this.code).name("Urza's Mine"))); - savedSpecialLand.addAll(CardRepository.instance.findCards(new CardCriteria().setCodes(this.code).name("Urza's Power Plant"))); - savedSpecialLand.addAll(CardRepository.instance.findCards(new CardCriteria().setCodes(this.code).name("Urza's Tower"))); - } - - return new ArrayList<>(savedSpecialLand); - } + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.cards.repository.CardCriteria; +import mage.cards.repository.CardInfo; +import mage.cards.repository.CardRepository; +import mage.constants.Rarity; +import mage.constants.SetType; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author LevelX2 + */ +public final class MastersEditionIV extends ExpansionSet { + + private static final MastersEditionIV instance = new MastersEditionIV(); + + public static MastersEditionIV getInstance() { + return instance; + } + + private final List savedSpecialLand = new ArrayList<>(); + + private MastersEditionIV() { + super("Masters Edition IV", "ME4", ExpansionSet.buildDate(2011, 1, 10), SetType.MAGIC_ONLINE); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + this.ratioBoosterSpecialLand = 1; // replace all basic lands + + cards.add(new SetCardInfo("Acid Rain", 36, Rarity.RARE, mage.cards.a.AcidRain.class)); + cards.add(new SetCardInfo("Aesthir Glider", 176, Rarity.COMMON, mage.cards.a.AesthirGlider.class)); + cards.add(new SetCardInfo("Air Elemental", 37, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); + cards.add(new SetCardInfo("Al-abara's Carpet", 177, Rarity.RARE, mage.cards.a.AlAbarasCarpet.class)); + cards.add(new SetCardInfo("Alaborn Musketeer", 1, Rarity.COMMON, mage.cards.a.AlabornMusketeer.class)); + cards.add(new SetCardInfo("Alaborn Trooper", 2, Rarity.COMMON, mage.cards.a.AlabornTrooper.class)); + cards.add(new SetCardInfo("Aladdin", 106, Rarity.RARE, mage.cards.a.Aladdin.class)); + cards.add(new SetCardInfo("Alchor's Tomb", 178, Rarity.RARE, mage.cards.a.AlchorsTomb.class)); + cards.add(new SetCardInfo("Ali from Cairo", 107, Rarity.RARE, mage.cards.a.AliFromCairo.class)); + cards.add(new SetCardInfo("Alluring Scent", 141, Rarity.COMMON, mage.cards.a.AlluringScent.class)); + cards.add(new SetCardInfo("Amulet of Kroog", 179, Rarity.COMMON, mage.cards.a.AmuletOfKroog.class)); + cards.add(new SetCardInfo("Angelic Voices", 3, Rarity.UNCOMMON, mage.cards.a.AngelicVoices.class)); + cards.add(new SetCardInfo("Animate Artifact", 38, Rarity.UNCOMMON, mage.cards.a.AnimateArtifact.class)); + cards.add(new SetCardInfo("Argivian Blacksmith", 4, Rarity.UNCOMMON, mage.cards.a.ArgivianBlacksmith.class)); + cards.add(new SetCardInfo("Argothian Pixies", 142, Rarity.COMMON, mage.cards.a.ArgothianPixies.class)); + cards.add(new SetCardInfo("Argothian Treefolk", 143, Rarity.UNCOMMON, mage.cards.a.ArgothianTreefolk.class)); + cards.add(new SetCardInfo("Armageddon Clock", 180, Rarity.RARE, mage.cards.a.ArmageddonClock.class)); + cards.add(new SetCardInfo("Armageddon", 5, Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Artifact Blast", 108, Rarity.COMMON, mage.cards.a.ArtifactBlast.class)); + cards.add(new SetCardInfo("Ashnod's Altar", 181, Rarity.RARE, mage.cards.a.AshnodsAltar.class)); + cards.add(new SetCardInfo("Atog", 109, Rarity.COMMON, mage.cards.a.Atog.class)); + cards.add(new SetCardInfo("Badlands", 241, Rarity.RARE, mage.cards.b.Badlands.class)); + cards.add(new SetCardInfo("Balance", 6, Rarity.RARE, mage.cards.b.Balance.class)); + cards.add(new SetCardInfo("Basalt Monolith", 182, Rarity.UNCOMMON, mage.cards.b.BasaltMonolith.class)); + cards.add(new SetCardInfo("Bayou", 242, Rarity.RARE, mage.cards.b.Bayou.class)); + cards.add(new SetCardInfo("Bee Sting", 144, Rarity.UNCOMMON, mage.cards.b.BeeSting.class)); + cards.add(new SetCardInfo("Bird Maiden", 110, Rarity.COMMON, mage.cards.b.BirdMaiden.class)); + cards.add(new SetCardInfo("Black Knight", 71, Rarity.UNCOMMON, mage.cards.b.BlackKnight.class)); + cards.add(new SetCardInfo("Blaze of Glory", 7, Rarity.UNCOMMON, mage.cards.b.BlazeOfGlory.class)); + cards.add(new SetCardInfo("Blue Elemental Blast", 39, Rarity.UNCOMMON, mage.cards.b.BlueElementalBlast.class)); + cards.add(new SetCardInfo("Book of Rass", 183, Rarity.UNCOMMON, mage.cards.b.BookOfRass.class)); + cards.add(new SetCardInfo("Bottle of Suleiman", 184, Rarity.RARE, mage.cards.b.BottleOfSuleiman.class)); + cards.add(new SetCardInfo("Braingeyser", 40, Rarity.RARE, mage.cards.b.Braingeyser.class)); + cards.add(new SetCardInfo("Brass Man", 185, Rarity.COMMON, mage.cards.b.BrassMan.class)); + cards.add(new SetCardInfo("Candelabra of Tawnos", 187, Rarity.RARE, mage.cards.c.CandelabraOfTawnos.class)); + cards.add(new SetCardInfo("Celestial Sword", 188, Rarity.UNCOMMON, mage.cards.c.CelestialSword.class)); + cards.add(new SetCardInfo("Champion Lancer", 8, Rarity.RARE, mage.cards.c.ChampionLancer.class)); + cards.add(new SetCardInfo("Channel", 145, Rarity.RARE, mage.cards.c.Channel.class)); + cards.add(new SetCardInfo("Citanul Druid", 146, Rarity.COMMON, mage.cards.c.CitanulDruid.class)); + cards.add(new SetCardInfo("City of Brass", 243, Rarity.RARE, mage.cards.c.CityOfBrass.class)); + cards.add(new SetCardInfo("Clay Statue", 189, Rarity.UNCOMMON, mage.cards.c.ClayStatue.class)); + cards.add(new SetCardInfo("Clockwork Avian", 190, Rarity.UNCOMMON, mage.cards.c.ClockworkAvian.class)); + cards.add(new SetCardInfo("Clockwork Gnomes", 191, Rarity.UNCOMMON, mage.cards.c.ClockworkGnomes.class)); + cards.add(new SetCardInfo("Clockwork Swarm", 192, Rarity.COMMON, mage.cards.c.ClockworkSwarm.class)); + cards.add(new SetCardInfo("Cloud Dragon", 41, Rarity.RARE, mage.cards.c.CloudDragon.class)); + cards.add(new SetCardInfo("Cloud Spirit", 42, Rarity.COMMON, mage.cards.c.CloudSpirit.class)); + cards.add(new SetCardInfo("Colossus of Sardia", 193, Rarity.RARE, mage.cards.c.ColossusOfSardia.class)); + cards.add(new SetCardInfo("Control Magic", 43, Rarity.RARE, mage.cards.c.ControlMagic.class)); + cards.add(new SetCardInfo("Conversion", 9, Rarity.RARE, mage.cards.c.Conversion.class)); + cards.add(new SetCardInfo("Copy Artifact", 44, Rarity.RARE, mage.cards.c.CopyArtifact.class)); + cards.add(new SetCardInfo("Coral Helm", 194, Rarity.UNCOMMON, mage.cards.c.CoralHelm.class)); + cards.add(new SetCardInfo("Counterspell", 45, Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Crumble", 147, Rarity.COMMON, mage.cards.c.Crumble.class)); + cards.add(new SetCardInfo("Cyclone", 148, Rarity.RARE, mage.cards.c.Cyclone.class)); + cards.add(new SetCardInfo("Cyclopean Mummy", 72, Rarity.COMMON, mage.cards.c.CyclopeanMummy.class)); + cards.add(new SetCardInfo("Cyclopean Tomb", 195, Rarity.RARE, mage.cards.c.CyclopeanTomb.class)); + cards.add(new SetCardInfo("Dakmor Plague", 73, Rarity.UNCOMMON, mage.cards.d.DakmorPlague.class)); + cards.add(new SetCardInfo("Dark Ritual", 74, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Deathcoil Wurm", 149, Rarity.RARE, mage.cards.d.DeathcoilWurm.class)); + cards.add(new SetCardInfo("Deathgrip", 75, Rarity.RARE, mage.cards.d.Deathgrip.class)); + cards.add(new SetCardInfo("Demonic Hordes", 76, Rarity.RARE, mage.cards.d.DemonicHordes.class)); + cards.add(new SetCardInfo("Demonic Tutor", 77, Rarity.RARE, mage.cards.d.DemonicTutor.class)); + cards.add(new SetCardInfo("Detonate", 111, Rarity.UNCOMMON, mage.cards.d.Detonate.class)); + cards.add(new SetCardInfo("Devastation", 112, Rarity.RARE, mage.cards.d.Devastation.class)); + cards.add(new SetCardInfo("Diabolic Machine", 196, Rarity.UNCOMMON, mage.cards.d.DiabolicMachine.class)); + cards.add(new SetCardInfo("Divine Offering", 10, Rarity.COMMON, mage.cards.d.DivineOffering.class)); + cards.add(new SetCardInfo("Dragon Engine", 197, Rarity.COMMON, mage.cards.d.DragonEngine.class)); + cards.add(new SetCardInfo("Drain Power", 46, Rarity.RARE, mage.cards.d.DrainPower.class)); + cards.add(new SetCardInfo("Dread Reaper", 78, Rarity.RARE, mage.cards.d.DreadReaper.class)); + cards.add(new SetCardInfo("Dread Wight", 79, Rarity.UNCOMMON, mage.cards.d.DreadWight.class)); + cards.add(new SetCardInfo("Drop of Honey", 150, Rarity.RARE, mage.cards.d.DropOfHoney.class)); + cards.add(new SetCardInfo("Drowned", 47, Rarity.COMMON, mage.cards.d.Drowned.class)); + cards.add(new SetCardInfo("Dust to Dust", 11, Rarity.UNCOMMON, mage.cards.d.DustToDust.class)); + cards.add(new SetCardInfo("Ebon Dragon", 80, Rarity.RARE, mage.cards.e.EbonDragon.class)); + cards.add(new SetCardInfo("Ebony Horse", 198, Rarity.COMMON, mage.cards.e.EbonyHorse.class)); + cards.add(new SetCardInfo("Ebony Rhino", 199, Rarity.COMMON, mage.cards.e.EbonyRhino.class)); + cards.add(new SetCardInfo("Elephant Graveyard", 244, Rarity.UNCOMMON, mage.cards.e.ElephantGraveyard.class)); + cards.add(new SetCardInfo("Elite Cat Warrior", 151, Rarity.COMMON, mage.cards.e.EliteCatWarrior.class)); + cards.add(new SetCardInfo("Energy Flux", 48, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); + cards.add(new SetCardInfo("Eye for an Eye", 12, Rarity.RARE, mage.cards.e.EyeForAnEye.class)); + cards.add(new SetCardInfo("False Summoning", 49, Rarity.COMMON, mage.cards.f.FalseSummoning.class)); + cards.add(new SetCardInfo("Fastbond", 152, Rarity.RARE, mage.cards.f.Fastbond.class)); + cards.add(new SetCardInfo("Fire Imp", 113, Rarity.UNCOMMON, mage.cards.f.FireImp.class)); + cards.add(new SetCardInfo("Fire Tempest", 114, Rarity.RARE, mage.cards.f.FireTempest.class)); + cards.add(new SetCardInfo("Fireball", 115, Rarity.UNCOMMON, mage.cards.f.Fireball.class)); + cards.add(new SetCardInfo("Floodwater Dam", 200, Rarity.RARE, mage.cards.f.FloodwaterDam.class)); + cards.add(new SetCardInfo("Flying Carpet", 201, Rarity.COMMON, mage.cards.f.FlyingCarpet.class)); + cards.add(new SetCardInfo("Fog", 153, Rarity.COMMON, mage.cards.f.Fog.class)); + cards.add(new SetCardInfo("Force of Nature", 154, Rarity.RARE, mage.cards.f.ForceOfNature.class)); + cards.add(new SetCardInfo("Fork", 116, Rarity.RARE, mage.cards.f.Fork.class)); + cards.add(new SetCardInfo("Foul Spirit", 81, Rarity.COMMON, mage.cards.f.FoulSpirit.class)); + cards.add(new SetCardInfo("Gaea's Avenger", 155, Rarity.UNCOMMON, mage.cards.g.GaeasAvenger.class)); + cards.add(new SetCardInfo("Gate to Phyrexia", 82, Rarity.UNCOMMON, mage.cards.g.GateToPhyrexia.class)); + cards.add(new SetCardInfo("Gauntlet of Might", 202, Rarity.RARE, mage.cards.g.GauntletOfMight.class)); + cards.add(new SetCardInfo("Giant Growth", 156, Rarity.COMMON, mage.cards.g.GiantGrowth.class)); + cards.add(new SetCardInfo("Giant Tortoise", 50, Rarity.COMMON, mage.cards.g.GiantTortoise.class)); + cards.add(new SetCardInfo("Glasses of Urza", 203, Rarity.COMMON, mage.cards.g.GlassesOfUrza.class)); + cards.add(new SetCardInfo("Gloom", 83, Rarity.RARE, mage.cards.g.Gloom.class)); + cards.add(new SetCardInfo("Goblin Bully", 117, Rarity.COMMON, mage.cards.g.GoblinBully.class)); + cards.add(new SetCardInfo("Goblin Cavaliers", 118, Rarity.COMMON, mage.cards.g.GoblinCavaliers.class)); + cards.add(new SetCardInfo("Goblin Caves", 119, Rarity.COMMON, mage.cards.g.GoblinCaves.class)); + cards.add(new SetCardInfo("Goblin Firestarter", 120, Rarity.COMMON, mage.cards.g.GoblinFirestarter.class)); + cards.add(new SetCardInfo("Goblin General", 121, Rarity.UNCOMMON, mage.cards.g.GoblinGeneral.class)); + cards.add(new SetCardInfo("Goblin Shrine", 122, Rarity.COMMON, mage.cards.g.GoblinShrine.class)); + cards.add(new SetCardInfo("Goblin Warrens", 123, Rarity.UNCOMMON, mage.cards.g.GoblinWarrens.class)); + cards.add(new SetCardInfo("Gorilla War Cry", 124, Rarity.COMMON, mage.cards.g.GorillaWarCry.class)); + cards.add(new SetCardInfo("Grapeshot Catapult", 204, Rarity.UNCOMMON, mage.cards.g.GrapeshotCatapult.class)); + cards.add(new SetCardInfo("Gravebind", 84, Rarity.COMMON, mage.cards.g.Gravebind.class)); + cards.add(new SetCardInfo("Guardian Beast", 85, Rarity.RARE, mage.cards.g.GuardianBeast.class)); + cards.add(new SetCardInfo("Harsh Justice", 13, Rarity.RARE, mage.cards.h.HarshJustice.class)); + cards.add(new SetCardInfo("Hasran Ogress", 86, Rarity.COMMON, mage.cards.h.HasranOgress.class)); + cards.add(new SetCardInfo("Healing Salve", 14, Rarity.COMMON, mage.cards.h.HealingSalve.class)); + cards.add(new SetCardInfo("Horn of Deafening", 205, Rarity.UNCOMMON, mage.cards.h.HornOfDeafening.class)); + cards.add(new SetCardInfo("Howl from Beyond", 87, Rarity.COMMON, mage.cards.h.HowlFromBeyond.class)); + cards.add(new SetCardInfo("Ice Cauldron", 206, Rarity.RARE, mage.cards.i.IceCauldron.class)); + cards.add(new SetCardInfo("Icy Manipulator", 207, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); + cards.add(new SetCardInfo("In the Eye of Chaos", 51, Rarity.RARE, mage.cards.i.InTheEyeOfChaos.class)); + cards.add(new SetCardInfo("Instill Energy", 157, Rarity.UNCOMMON, mage.cards.i.InstillEnergy.class)); + cards.add(new SetCardInfo("Ironhoof Ox", 158, Rarity.COMMON, mage.cards.i.IronhoofOx.class)); + cards.add(new SetCardInfo("Island Sanctuary", 15, Rarity.RARE, mage.cards.i.IslandSanctuary.class)); + cards.add(new SetCardInfo("Jade Monolith", 208, Rarity.RARE, mage.cards.j.JadeMonolith.class)); + cards.add(new SetCardInfo("Juggernaut", 209, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); + cards.add(new SetCardInfo("Junun Efreet", 88, Rarity.UNCOMMON, mage.cards.j.JununEfreet.class)); + cards.add(new SetCardInfo("Just Fate", 16, Rarity.COMMON, mage.cards.j.JustFate.class)); + cards.add(new SetCardInfo("Kismet", 17, Rarity.RARE, mage.cards.k.Kismet.class)); + cards.add(new SetCardInfo("Kormus Bell", 210, Rarity.RARE, mage.cards.k.KormusBell.class)); + cards.add(new SetCardInfo("Kudzu", 159, Rarity.UNCOMMON, mage.cards.k.Kudzu.class)); + cards.add(new SetCardInfo("Last Chance", 125, Rarity.RARE, mage.cards.l.LastChance.class)); + cards.add(new SetCardInfo("Lava Flow", 126, Rarity.COMMON, mage.cards.l.LavaFlow.class)); + cards.add(new SetCardInfo("Leeches", 18, Rarity.RARE, mage.cards.l.Leeches.class)); + cards.add(new SetCardInfo("Library of Alexandria", 245, Rarity.RARE, mage.cards.l.LibraryOfAlexandria.class)); + cards.add(new SetCardInfo("Library of Leng", 211, Rarity.COMMON, mage.cards.l.LibraryOfLeng.class)); + cards.add(new SetCardInfo("Lich", 89, Rarity.RARE, mage.cards.l.Lich.class)); + cards.add(new SetCardInfo("Lifeforce", 160, Rarity.RARE, mage.cards.l.Lifeforce.class)); + cards.add(new SetCardInfo("Lim-Dul's Cohort", 90, Rarity.COMMON, mage.cards.l.LimDulsCohort.class)); + cards.add(new SetCardInfo("Living Lands", 161, Rarity.RARE, mage.cards.l.LivingLands.class)); + cards.add(new SetCardInfo("Living Wall", 212, Rarity.UNCOMMON, mage.cards.l.LivingWall.class)); + cards.add(new SetCardInfo("Mahamoti Djinn", 52, Rarity.RARE, mage.cards.m.MahamotiDjinn.class)); + cards.add(new SetCardInfo("Mana Matrix", 213, Rarity.RARE, mage.cards.m.ManaMatrix.class)); + cards.add(new SetCardInfo("Mana Vault", 214, Rarity.RARE, mage.cards.m.ManaVault.class)); + cards.add(new SetCardInfo("Martyr's Cry", 19, Rarity.RARE, mage.cards.m.MartyrsCry.class)); + cards.add(new SetCardInfo("Martyrs of Korlis", 20, Rarity.UNCOMMON, mage.cards.m.MartyrsOfKorlis.class)); + cards.add(new SetCardInfo("Maze of Ith", 246, Rarity.RARE, mage.cards.m.MazeOfIth.class)); + cards.add(new SetCardInfo("Mightstone", 215, Rarity.COMMON, mage.cards.m.Mightstone.class)); + cards.add(new SetCardInfo("Mijae Djinn", 127, Rarity.RARE, mage.cards.m.MijaeDjinn.class)); + cards.add(new SetCardInfo("Minion of Tevesh Szat", 91, Rarity.RARE, mage.cards.m.MinionOfTeveshSzat.class)); + cards.add(new SetCardInfo("Mishra's Workshop", 247, Rarity.RARE, mage.cards.m.MishrasWorkshop.class)); + cards.add(new SetCardInfo("Mystic Decree", 53, Rarity.UNCOMMON, mage.cards.m.MysticDecree.class)); + cards.add(new SetCardInfo("Naked Singularity", 216, Rarity.RARE, mage.cards.n.NakedSingularity.class)); + cards.add(new SetCardInfo("Oasis", 248, Rarity.COMMON, mage.cards.o.Oasis.class)); + cards.add(new SetCardInfo("Obelisk of Undoing", 217, Rarity.RARE, mage.cards.o.ObeliskOfUndoing.class)); + cards.add(new SetCardInfo("Obsianus Golem", 218, Rarity.COMMON, mage.cards.o.ObsianusGolem.class)); + cards.add(new SetCardInfo("Ogre Taskmaster", 128, Rarity.COMMON, mage.cards.o.OgreTaskmaster.class)); + cards.add(new SetCardInfo("Onulet", 219, Rarity.COMMON, mage.cards.o.Onulet.class)); + cards.add(new SetCardInfo("Orcish Mechanics", 129, Rarity.UNCOMMON, mage.cards.o.OrcishMechanics.class)); + cards.add(new SetCardInfo("Osai Vultures", 21, Rarity.COMMON, mage.cards.o.OsaiVultures.class)); + cards.add(new SetCardInfo("Overwhelming Forces", 92, Rarity.RARE, mage.cards.o.OverwhelmingForces.class)); + cards.add(new SetCardInfo("Owl Familiar", 54, Rarity.COMMON, mage.cards.o.OwlFamiliar.class)); + cards.add(new SetCardInfo("Pentagram of the Ages", 220, Rarity.UNCOMMON, mage.cards.p.PentagramOfTheAges.class)); + cards.add(new SetCardInfo("Personal Incarnation", 22, Rarity.RARE, mage.cards.p.PersonalIncarnation.class)); + cards.add(new SetCardInfo("Phantasmal Forces", 55, Rarity.COMMON, mage.cards.p.PhantasmalForces.class)); + cards.add(new SetCardInfo("Phantasmal Terrain", 56, Rarity.COMMON, mage.cards.p.PhantasmalTerrain.class)); + cards.add(new SetCardInfo("Planar Gate", 221, Rarity.UNCOMMON, mage.cards.p.PlanarGate.class)); + cards.add(new SetCardInfo("Plateau", 249, Rarity.RARE, mage.cards.p.Plateau.class)); + cards.add(new SetCardInfo("Power Artifact", 57, Rarity.RARE, mage.cards.p.PowerArtifact.class)); + cards.add(new SetCardInfo("Primal Clay", 222, Rarity.COMMON, mage.cards.p.PrimalClay.class)); + cards.add(new SetCardInfo("Prodigal Sorcerer", 58, Rarity.UNCOMMON, mage.cards.p.ProdigalSorcerer.class)); + cards.add(new SetCardInfo("Prowling Nightstalker", 93, Rarity.COMMON, mage.cards.p.ProwlingNightstalker.class)); + cards.add(new SetCardInfo("Radjan Spirit", 162, Rarity.UNCOMMON, mage.cards.r.RadjanSpirit.class)); + cards.add(new SetCardInfo("Rain of Daggers", 94, Rarity.RARE, mage.cards.r.RainOfDaggers.class)); + cards.add(new SetCardInfo("Rakalite", 223, Rarity.RARE, mage.cards.r.Rakalite.class)); + cards.add(new SetCardInfo("Reconstruction", 59, Rarity.COMMON, mage.cards.r.Reconstruction.class)); + cards.add(new SetCardInfo("Red Elemental Blast", 131, Rarity.UNCOMMON, mage.cards.r.RedElementalBlast.class)); + cards.add(new SetCardInfo("Regrowth", 163, Rarity.RARE, mage.cards.r.Regrowth.class)); + cards.add(new SetCardInfo("Righteous Charge", 23, Rarity.COMMON, mage.cards.r.RighteousCharge.class)); + cards.add(new SetCardInfo("Ring of Renewal", 224, Rarity.RARE, mage.cards.r.RingOfRenewal.class)); + cards.add(new SetCardInfo("Roc of Kher Ridges", 132, Rarity.UNCOMMON, mage.cards.r.RocOfKherRidges.class)); + cards.add(new SetCardInfo("Rock Hydra", 133, Rarity.RARE, mage.cards.r.RockHydra.class)); + cards.add(new SetCardInfo("Rockslide Ambush", 134, Rarity.COMMON, mage.cards.r.RockslideAmbush.class)); + cards.add(new SetCardInfo("Sandstorm", 164, Rarity.COMMON, mage.cards.s.Sandstorm.class)); + cards.add(new SetCardInfo("Savannah Lions", 24, Rarity.UNCOMMON, mage.cards.s.SavannahLions.class)); + cards.add(new SetCardInfo("Savannah", 250, Rarity.RARE, mage.cards.s.Savannah.class)); + cards.add(new SetCardInfo("Scarecrow", 225, Rarity.UNCOMMON, mage.cards.s.Scarecrow.class)); + cards.add(new SetCardInfo("Scarwood Bandits", 165, Rarity.RARE, mage.cards.s.ScarwoodBandits.class)); + cards.add(new SetCardInfo("Scavenger Folk", 166, Rarity.COMMON, mage.cards.s.ScavengerFolk.class)); + cards.add(new SetCardInfo("Scavenging Ghoul", 95, Rarity.UNCOMMON, mage.cards.s.ScavengingGhoul.class)); + cards.add(new SetCardInfo("Scrubland", 251, Rarity.RARE, mage.cards.s.Scrubland.class)); + cards.add(new SetCardInfo("Sea Serpent", 60, Rarity.COMMON, mage.cards.s.SeaSerpent.class)); + cards.add(new SetCardInfo("Sedge Troll", 135, Rarity.RARE, mage.cards.s.SedgeTroll.class)); + cards.add(new SetCardInfo("Sengir Vampire", 96, Rarity.UNCOMMON, mage.cards.s.SengirVampire.class)); + cards.add(new SetCardInfo("Serendib Djinn", 61, Rarity.RARE, mage.cards.s.SerendibDjinn.class)); + cards.add(new SetCardInfo("Serra Angel", 25, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); + cards.add(new SetCardInfo("Serra Aviary", 26, Rarity.UNCOMMON, mage.cards.s.SerraAviary.class)); + cards.add(new SetCardInfo("Serra Bestiary", 27, Rarity.COMMON, mage.cards.s.SerraBestiary.class)); + cards.add(new SetCardInfo("Shapeshifter", 226, Rarity.UNCOMMON, mage.cards.s.Shapeshifter.class)); + cards.add(new SetCardInfo("Shivan Dragon", 136, Rarity.RARE, mage.cards.s.ShivanDragon.class)); + cards.add(new SetCardInfo("Sinkhole", 97, Rarity.RARE, mage.cards.s.Sinkhole.class)); + cards.add(new SetCardInfo("Sleight of Hand", 62, Rarity.COMMON, mage.cards.s.SleightOfHand.class)); + cards.add(new SetCardInfo("Smoke", 137, Rarity.RARE, mage.cards.s.Smoke.class)); + cards.add(new SetCardInfo("Sol Ring", 227, Rarity.RARE, mage.cards.s.SolRing.class)); + cards.add(new SetCardInfo("Soldevi Golem", 228, Rarity.UNCOMMON, mage.cards.s.SoldeviGolem.class)); + cards.add(new SetCardInfo("Soldevi Machinist", 63, Rarity.UNCOMMON, mage.cards.s.SoldeviMachinist.class)); + cards.add(new SetCardInfo("Soul Shred", 98, Rarity.COMMON, mage.cards.s.SoulShred.class)); + cards.add(new SetCardInfo("Southern Elephant", 167, Rarity.COMMON, mage.cards.s.SouthernElephant.class)); + cards.add(new SetCardInfo("Spotted Griffin", 28, Rarity.COMMON, mage.cards.s.SpottedGriffin.class)); + cards.add(new SetCardInfo("Squall", 168, Rarity.UNCOMMON, mage.cards.s.Squall.class)); + cards.add(new SetCardInfo("Staff of Zegon", 229, Rarity.COMMON, mage.cards.s.StaffOfZegon.class)); + cards.add(new SetCardInfo("Stasis", 64, Rarity.RARE, mage.cards.s.Stasis.class)); + cards.add(new SetCardInfo("Steam Catapult", 29, Rarity.RARE, mage.cards.s.SteamCatapult.class)); + cards.add(new SetCardInfo("Strip Mine", 252, Rarity.RARE, mage.cards.s.StripMine.class)); + cards.add(new SetCardInfo("Swords to Plowshares", 30, Rarity.UNCOMMON, mage.cards.s.SwordsToPlowshares.class)); + cards.add(new SetCardInfo("Sylvan Tutor", 169, Rarity.UNCOMMON, mage.cards.s.SylvanTutor.class)); + cards.add(new SetCardInfo("Symbol of Unsummoning", 65, Rarity.COMMON, mage.cards.s.SymbolOfUnsummoning.class)); + cards.add(new SetCardInfo("Tablet of Epityr", 230, Rarity.COMMON, mage.cards.t.TabletOfEpityr.class)); + cards.add(new SetCardInfo("Taiga", 253, Rarity.RARE, mage.cards.t.Taiga.class)); + cards.add(new SetCardInfo("Talas Researcher", 66, Rarity.UNCOMMON, mage.cards.t.TalasResearcher.class)); + cards.add(new SetCardInfo("Tawnos's Wand", 231, Rarity.COMMON, mage.cards.t.TawnossWand.class)); + cards.add(new SetCardInfo("Tawnos's Weaponry", 232, Rarity.UNCOMMON, mage.cards.t.TawnossWeaponry.class)); + cards.add(new SetCardInfo("Temple Acolyte", 31, Rarity.COMMON, mage.cards.t.TempleAcolyte.class)); + cards.add(new SetCardInfo("Terror", 99, Rarity.COMMON, mage.cards.t.Terror.class)); + cards.add(new SetCardInfo("Tetravus", 233, Rarity.RARE, mage.cards.t.Tetravus.class)); + cards.add(new SetCardInfo("Theft of Dreams", 67, Rarity.UNCOMMON, mage.cards.t.TheftOfDreams.class)); + cards.add(new SetCardInfo("Thing from the Deep", 68, Rarity.RARE, mage.cards.t.ThingFromTheDeep.class)); + cards.add(new SetCardInfo("Thunder Dragon", 138, Rarity.RARE, mage.cards.t.ThunderDragon.class)); + cards.add(new SetCardInfo("Time Vault", 234, Rarity.RARE, mage.cards.t.TimeVault.class)); + cards.add(new SetCardInfo("Titania's Song", 170, Rarity.RARE, mage.cards.t.TitaniasSong.class)); + cards.add(new SetCardInfo("Transmute Artifact", 69, Rarity.RARE, mage.cards.t.TransmuteArtifact.class)); + cards.add(new SetCardInfo("Triassic Egg", 235, Rarity.RARE, mage.cards.t.TriassicEgg.class)); + cards.add(new SetCardInfo("Tropical Island", 254, Rarity.RARE, mage.cards.t.TropicalIsland.class)); + cards.add(new SetCardInfo("Tsunami", 171, Rarity.RARE, mage.cards.t.Tsunami.class)); + cards.add(new SetCardInfo("Tundra", 255, Rarity.RARE, mage.cards.t.Tundra.class)); + cards.add(new SetCardInfo("Two-Headed Giant of Foriys", 139, Rarity.UNCOMMON, mage.cards.t.TwoHeadedGiantOfForiys.class)); + cards.add(new SetCardInfo("Underground Sea", 256, Rarity.RARE, mage.cards.u.UndergroundSea.class)); + cards.add(new SetCardInfo("Urza's Chalice", 236, Rarity.COMMON, mage.cards.u.UrzasChalice.class)); + cards.add(new SetCardInfo("Urza's Mine", "257a", Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Mine", "257b", Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Mine", "257c", Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Mine", "257d", Rarity.COMMON, mage.cards.u.UrzasMine.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Miter", 237, Rarity.RARE, mage.cards.u.UrzasMiter.class)); + cards.add(new SetCardInfo("Urza's Power Plant", "258a", Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Power Plant", "258b", Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Power Plant", "258c", Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Power Plant", "258d", Rarity.COMMON, mage.cards.u.UrzasPowerPlant.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Tower", "259a", Rarity.COMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Tower", "259b", Rarity.COMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Tower", "259c", Rarity.COMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Urza's Tower", "259d", Rarity.COMMON, mage.cards.u.UrzasTower.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Veteran Bodyguard", 32, Rarity.RARE, mage.cards.v.VeteranBodyguard.class)); + cards.add(new SetCardInfo("Vibrating Sphere", 238, Rarity.RARE, mage.cards.v.VibratingSphere.class)); + cards.add(new SetCardInfo("Volcanic Island", 260, Rarity.RARE, mage.cards.v.VolcanicIsland.class)); + cards.add(new SetCardInfo("War Mammoth", 172, Rarity.COMMON, mage.cards.w.WarMammoth.class)); + cards.add(new SetCardInfo("Warp Artifact", 100, Rarity.COMMON, mage.cards.w.WarpArtifact.class)); + cards.add(new SetCardInfo("Water Elemental", 70, Rarity.UNCOMMON, mage.cards.w.WaterElemental.class)); + cards.add(new SetCardInfo("Weakness", 101, Rarity.COMMON, mage.cards.w.Weakness.class)); + cards.add(new SetCardInfo("Weakstone", 239, Rarity.UNCOMMON, mage.cards.w.Weakstone.class)); + cards.add(new SetCardInfo("Wheel of Fortune", 140, Rarity.RARE, mage.cards.w.WheelOfFortune.class)); + cards.add(new SetCardInfo("Whiptail Wurm", 173, Rarity.UNCOMMON, mage.cards.w.WhiptailWurm.class)); + cards.add(new SetCardInfo("White Knight", 33, Rarity.UNCOMMON, mage.cards.w.WhiteKnight.class)); + cards.add(new SetCardInfo("Wicked Pact", 102, Rarity.UNCOMMON, mage.cards.w.WickedPact.class)); + cards.add(new SetCardInfo("Wild Aesthir", 34, Rarity.COMMON, mage.cards.w.WildAesthir.class)); + cards.add(new SetCardInfo("Wild Griffin", 35, Rarity.COMMON, mage.cards.w.WildGriffin.class)); + cards.add(new SetCardInfo("Wild Ox", 174, Rarity.UNCOMMON, mage.cards.w.WildOx.class)); + cards.add(new SetCardInfo("Wood Elemental", 175, Rarity.RARE, mage.cards.w.WoodElemental.class)); + cards.add(new SetCardInfo("Word of Command", 103, Rarity.RARE, mage.cards.w.WordOfCommand.class)); + cards.add(new SetCardInfo("Xenic Poltergeist", 104, Rarity.UNCOMMON, mage.cards.x.XenicPoltergeist.class)); + cards.add(new SetCardInfo("Yotian Soldier", 240, Rarity.COMMON, mage.cards.y.YotianSoldier.class)); + cards.add(new SetCardInfo("Zombie Master", 105, Rarity.UNCOMMON, mage.cards.z.ZombieMaster.class)); + } + + @Override + public List getSpecialLand() { + // ME4 replace all basic lands with special (1 per booster) + // https://mtg.gamepedia.com/Masters_Edition_IV + + if (savedSpecialLand.isEmpty()) { + savedSpecialLand.addAll(CardRepository.instance.findCards(new CardCriteria().setCodes(this.code).name("Urza's Mine"))); + savedSpecialLand.addAll(CardRepository.instance.findCards(new CardCriteria().setCodes(this.code).name("Urza's Power Plant"))); + savedSpecialLand.addAll(CardRepository.instance.findCards(new CardCriteria().setCodes(this.code).name("Urza's Tower"))); + } + + return new ArrayList<>(savedSpecialLand); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/MercadianMasques.java b/Mage.Sets/src/mage/sets/MercadianMasques.java index 6e57ee25724..d43a08af2b3 100644 --- a/Mage.Sets/src/mage/sets/MercadianMasques.java +++ b/Mage.Sets/src/mage/sets/MercadianMasques.java @@ -1,367 +1,367 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author North - */ -public final class MercadianMasques extends ExpansionSet { - - private static final MercadianMasques instance = new MercadianMasques(); - - public static MercadianMasques getInstance() { - return instance; - } - - private MercadianMasques() { - super("Mercadian Masques", "MMQ", ExpansionSet.buildDate(1999, 8, 25), SetType.EXPANSION); - this.blockName = "Masques"; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Aerial Caravan", 58, Rarity.RARE, mage.cards.a.AerialCaravan.class)); - cards.add(new SetCardInfo("Afterlife", 1, Rarity.UNCOMMON, mage.cards.a.Afterlife.class)); - cards.add(new SetCardInfo("Alabaster Wall", 2, Rarity.COMMON, mage.cards.a.AlabasterWall.class)); - cards.add(new SetCardInfo("Alley Grifters", 115, Rarity.COMMON, mage.cards.a.AlleyGrifters.class)); - cards.add(new SetCardInfo("Ancestral Mask", 229, Rarity.COMMON, mage.cards.a.AncestralMask.class)); - cards.add(new SetCardInfo("Armistice", 3, Rarity.RARE, mage.cards.a.Armistice.class)); - cards.add(new SetCardInfo("Arms Dealer", 172, Rarity.UNCOMMON, mage.cards.a.ArmsDealer.class)); - cards.add(new SetCardInfo("Arrest", 4, Rarity.UNCOMMON, mage.cards.a.Arrest.class)); - cards.add(new SetCardInfo("Assembly Hall", 286, Rarity.RARE, mage.cards.a.AssemblyHall.class)); - cards.add(new SetCardInfo("Ballista Squad", 5, Rarity.UNCOMMON, mage.cards.b.BallistaSquad.class)); - cards.add(new SetCardInfo("Balloon Peddler", 59, Rarity.COMMON, mage.cards.b.BalloonPeddler.class)); - cards.add(new SetCardInfo("Barbed Wire", 287, Rarity.UNCOMMON, mage.cards.b.BarbedWire.class)); - cards.add(new SetCardInfo("Battle Rampart", 173, Rarity.COMMON, mage.cards.b.BattleRampart.class)); - cards.add(new SetCardInfo("Battle Squadron", 174, Rarity.RARE, mage.cards.b.BattleSquadron.class)); - cards.add(new SetCardInfo("Bifurcate", 230, Rarity.RARE, mage.cards.b.Bifurcate.class)); - cards.add(new SetCardInfo("Black Market", 116, Rarity.RARE, mage.cards.b.BlackMarket.class)); - cards.add(new SetCardInfo("Blaster Mage", 175, Rarity.COMMON, mage.cards.b.BlasterMage.class)); - cards.add(new SetCardInfo("Blockade Runner", 60, Rarity.COMMON, mage.cards.b.BlockadeRunner.class)); - cards.add(new SetCardInfo("Blood Hound", 176, Rarity.RARE, mage.cards.b.BloodHound.class)); - cards.add(new SetCardInfo("Blood Oath", 177, Rarity.RARE, mage.cards.b.BloodOath.class)); - cards.add(new SetCardInfo("Boa Constrictor", 231, Rarity.UNCOMMON, mage.cards.b.BoaConstrictor.class)); - cards.add(new SetCardInfo("Bog Smugglers", 117, Rarity.COMMON, mage.cards.b.BogSmugglers.class)); - cards.add(new SetCardInfo("Bog Witch", 118, Rarity.COMMON, mage.cards.b.BogWitch.class)); - cards.add(new SetCardInfo("Brainstorm", 61, Rarity.COMMON, mage.cards.b.Brainstorm.class)); - cards.add(new SetCardInfo("Brawl", 178, Rarity.RARE, mage.cards.b.Brawl.class)); - cards.add(new SetCardInfo("Briar Patch", 232, Rarity.UNCOMMON, mage.cards.b.BriarPatch.class)); - cards.add(new SetCardInfo("Bribery", 62, Rarity.RARE, mage.cards.b.Bribery.class)); - cards.add(new SetCardInfo("Buoyancy", 63, Rarity.COMMON, mage.cards.b.Buoyancy.class)); - cards.add(new SetCardInfo("Cackling Witch", 119, Rarity.UNCOMMON, mage.cards.c.CacklingWitch.class)); - cards.add(new SetCardInfo("Caller of the Hunt", 233, Rarity.RARE, mage.cards.c.CallerOfTheHunt.class)); - cards.add(new SetCardInfo("Cateran Brute", 120, Rarity.COMMON, mage.cards.c.CateranBrute.class)); - cards.add(new SetCardInfo("Cateran Enforcer", 121, Rarity.UNCOMMON, mage.cards.c.CateranEnforcer.class)); - cards.add(new SetCardInfo("Cateran Kidnappers", 122, Rarity.UNCOMMON, mage.cards.c.CateranKidnappers.class)); - cards.add(new SetCardInfo("Cateran Overlord", 123, Rarity.RARE, mage.cards.c.CateranOverlord.class)); - cards.add(new SetCardInfo("Cateran Persuader", 124, Rarity.COMMON, mage.cards.c.CateranPersuader.class)); - cards.add(new SetCardInfo("Cateran Slaver", 125, Rarity.RARE, mage.cards.c.CateranSlaver.class)); - cards.add(new SetCardInfo("Cateran Summons", 126, Rarity.UNCOMMON, mage.cards.c.CateranSummons.class)); - cards.add(new SetCardInfo("Caustic Wasps", 234, Rarity.UNCOMMON, mage.cards.c.CausticWasps.class)); - cards.add(new SetCardInfo("Cave-In", 180, Rarity.RARE, mage.cards.c.CaveIn.class)); - cards.add(new SetCardInfo("Cavern Crawler", 181, Rarity.COMMON, mage.cards.c.CavernCrawler.class)); - cards.add(new SetCardInfo("Cave Sense", 179, Rarity.COMMON, mage.cards.c.CaveSense.class)); - cards.add(new SetCardInfo("Ceremonial Guard", 182, Rarity.COMMON, mage.cards.c.CeremonialGuard.class)); - cards.add(new SetCardInfo("Chambered Nautilus", 64, Rarity.UNCOMMON, mage.cards.c.ChamberedNautilus.class)); - cards.add(new SetCardInfo("Charisma", 66, Rarity.RARE, mage.cards.c.Charisma.class)); - cards.add(new SetCardInfo("Charm Peddler", 6, Rarity.COMMON, mage.cards.c.CharmPeddler.class)); - cards.add(new SetCardInfo("Charmed Griffin", 7, Rarity.UNCOMMON, mage.cards.c.CharmedGriffin.class)); - cards.add(new SetCardInfo("Cho-Arrim Alchemist", 8, Rarity.RARE, mage.cards.c.ChoArrimAlchemist.class)); - cards.add(new SetCardInfo("Cho-Arrim Bruiser", 9, Rarity.RARE, mage.cards.c.ChoArrimBruiser.class)); - cards.add(new SetCardInfo("Cho-Arrim Legate", 10, Rarity.UNCOMMON, mage.cards.c.ChoArrimLegate.class)); - cards.add(new SetCardInfo("Cho-Manno, Revolutionary", 11, Rarity.RARE, mage.cards.c.ChoMannoRevolutionary.class)); - cards.add(new SetCardInfo("Cho-Manno's Blessing", 12, Rarity.COMMON, mage.cards.c.ChoMannosBlessing.class)); - cards.add(new SetCardInfo("Cinder Elemental", 183, Rarity.UNCOMMON, mage.cards.c.CinderElemental.class)); - cards.add(new SetCardInfo("Clear the Land", 235, Rarity.RARE, mage.cards.c.ClearTheLand.class)); - cards.add(new SetCardInfo("Close Quarters", 184, Rarity.UNCOMMON, mage.cards.c.CloseQuarters.class)); - cards.add(new SetCardInfo("Cloud Sprite", 67, Rarity.COMMON, mage.cards.c.CloudSprite.class)); - cards.add(new SetCardInfo("Coastal Piracy", 68, Rarity.UNCOMMON, mage.cards.c.CoastalPiracy.class)); - cards.add(new SetCardInfo("Collective Unconscious", 236, Rarity.RARE, mage.cards.c.CollectiveUnconscious.class)); - cards.add(new SetCardInfo("Common Cause", 13, Rarity.RARE, mage.cards.c.CommonCause.class)); - cards.add(new SetCardInfo("Conspiracy", 127, Rarity.RARE, mage.cards.c.Conspiracy.class)); - cards.add(new SetCardInfo("Corrupt Official", 128, Rarity.RARE, mage.cards.c.CorruptOfficial.class)); - cards.add(new SetCardInfo("Counterspell", 69, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Cowardice", 70, Rarity.RARE, mage.cards.c.Cowardice.class)); - cards.add(new SetCardInfo("Crackdown", 15, Rarity.RARE, mage.cards.c.Crackdown.class)); - cards.add(new SetCardInfo("Crag Saurian", 185, Rarity.RARE, mage.cards.c.CragSaurian.class)); - cards.add(new SetCardInfo("Crash", 186, Rarity.COMMON, mage.cards.c.Crash.class)); - cards.add(new SetCardInfo("Credit Voucher", 289, Rarity.UNCOMMON, mage.cards.c.CreditVoucher.class)); - cards.add(new SetCardInfo("Crenellated Wall", 290, Rarity.UNCOMMON, mage.cards.c.CrenellatedWall.class)); - cards.add(new SetCardInfo("Crooked Scales", 291, Rarity.RARE, mage.cards.c.CrookedScales.class)); - cards.add(new SetCardInfo("Crossbow Infantry", 16, Rarity.COMMON, mage.cards.c.CrossbowInfantry.class)); - cards.add(new SetCardInfo("Crumbling Sanctuary", 292, Rarity.RARE, mage.cards.c.CrumblingSanctuary.class)); - cards.add(new SetCardInfo("Customs Depot", 71, Rarity.UNCOMMON, mage.cards.c.CustomsDepot.class)); - cards.add(new SetCardInfo("Dark Ritual", 129, Rarity.COMMON, mage.cards.d.DarkRitual.class)); - cards.add(new SetCardInfo("Darting Merfolk", 72, Rarity.COMMON, mage.cards.d.DartingMerfolk.class)); - cards.add(new SetCardInfo("Dawnstrider", 237, Rarity.RARE, mage.cards.d.Dawnstrider.class)); - cards.add(new SetCardInfo("Deadly Insect", 238, Rarity.COMMON, mage.cards.d.DeadlyInsect.class)); - cards.add(new SetCardInfo("Deathgazer", 130, Rarity.UNCOMMON, mage.cards.d.Deathgazer.class)); - cards.add(new SetCardInfo("Deepwood Drummer", 239, Rarity.COMMON, mage.cards.d.DeepwoodDrummer.class)); - cards.add(new SetCardInfo("Deepwood Elder", 240, Rarity.RARE, mage.cards.d.DeepwoodElder.class)); - cards.add(new SetCardInfo("Deepwood Ghoul", 131, Rarity.COMMON, mage.cards.d.DeepwoodGhoul.class)); - cards.add(new SetCardInfo("Deepwood Legate", 132, Rarity.UNCOMMON, mage.cards.d.DeepwoodLegate.class)); - cards.add(new SetCardInfo("Deepwood Tantiv", 241, Rarity.UNCOMMON, mage.cards.d.DeepwoodTantiv.class)); - cards.add(new SetCardInfo("Deepwood Wolverine", 242, Rarity.COMMON, mage.cards.d.DeepwoodWolverine.class)); - cards.add(new SetCardInfo("Dehydration", 73, Rarity.COMMON, mage.cards.d.Dehydration.class)); - cards.add(new SetCardInfo("Delraich", 133, Rarity.RARE, mage.cards.d.Delraich.class)); - cards.add(new SetCardInfo("Desert Twister", 243, Rarity.UNCOMMON, mage.cards.d.DesertTwister.class)); - cards.add(new SetCardInfo("Devout Witness", 17, Rarity.COMMON, mage.cards.d.DevoutWitness.class)); - cards.add(new SetCardInfo("Diplomatic Escort", 74, Rarity.UNCOMMON, mage.cards.d.DiplomaticEscort.class)); - cards.add(new SetCardInfo("Diplomatic Immunity", 75, Rarity.COMMON, mage.cards.d.DiplomaticImmunity.class)); - cards.add(new SetCardInfo("Disenchant", 18, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Distorting Lens", 293, Rarity.RARE, mage.cards.d.DistortingLens.class)); - cards.add(new SetCardInfo("Drake Hatchling", 76, Rarity.COMMON, mage.cards.d.DrakeHatchling.class)); - cards.add(new SetCardInfo("Dust Bowl", 316, Rarity.RARE, mage.cards.d.DustBowl.class)); - cards.add(new SetCardInfo("Embargo", 77, Rarity.RARE, mage.cards.e.Embargo.class)); - cards.add(new SetCardInfo("Energy Flux", 78, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); - cards.add(new SetCardInfo("Enslaved Horror", 134, Rarity.UNCOMMON, mage.cards.e.EnslavedHorror.class)); - cards.add(new SetCardInfo("Extortion", 135, Rarity.RARE, mage.cards.e.Extortion.class)); - cards.add(new SetCardInfo("Extravagant Spirit", 79, Rarity.RARE, mage.cards.e.ExtravagantSpirit.class)); - cards.add(new SetCardInfo("Eye of Ramos", 294, Rarity.RARE, mage.cards.e.EyeOfRamos.class)); - cards.add(new SetCardInfo("False Demise", 80, Rarity.UNCOMMON, mage.cards.f.FalseDemise.class)); - cards.add(new SetCardInfo("Ferocity", 245, Rarity.COMMON, mage.cards.f.Ferocity.class)); - cards.add(new SetCardInfo("Flailing Manticore", 187, Rarity.RARE, mage.cards.f.FlailingManticore.class)); - cards.add(new SetCardInfo("Flailing Ogre", 188, Rarity.UNCOMMON, mage.cards.f.FlailingOgre.class)); - cards.add(new SetCardInfo("Flailing Soldier", 189, Rarity.COMMON, mage.cards.f.FlailingSoldier.class)); - cards.add(new SetCardInfo("Flaming Sword", 190, Rarity.COMMON, mage.cards.f.FlamingSword.class)); - cards.add(new SetCardInfo("Food Chain", 246, Rarity.RARE, mage.cards.f.FoodChain.class)); - cards.add(new SetCardInfo("Forced March", 136, Rarity.RARE, mage.cards.f.ForcedMarch.class)); - cards.add(new SetCardInfo("Forest", 347, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 348, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 349, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 350, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Foster", 247, Rarity.RARE, mage.cards.f.Foster.class)); - cards.add(new SetCardInfo("Fountain of Cho", 317, Rarity.UNCOMMON, mage.cards.f.FountainOfCho.class)); - cards.add(new SetCardInfo("Fountain Watch", 19, Rarity.RARE, mage.cards.f.FountainWatch.class)); - cards.add(new SetCardInfo("Fresh Volunteers", 20, Rarity.COMMON, mage.cards.f.FreshVolunteers.class)); - cards.add(new SetCardInfo("Furious Assault", 191, Rarity.COMMON, mage.cards.f.FuriousAssault.class)); - cards.add(new SetCardInfo("Game Preserve", 248, Rarity.RARE, mage.cards.g.GamePreserve.class)); - cards.add(new SetCardInfo("General's Regalia", 295, Rarity.RARE, mage.cards.g.GeneralsRegalia.class)); - cards.add(new SetCardInfo("Gerrard's Irregulars", 192, Rarity.COMMON, mage.cards.g.GerrardsIrregulars.class)); - cards.add(new SetCardInfo("Ghoul's Feast", 137, Rarity.UNCOMMON, mage.cards.g.GhoulsFeast.class)); - cards.add(new SetCardInfo("Giant Caterpillar", 249, Rarity.COMMON, mage.cards.g.GiantCaterpillar.class)); - cards.add(new SetCardInfo("Glowing Anemone", 81, Rarity.UNCOMMON, mage.cards.g.GlowingAnemone.class)); - cards.add(new SetCardInfo("Groundskeeper", 250, Rarity.UNCOMMON, mage.cards.g.Groundskeeper.class)); - cards.add(new SetCardInfo("Gush", 82, Rarity.COMMON, mage.cards.g.Gush.class)); - cards.add(new SetCardInfo("Hammer Mage", 193, Rarity.UNCOMMON, mage.cards.h.HammerMage.class)); - cards.add(new SetCardInfo("Haunted Crossroads", 138, Rarity.UNCOMMON, mage.cards.h.HauntedCrossroads.class)); - cards.add(new SetCardInfo("Heart of Ramos", 296, Rarity.RARE, mage.cards.h.HeartOfRamos.class)); - cards.add(new SetCardInfo("Henge Guardian", 297, Rarity.UNCOMMON, mage.cards.h.HengeGuardian.class)); - cards.add(new SetCardInfo("Henge of Ramos", 318, Rarity.UNCOMMON, mage.cards.h.HengeOfRamos.class)); - cards.add(new SetCardInfo("Hickory Woodlot", 319, Rarity.COMMON, mage.cards.h.HickoryWoodlot.class)); - cards.add(new SetCardInfo("High Market", 320, Rarity.RARE, mage.cards.h.HighMarket.class)); - cards.add(new SetCardInfo("High Seas", 83, Rarity.UNCOMMON, mage.cards.h.HighSeas.class)); - cards.add(new SetCardInfo("Highway Robber", 139, Rarity.COMMON, mage.cards.h.HighwayRobber.class)); - cards.add(new SetCardInfo("Hired Giant", 194, Rarity.UNCOMMON, mage.cards.h.HiredGiant.class)); - cards.add(new SetCardInfo("Honor the Fallen", 21, Rarity.RARE, mage.cards.h.HonorTheFallen.class)); - cards.add(new SetCardInfo("Hoodwink", 84, Rarity.COMMON, mage.cards.h.Hoodwink.class)); - cards.add(new SetCardInfo("Horned Troll", 251, Rarity.COMMON, mage.cards.h.HornedTroll.class)); - cards.add(new SetCardInfo("Horn of Plenty", 298, Rarity.RARE, mage.cards.h.HornOfPlenty.class)); - cards.add(new SetCardInfo("Horn of Ramos", 299, Rarity.RARE, mage.cards.h.HornOfRamos.class)); - cards.add(new SetCardInfo("Howling Wolf", 252, Rarity.COMMON, mage.cards.h.HowlingWolf.class)); - cards.add(new SetCardInfo("Hunted Wumpus", 253, Rarity.UNCOMMON, mage.cards.h.HuntedWumpus.class)); - cards.add(new SetCardInfo("Ignoble Soldier", 22, Rarity.UNCOMMON, mage.cards.i.IgnobleSoldier.class)); - cards.add(new SetCardInfo("Indentured Djinn", 85, Rarity.UNCOMMON, mage.cards.i.IndenturedDjinn.class)); - cards.add(new SetCardInfo("Instigator", 140, Rarity.RARE, mage.cards.i.Instigator.class)); - cards.add(new SetCardInfo("Intimidation", 142, Rarity.UNCOMMON, mage.cards.i.Intimidation.class)); - cards.add(new SetCardInfo("Invigorate", 254, Rarity.COMMON, mage.cards.i.Invigorate.class)); - cards.add(new SetCardInfo("Inviolability", 23, Rarity.COMMON, mage.cards.i.Inviolability.class)); - cards.add(new SetCardInfo("Iron Lance", 300, Rarity.UNCOMMON, mage.cards.i.IronLance.class)); - cards.add(new SetCardInfo("Island", 335, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 336, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 337, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 338, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ivory Mask", 24, Rarity.RARE, mage.cards.i.IvoryMask.class)); - cards.add(new SetCardInfo("Jeweled Torque", 301, Rarity.UNCOMMON, mage.cards.j.JeweledTorque.class)); - cards.add(new SetCardInfo("Jhovall Queen", 25, Rarity.RARE, mage.cards.j.JhovallQueen.class)); - cards.add(new SetCardInfo("Jhovall Rider", 26, Rarity.UNCOMMON, mage.cards.j.JhovallRider.class)); - cards.add(new SetCardInfo("Karn's Touch", 86, Rarity.RARE, mage.cards.k.KarnsTouch.class)); - cards.add(new SetCardInfo("Kris Mage", 195, Rarity.COMMON, mage.cards.k.KrisMage.class)); - cards.add(new SetCardInfo("Kyren Archive", 302, Rarity.RARE, mage.cards.k.KyrenArchive.class)); - cards.add(new SetCardInfo("Kyren Glider", 196, Rarity.COMMON, mage.cards.k.KyrenGlider.class)); - cards.add(new SetCardInfo("Kyren Legate", 197, Rarity.UNCOMMON, mage.cards.k.KyrenLegate.class)); - cards.add(new SetCardInfo("Kyren Negotiations", 198, Rarity.UNCOMMON, mage.cards.k.KyrenNegotiations.class)); - cards.add(new SetCardInfo("Kyren Sniper", 199, Rarity.COMMON, mage.cards.k.KyrenSniper.class)); - cards.add(new SetCardInfo("Kyren Toy", 303, Rarity.RARE, mage.cards.k.KyrenToy.class)); - cards.add(new SetCardInfo("Land Grant", 255, Rarity.COMMON, mage.cards.l.LandGrant.class)); - cards.add(new SetCardInfo("Larceny", 143, Rarity.UNCOMMON, mage.cards.l.Larceny.class)); - cards.add(new SetCardInfo("Last Breath", 27, Rarity.UNCOMMON, mage.cards.l.LastBreath.class)); - cards.add(new SetCardInfo("Lava Runner", 200, Rarity.RARE, mage.cards.l.LavaRunner.class)); - cards.add(new SetCardInfo("Liability", 144, Rarity.RARE, mage.cards.l.Liability.class)); - cards.add(new SetCardInfo("Lightning Hounds", 201, Rarity.COMMON, mage.cards.l.LightningHounds.class)); - cards.add(new SetCardInfo("Lithophage", 202, Rarity.RARE, mage.cards.l.Lithophage.class)); - cards.add(new SetCardInfo("Lumbering Satyr", 257, Rarity.UNCOMMON, mage.cards.l.LumberingSatyr.class)); - cards.add(new SetCardInfo("Lunge", 203, Rarity.COMMON, mage.cards.l.Lunge.class)); - cards.add(new SetCardInfo("Lure", 258, Rarity.UNCOMMON, mage.cards.l.Lure.class)); - cards.add(new SetCardInfo("Maggot Therapy", 145, Rarity.COMMON, mage.cards.m.MaggotTherapy.class)); - cards.add(new SetCardInfo("Magistrate's Scepter", 304, Rarity.RARE, mage.cards.m.MagistratesScepter.class)); - cards.add(new SetCardInfo("Magistrate's Veto", 204, Rarity.UNCOMMON, mage.cards.m.MagistratesVeto.class)); - cards.add(new SetCardInfo("Megatherium", 259, Rarity.RARE, mage.cards.m.Megatherium.class)); - cards.add(new SetCardInfo("Mercadia's Downfall", 205, Rarity.UNCOMMON, mage.cards.m.MercadiasDownfall.class)); - cards.add(new SetCardInfo("Mercadian Atlas", 305, Rarity.RARE, mage.cards.m.MercadianAtlas.class)); - cards.add(new SetCardInfo("Mercadian Bazaar", 321, Rarity.UNCOMMON, mage.cards.m.MercadianBazaar.class)); - cards.add(new SetCardInfo("Mercadian Lift", 306, Rarity.RARE, mage.cards.m.MercadianLift.class)); - cards.add(new SetCardInfo("Midnight Ritual", 146, Rarity.RARE, mage.cards.m.MidnightRitual.class)); - cards.add(new SetCardInfo("Misdirection", 87, Rarity.RARE, mage.cards.m.Misdirection.class)); - cards.add(new SetCardInfo("Misshapen Fiend", 147, Rarity.COMMON, mage.cards.m.MisshapenFiend.class)); - cards.add(new SetCardInfo("Misstep", 88, Rarity.COMMON, mage.cards.m.Misstep.class)); - cards.add(new SetCardInfo("Molting Harpy", 148, Rarity.UNCOMMON, mage.cards.m.MoltingHarpy.class)); - cards.add(new SetCardInfo("Moment of Silence", 28, Rarity.COMMON, mage.cards.m.MomentOfSilence.class)); - cards.add(new SetCardInfo("Monkey Cage", 307, Rarity.RARE, mage.cards.m.MonkeyCage.class)); - cards.add(new SetCardInfo("Moonlit Wake", 29, Rarity.UNCOMMON, mage.cards.m.MoonlitWake.class)); - cards.add(new SetCardInfo("Mountain", 343, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 344, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 345, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 346, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Muzzle", 30, Rarity.COMMON, mage.cards.m.Muzzle.class)); - cards.add(new SetCardInfo("Natural Affinity", 260, Rarity.RARE, mage.cards.n.NaturalAffinity.class)); - cards.add(new SetCardInfo("Nether Spirit", 149, Rarity.RARE, mage.cards.n.NetherSpirit.class)); - cards.add(new SetCardInfo("Nightwind Glider", 31, Rarity.COMMON, mage.cards.n.NightwindGlider.class)); - cards.add(new SetCardInfo("Noble Purpose", 32, Rarity.UNCOMMON, mage.cards.n.NoblePurpose.class)); - cards.add(new SetCardInfo("Notorious Assassin", 150, Rarity.RARE, mage.cards.n.NotoriousAssassin.class)); - cards.add(new SetCardInfo("Ogre Taskmaster", 206, Rarity.UNCOMMON, mage.cards.o.OgreTaskmaster.class)); - cards.add(new SetCardInfo("Orim's Cure", 33, Rarity.COMMON, mage.cards.o.OrimsCure.class)); - cards.add(new SetCardInfo("Overtaker", 89, Rarity.RARE, mage.cards.o.Overtaker.class)); - cards.add(new SetCardInfo("Panacea", 308, Rarity.UNCOMMON, mage.cards.p.Panacea.class)); - cards.add(new SetCardInfo("Pangosaur", 261, Rarity.RARE, mage.cards.p.Pangosaur.class)); - cards.add(new SetCardInfo("Peat Bog", 322, Rarity.COMMON, mage.cards.p.PeatBog.class)); - cards.add(new SetCardInfo("Pious Warrior", 34, Rarity.COMMON, mage.cards.p.PiousWarrior.class)); - cards.add(new SetCardInfo("Plains", 331, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 332, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 333, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 334, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Power Matrix", 309, Rarity.RARE, mage.cards.p.PowerMatrix.class)); - cards.add(new SetCardInfo("Primeval Shambler", 152, Rarity.UNCOMMON, mage.cards.p.PrimevalShambler.class)); - cards.add(new SetCardInfo("Puffer Extract", 310, Rarity.UNCOMMON, mage.cards.p.PufferExtract.class)); - cards.add(new SetCardInfo("Pulverize", 207, Rarity.RARE, mage.cards.p.Pulverize.class)); - cards.add(new SetCardInfo("Putrefaction", 153, Rarity.UNCOMMON, mage.cards.p.Putrefaction.class)); - cards.add(new SetCardInfo("Puppet's Verdict", 208, Rarity.RARE, mage.cards.p.PuppetsVerdict.class)); - cards.add(new SetCardInfo("Quagmire Lamprey", 154, Rarity.UNCOMMON, mage.cards.q.QuagmireLamprey.class)); - cards.add(new SetCardInfo("Rain of Tears", 155, Rarity.UNCOMMON, mage.cards.r.RainOfTears.class)); - cards.add(new SetCardInfo("Ramosian Captain", 35, Rarity.UNCOMMON, mage.cards.r.RamosianCaptain.class)); - cards.add(new SetCardInfo("Ramosian Commander", 36, Rarity.UNCOMMON, mage.cards.r.RamosianCommander.class)); - cards.add(new SetCardInfo("Ramosian Lieutenant", 37, Rarity.COMMON, mage.cards.r.RamosianLieutenant.class)); - cards.add(new SetCardInfo("Ramosian Rally", 38, Rarity.COMMON, mage.cards.r.RamosianRally.class)); - cards.add(new SetCardInfo("Ramosian Sergeant", 39, Rarity.COMMON, mage.cards.r.RamosianSergeant.class)); - cards.add(new SetCardInfo("Ramosian Sky Marshal", 40, Rarity.RARE, mage.cards.r.RamosianSkyMarshal.class)); - cards.add(new SetCardInfo("Rampart Crawler", 156, Rarity.COMMON, mage.cards.r.RampartCrawler.class)); - cards.add(new SetCardInfo("Rappelling Scouts", 41, Rarity.RARE, mage.cards.r.RappellingScouts.class)); - cards.add(new SetCardInfo("Remote Farm", 323, Rarity.COMMON, mage.cards.r.RemoteFarm.class)); - cards.add(new SetCardInfo("Renounce", 42, Rarity.UNCOMMON, mage.cards.r.Renounce.class)); - cards.add(new SetCardInfo("Revered Elder", 43, Rarity.COMMON, mage.cards.r.ReveredElder.class)); - cards.add(new SetCardInfo("Reverent Mantra", 44, Rarity.RARE, mage.cards.r.ReverentMantra.class)); - cards.add(new SetCardInfo("Revive", 262, Rarity.UNCOMMON, mage.cards.r.Revive.class)); - cards.add(new SetCardInfo("Righteous Aura", 45, Rarity.UNCOMMON, mage.cards.r.RighteousAura.class)); - cards.add(new SetCardInfo("Rishadan Airship", 91, Rarity.COMMON, mage.cards.r.RishadanAirship.class)); - cards.add(new SetCardInfo("Rishadan Brigand", 92, Rarity.RARE, mage.cards.r.RishadanBrigand.class)); - cards.add(new SetCardInfo("Rishadan Cutpurse", 93, Rarity.COMMON, mage.cards.r.RishadanCutpurse.class)); - cards.add(new SetCardInfo("Rishadan Footpad", 94, Rarity.UNCOMMON, mage.cards.r.RishadanFootpad.class)); - cards.add(new SetCardInfo("Rishadan Pawnshop", 311, Rarity.RARE, mage.cards.r.RishadanPawnshop.class)); - cards.add(new SetCardInfo("Rishadan Port", 324, Rarity.RARE, mage.cards.r.RishadanPort.class)); - cards.add(new SetCardInfo("Rock Badger", 210, Rarity.UNCOMMON, mage.cards.r.RockBadger.class)); - cards.add(new SetCardInfo("Rouse", 157, Rarity.COMMON, mage.cards.r.Rouse.class)); - cards.add(new SetCardInfo("Rushwood Dryad", 263, Rarity.COMMON, mage.cards.r.RushwoodDryad.class)); - cards.add(new SetCardInfo("Rushwood Elemental", 264, Rarity.RARE, mage.cards.r.RushwoodElemental.class)); - cards.add(new SetCardInfo("Rushwood Grove", 325, Rarity.UNCOMMON, mage.cards.r.RushwoodGrove.class)); - cards.add(new SetCardInfo("Rushwood Herbalist", 265, Rarity.COMMON, mage.cards.r.RushwoodHerbalist.class)); - cards.add(new SetCardInfo("Rushwood Legate", 266, Rarity.UNCOMMON, mage.cards.r.RushwoodLegate.class)); - cards.add(new SetCardInfo("Saber Ants", 267, Rarity.UNCOMMON, mage.cards.s.SaberAnts.class)); - cards.add(new SetCardInfo("Sacred Prey", 268, Rarity.COMMON, mage.cards.s.SacredPrey.class)); - cards.add(new SetCardInfo("Sailmonger", 95, Rarity.UNCOMMON, mage.cards.s.Sailmonger.class)); - cards.add(new SetCardInfo("Sand Squid", 96, Rarity.RARE, mage.cards.s.SandSquid.class)); - cards.add(new SetCardInfo("Sandstone Needle", 326, Rarity.COMMON, mage.cards.s.SandstoneNeedle.class)); - cards.add(new SetCardInfo("Saprazzan Bailiff", 97, Rarity.RARE, mage.cards.s.SaprazzanBailiff.class)); - cards.add(new SetCardInfo("Saprazzan Breaker", 98, Rarity.UNCOMMON, mage.cards.s.SaprazzanBreaker.class)); - cards.add(new SetCardInfo("Saprazzan Cove", 327, Rarity.UNCOMMON, mage.cards.s.SaprazzanCove.class)); - cards.add(new SetCardInfo("Saprazzan Heir", 99, Rarity.RARE, mage.cards.s.SaprazzanHeir.class)); - cards.add(new SetCardInfo("Saprazzan Legate", 100, Rarity.UNCOMMON, mage.cards.s.SaprazzanLegate.class)); - cards.add(new SetCardInfo("Saprazzan Outrigger", 101, Rarity.COMMON, mage.cards.s.SaprazzanOutrigger.class)); - cards.add(new SetCardInfo("Saprazzan Raider", 102, Rarity.COMMON, mage.cards.s.SaprazzanRaider.class)); - cards.add(new SetCardInfo("Saprazzan Skerry", 328, Rarity.COMMON, mage.cards.s.SaprazzanSkerry.class)); - cards.add(new SetCardInfo("Scandalmonger", 158, Rarity.UNCOMMON, mage.cards.s.Scandalmonger.class)); - cards.add(new SetCardInfo("Security Detail", 47, Rarity.RARE, mage.cards.s.SecurityDetail.class)); - cards.add(new SetCardInfo("Seismic Mage", 211, Rarity.RARE, mage.cards.s.SeismicMage.class)); - cards.add(new SetCardInfo("Sever Soul", 159, Rarity.COMMON, mage.cards.s.SeverSoul.class)); - cards.add(new SetCardInfo("Shock Troops", 212, Rarity.COMMON, mage.cards.s.ShockTroops.class)); - cards.add(new SetCardInfo("Shoving Match", 103, Rarity.UNCOMMON, mage.cards.s.ShovingMatch.class)); - cards.add(new SetCardInfo("Silent Assassin", 160, Rarity.RARE, mage.cards.s.SilentAssassin.class)); - cards.add(new SetCardInfo("Silverglade Elemental", 269, Rarity.COMMON, mage.cards.s.SilvergladeElemental.class)); - cards.add(new SetCardInfo("Silverglade Pathfinder", 270, Rarity.UNCOMMON, mage.cards.s.SilvergladePathfinder.class)); - cards.add(new SetCardInfo("Sizzle", 213, Rarity.COMMON, mage.cards.s.Sizzle.class)); - cards.add(new SetCardInfo("Skulking Fugitive", 161, Rarity.COMMON, mage.cards.s.SkulkingFugitive.class)); - cards.add(new SetCardInfo("Skull of Ramos", 312, Rarity.RARE, mage.cards.s.SkullOfRamos.class)); - cards.add(new SetCardInfo("Snake Pit", 271, Rarity.UNCOMMON, mage.cards.s.SnakePit.class)); - cards.add(new SetCardInfo("Snorting Gahr", 272, Rarity.COMMON, mage.cards.s.SnortingGahr.class)); - cards.add(new SetCardInfo("Snuff Out", 162, Rarity.COMMON, mage.cards.s.SnuffOut.class)); - cards.add(new SetCardInfo("Soothing Balm", 48, Rarity.COMMON, mage.cards.s.SoothingBalm.class)); - cards.add(new SetCardInfo("Soothsaying", 104, Rarity.UNCOMMON, mage.cards.s.Soothsaying.class)); - cards.add(new SetCardInfo("Soul Channeling", 163, Rarity.COMMON, mage.cards.s.SoulChanneling.class)); - cards.add(new SetCardInfo("Specter's Wail", 164, Rarity.COMMON, mage.cards.s.SpectersWail.class)); - cards.add(new SetCardInfo("Spidersilk Armor", 273, Rarity.COMMON, mage.cards.s.SpidersilkArmor.class)); - cards.add(new SetCardInfo("Spiritual Focus", 49, Rarity.RARE, mage.cards.s.SpiritualFocus.class)); - cards.add(new SetCardInfo("Spontaneous Generation", 274, Rarity.RARE, mage.cards.s.SpontaneousGeneration.class)); - cards.add(new SetCardInfo("Squall", 275, Rarity.COMMON, mage.cards.s.Squall.class)); - cards.add(new SetCardInfo("Squallmonger", 276, Rarity.UNCOMMON, mage.cards.s.Squallmonger.class)); - cards.add(new SetCardInfo("Squee, Goblin Nabob", 214, Rarity.RARE, mage.cards.s.SqueeGoblinNabob.class)); - cards.add(new SetCardInfo("Squeeze", 105, Rarity.RARE, mage.cards.s.Squeeze.class)); - cards.add(new SetCardInfo("Stamina", 277, Rarity.UNCOMMON, mage.cards.s.Stamina.class)); - cards.add(new SetCardInfo("Statecraft", 106, Rarity.RARE, mage.cards.s.Statecraft.class)); - cards.add(new SetCardInfo("Steadfast Guard", 50, Rarity.COMMON, mage.cards.s.SteadfastGuard.class)); - cards.add(new SetCardInfo("Stinging Barrier", 107, Rarity.COMMON, mage.cards.s.StingingBarrier.class)); - cards.add(new SetCardInfo("Stone Rain", 215, Rarity.COMMON, mage.cards.s.StoneRain.class)); - cards.add(new SetCardInfo("Story Circle", 51, Rarity.UNCOMMON, mage.cards.s.StoryCircle.class)); - cards.add(new SetCardInfo("Strongarm Thug", 165, Rarity.UNCOMMON, mage.cards.s.StrongarmThug.class)); - cards.add(new SetCardInfo("Subterranean Hangar", 329, Rarity.UNCOMMON, mage.cards.s.SubterraneanHangar.class)); - cards.add(new SetCardInfo("Sustenance", 278, Rarity.UNCOMMON, mage.cards.s.Sustenance.class)); - cards.add(new SetCardInfo("Swamp", 339, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 340, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 341, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 342, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Task Force", 52, Rarity.COMMON, mage.cards.t.TaskForce.class)); - cards.add(new SetCardInfo("Tectonic Break", 216, Rarity.RARE, mage.cards.t.TectonicBreak.class)); - cards.add(new SetCardInfo("Territorial Dispute", 217, Rarity.RARE, mage.cards.t.TerritorialDispute.class)); - cards.add(new SetCardInfo("Thermal Glider", 53, Rarity.COMMON, mage.cards.t.ThermalGlider.class)); - cards.add(new SetCardInfo("Thieves' Auction", 218, Rarity.RARE, mage.cards.t.ThievesAuction.class)); - cards.add(new SetCardInfo("Thrashing Wumpus", 166, Rarity.RARE, mage.cards.t.ThrashingWumpus.class)); - cards.add(new SetCardInfo("Thunderclap", 219, Rarity.COMMON, mage.cards.t.Thunderclap.class)); - cards.add(new SetCardInfo("Thwart", 108, Rarity.UNCOMMON, mage.cards.t.Thwart.class)); - cards.add(new SetCardInfo("Tidal Bore", 109, Rarity.COMMON, mage.cards.t.TidalBore.class)); - cards.add(new SetCardInfo("Tidal Kraken", 110, Rarity.RARE, mage.cards.t.TidalKraken.class)); - cards.add(new SetCardInfo("Tiger Claws", 279, Rarity.COMMON, mage.cards.t.TigerClaws.class)); - cards.add(new SetCardInfo("Timid Drake", 111, Rarity.UNCOMMON, mage.cards.t.TimidDrake.class)); - cards.add(new SetCardInfo("Tonic Peddler", 54, Rarity.UNCOMMON, mage.cards.t.TonicPeddler.class)); - cards.add(new SetCardInfo("Tooth of Ramos", 313, Rarity.RARE, mage.cards.t.ToothOfRamos.class)); - cards.add(new SetCardInfo("Tower of the Magistrate", 330, Rarity.RARE, mage.cards.t.TowerOfTheMagistrate.class)); - cards.add(new SetCardInfo("Toymaker", 314, Rarity.UNCOMMON, mage.cards.t.Toymaker.class)); - cards.add(new SetCardInfo("Trade Routes", 112, Rarity.RARE, mage.cards.t.TradeRoutes.class)); - cards.add(new SetCardInfo("Tranquility", 280, Rarity.COMMON, mage.cards.t.Tranquility.class)); - cards.add(new SetCardInfo("Trap Runner", 55, Rarity.UNCOMMON, mage.cards.t.TrapRunner.class)); - cards.add(new SetCardInfo("Tremor", 220, Rarity.COMMON, mage.cards.t.Tremor.class)); - cards.add(new SetCardInfo("Two-Headed Dragon", 221, Rarity.RARE, mage.cards.t.TwoHeadedDragon.class)); - cards.add(new SetCardInfo("Undertaker", 167, Rarity.COMMON, mage.cards.u.Undertaker.class)); - cards.add(new SetCardInfo("Unmask", 168, Rarity.RARE, mage.cards.u.Unmask.class)); - cards.add(new SetCardInfo("Uphill Battle", 222, Rarity.UNCOMMON, mage.cards.u.UphillBattle.class)); - cards.add(new SetCardInfo("Vendetta", 170, Rarity.COMMON, mage.cards.v.Vendetta.class)); - cards.add(new SetCardInfo("Venomous Breath", 281, Rarity.UNCOMMON, mage.cards.v.VenomousBreath.class)); - cards.add(new SetCardInfo("Venomous Dragonfly", 282, Rarity.COMMON, mage.cards.v.VenomousDragonfly.class)); - cards.add(new SetCardInfo("Vernal Equinox", 283, Rarity.RARE, mage.cards.v.VernalEquinox.class)); - cards.add(new SetCardInfo("Vine Dryad", 284, Rarity.RARE, mage.cards.v.VineDryad.class)); - cards.add(new SetCardInfo("Vine Trellis", 285, Rarity.COMMON, mage.cards.v.VineTrellis.class)); - cards.add(new SetCardInfo("Volcanic Wind", 223, Rarity.UNCOMMON, mage.cards.v.VolcanicWind.class)); - cards.add(new SetCardInfo("Wall of Distortion", 171, Rarity.COMMON, mage.cards.w.WallOfDistortion.class)); - cards.add(new SetCardInfo("War Cadence", 224, Rarity.UNCOMMON, mage.cards.w.WarCadence.class)); - cards.add(new SetCardInfo("War Tax", 113, Rarity.UNCOMMON, mage.cards.w.WarTax.class)); - cards.add(new SetCardInfo("Warmonger", 225, Rarity.UNCOMMON, mage.cards.w.Warmonger.class)); - cards.add(new SetCardInfo("Warpath", 226, Rarity.UNCOMMON, mage.cards.w.Warpath.class)); - cards.add(new SetCardInfo("Waterfront Bouncer", 114, Rarity.COMMON, mage.cards.w.WaterfrontBouncer.class)); - cards.add(new SetCardInfo("Wave of Reckoning", 56, Rarity.RARE, mage.cards.w.WaveOfReckoning.class)); - cards.add(new SetCardInfo("Wild Jhovall", 227, Rarity.COMMON, mage.cards.w.WildJhovall.class)); - cards.add(new SetCardInfo("Wishmonger", 57, Rarity.UNCOMMON, mage.cards.w.Wishmonger.class)); - cards.add(new SetCardInfo("Word of Blasting", 228, Rarity.UNCOMMON, mage.cards.w.WordOfBlasting.class)); - cards.add(new SetCardInfo("Worry Beads", 315, Rarity.RARE, mage.cards.w.WorryBeads.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author North + */ +public final class MercadianMasques extends ExpansionSet { + + private static final MercadianMasques instance = new MercadianMasques(); + + public static MercadianMasques getInstance() { + return instance; + } + + private MercadianMasques() { + super("Mercadian Masques", "MMQ", ExpansionSet.buildDate(1999, 8, 25), SetType.EXPANSION); + this.blockName = "Masques"; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Aerial Caravan", 58, Rarity.RARE, mage.cards.a.AerialCaravan.class)); + cards.add(new SetCardInfo("Afterlife", 1, Rarity.UNCOMMON, mage.cards.a.Afterlife.class)); + cards.add(new SetCardInfo("Alabaster Wall", 2, Rarity.COMMON, mage.cards.a.AlabasterWall.class)); + cards.add(new SetCardInfo("Alley Grifters", 115, Rarity.COMMON, mage.cards.a.AlleyGrifters.class)); + cards.add(new SetCardInfo("Ancestral Mask", 229, Rarity.COMMON, mage.cards.a.AncestralMask.class)); + cards.add(new SetCardInfo("Armistice", 3, Rarity.RARE, mage.cards.a.Armistice.class)); + cards.add(new SetCardInfo("Arms Dealer", 172, Rarity.UNCOMMON, mage.cards.a.ArmsDealer.class)); + cards.add(new SetCardInfo("Arrest", 4, Rarity.UNCOMMON, mage.cards.a.Arrest.class)); + cards.add(new SetCardInfo("Assembly Hall", 286, Rarity.RARE, mage.cards.a.AssemblyHall.class)); + cards.add(new SetCardInfo("Ballista Squad", 5, Rarity.UNCOMMON, mage.cards.b.BallistaSquad.class)); + cards.add(new SetCardInfo("Balloon Peddler", 59, Rarity.COMMON, mage.cards.b.BalloonPeddler.class)); + cards.add(new SetCardInfo("Barbed Wire", 287, Rarity.UNCOMMON, mage.cards.b.BarbedWire.class)); + cards.add(new SetCardInfo("Battle Rampart", 173, Rarity.COMMON, mage.cards.b.BattleRampart.class)); + cards.add(new SetCardInfo("Battle Squadron", 174, Rarity.RARE, mage.cards.b.BattleSquadron.class)); + cards.add(new SetCardInfo("Bifurcate", 230, Rarity.RARE, mage.cards.b.Bifurcate.class)); + cards.add(new SetCardInfo("Black Market", 116, Rarity.RARE, mage.cards.b.BlackMarket.class)); + cards.add(new SetCardInfo("Blaster Mage", 175, Rarity.COMMON, mage.cards.b.BlasterMage.class)); + cards.add(new SetCardInfo("Blockade Runner", 60, Rarity.COMMON, mage.cards.b.BlockadeRunner.class)); + cards.add(new SetCardInfo("Blood Hound", 176, Rarity.RARE, mage.cards.b.BloodHound.class)); + cards.add(new SetCardInfo("Blood Oath", 177, Rarity.RARE, mage.cards.b.BloodOath.class)); + cards.add(new SetCardInfo("Boa Constrictor", 231, Rarity.UNCOMMON, mage.cards.b.BoaConstrictor.class)); + cards.add(new SetCardInfo("Bog Smugglers", 117, Rarity.COMMON, mage.cards.b.BogSmugglers.class)); + cards.add(new SetCardInfo("Bog Witch", 118, Rarity.COMMON, mage.cards.b.BogWitch.class)); + cards.add(new SetCardInfo("Brainstorm", 61, Rarity.COMMON, mage.cards.b.Brainstorm.class)); + cards.add(new SetCardInfo("Brawl", 178, Rarity.RARE, mage.cards.b.Brawl.class)); + cards.add(new SetCardInfo("Briar Patch", 232, Rarity.UNCOMMON, mage.cards.b.BriarPatch.class)); + cards.add(new SetCardInfo("Bribery", 62, Rarity.RARE, mage.cards.b.Bribery.class)); + cards.add(new SetCardInfo("Buoyancy", 63, Rarity.COMMON, mage.cards.b.Buoyancy.class)); + cards.add(new SetCardInfo("Cackling Witch", 119, Rarity.UNCOMMON, mage.cards.c.CacklingWitch.class)); + cards.add(new SetCardInfo("Caller of the Hunt", 233, Rarity.RARE, mage.cards.c.CallerOfTheHunt.class)); + cards.add(new SetCardInfo("Cateran Brute", 120, Rarity.COMMON, mage.cards.c.CateranBrute.class)); + cards.add(new SetCardInfo("Cateran Enforcer", 121, Rarity.UNCOMMON, mage.cards.c.CateranEnforcer.class)); + cards.add(new SetCardInfo("Cateran Kidnappers", 122, Rarity.UNCOMMON, mage.cards.c.CateranKidnappers.class)); + cards.add(new SetCardInfo("Cateran Overlord", 123, Rarity.RARE, mage.cards.c.CateranOverlord.class)); + cards.add(new SetCardInfo("Cateran Persuader", 124, Rarity.COMMON, mage.cards.c.CateranPersuader.class)); + cards.add(new SetCardInfo("Cateran Slaver", 125, Rarity.RARE, mage.cards.c.CateranSlaver.class)); + cards.add(new SetCardInfo("Cateran Summons", 126, Rarity.UNCOMMON, mage.cards.c.CateranSummons.class)); + cards.add(new SetCardInfo("Caustic Wasps", 234, Rarity.UNCOMMON, mage.cards.c.CausticWasps.class)); + cards.add(new SetCardInfo("Cave-In", 180, Rarity.RARE, mage.cards.c.CaveIn.class)); + cards.add(new SetCardInfo("Cavern Crawler", 181, Rarity.COMMON, mage.cards.c.CavernCrawler.class)); + cards.add(new SetCardInfo("Cave Sense", 179, Rarity.COMMON, mage.cards.c.CaveSense.class)); + cards.add(new SetCardInfo("Ceremonial Guard", 182, Rarity.COMMON, mage.cards.c.CeremonialGuard.class)); + cards.add(new SetCardInfo("Chambered Nautilus", 64, Rarity.UNCOMMON, mage.cards.c.ChamberedNautilus.class)); + cards.add(new SetCardInfo("Charisma", 66, Rarity.RARE, mage.cards.c.Charisma.class)); + cards.add(new SetCardInfo("Charm Peddler", 6, Rarity.COMMON, mage.cards.c.CharmPeddler.class)); + cards.add(new SetCardInfo("Charmed Griffin", 7, Rarity.UNCOMMON, mage.cards.c.CharmedGriffin.class)); + cards.add(new SetCardInfo("Cho-Arrim Alchemist", 8, Rarity.RARE, mage.cards.c.ChoArrimAlchemist.class)); + cards.add(new SetCardInfo("Cho-Arrim Bruiser", 9, Rarity.RARE, mage.cards.c.ChoArrimBruiser.class)); + cards.add(new SetCardInfo("Cho-Arrim Legate", 10, Rarity.UNCOMMON, mage.cards.c.ChoArrimLegate.class)); + cards.add(new SetCardInfo("Cho-Manno, Revolutionary", 11, Rarity.RARE, mage.cards.c.ChoMannoRevolutionary.class)); + cards.add(new SetCardInfo("Cho-Manno's Blessing", 12, Rarity.COMMON, mage.cards.c.ChoMannosBlessing.class)); + cards.add(new SetCardInfo("Cinder Elemental", 183, Rarity.UNCOMMON, mage.cards.c.CinderElemental.class)); + cards.add(new SetCardInfo("Clear the Land", 235, Rarity.RARE, mage.cards.c.ClearTheLand.class)); + cards.add(new SetCardInfo("Close Quarters", 184, Rarity.UNCOMMON, mage.cards.c.CloseQuarters.class)); + cards.add(new SetCardInfo("Cloud Sprite", 67, Rarity.COMMON, mage.cards.c.CloudSprite.class)); + cards.add(new SetCardInfo("Coastal Piracy", 68, Rarity.UNCOMMON, mage.cards.c.CoastalPiracy.class)); + cards.add(new SetCardInfo("Collective Unconscious", 236, Rarity.RARE, mage.cards.c.CollectiveUnconscious.class)); + cards.add(new SetCardInfo("Common Cause", 13, Rarity.RARE, mage.cards.c.CommonCause.class)); + cards.add(new SetCardInfo("Conspiracy", 127, Rarity.RARE, mage.cards.c.Conspiracy.class)); + cards.add(new SetCardInfo("Corrupt Official", 128, Rarity.RARE, mage.cards.c.CorruptOfficial.class)); + cards.add(new SetCardInfo("Counterspell", 69, Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Cowardice", 70, Rarity.RARE, mage.cards.c.Cowardice.class)); + cards.add(new SetCardInfo("Crackdown", 15, Rarity.RARE, mage.cards.c.Crackdown.class)); + cards.add(new SetCardInfo("Crag Saurian", 185, Rarity.RARE, mage.cards.c.CragSaurian.class)); + cards.add(new SetCardInfo("Crash", 186, Rarity.COMMON, mage.cards.c.Crash.class)); + cards.add(new SetCardInfo("Credit Voucher", 289, Rarity.UNCOMMON, mage.cards.c.CreditVoucher.class)); + cards.add(new SetCardInfo("Crenellated Wall", 290, Rarity.UNCOMMON, mage.cards.c.CrenellatedWall.class)); + cards.add(new SetCardInfo("Crooked Scales", 291, Rarity.RARE, mage.cards.c.CrookedScales.class)); + cards.add(new SetCardInfo("Crossbow Infantry", 16, Rarity.COMMON, mage.cards.c.CrossbowInfantry.class)); + cards.add(new SetCardInfo("Crumbling Sanctuary", 292, Rarity.RARE, mage.cards.c.CrumblingSanctuary.class)); + cards.add(new SetCardInfo("Customs Depot", 71, Rarity.UNCOMMON, mage.cards.c.CustomsDepot.class)); + cards.add(new SetCardInfo("Dark Ritual", 129, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Darting Merfolk", 72, Rarity.COMMON, mage.cards.d.DartingMerfolk.class)); + cards.add(new SetCardInfo("Dawnstrider", 237, Rarity.RARE, mage.cards.d.Dawnstrider.class)); + cards.add(new SetCardInfo("Deadly Insect", 238, Rarity.COMMON, mage.cards.d.DeadlyInsect.class)); + cards.add(new SetCardInfo("Deathgazer", 130, Rarity.UNCOMMON, mage.cards.d.Deathgazer.class)); + cards.add(new SetCardInfo("Deepwood Drummer", 239, Rarity.COMMON, mage.cards.d.DeepwoodDrummer.class)); + cards.add(new SetCardInfo("Deepwood Elder", 240, Rarity.RARE, mage.cards.d.DeepwoodElder.class)); + cards.add(new SetCardInfo("Deepwood Ghoul", 131, Rarity.COMMON, mage.cards.d.DeepwoodGhoul.class)); + cards.add(new SetCardInfo("Deepwood Legate", 132, Rarity.UNCOMMON, mage.cards.d.DeepwoodLegate.class)); + cards.add(new SetCardInfo("Deepwood Tantiv", 241, Rarity.UNCOMMON, mage.cards.d.DeepwoodTantiv.class)); + cards.add(new SetCardInfo("Deepwood Wolverine", 242, Rarity.COMMON, mage.cards.d.DeepwoodWolverine.class)); + cards.add(new SetCardInfo("Dehydration", 73, Rarity.COMMON, mage.cards.d.Dehydration.class)); + cards.add(new SetCardInfo("Delraich", 133, Rarity.RARE, mage.cards.d.Delraich.class)); + cards.add(new SetCardInfo("Desert Twister", 243, Rarity.UNCOMMON, mage.cards.d.DesertTwister.class)); + cards.add(new SetCardInfo("Devout Witness", 17, Rarity.COMMON, mage.cards.d.DevoutWitness.class)); + cards.add(new SetCardInfo("Diplomatic Escort", 74, Rarity.UNCOMMON, mage.cards.d.DiplomaticEscort.class)); + cards.add(new SetCardInfo("Diplomatic Immunity", 75, Rarity.COMMON, mage.cards.d.DiplomaticImmunity.class)); + cards.add(new SetCardInfo("Disenchant", 18, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Distorting Lens", 293, Rarity.RARE, mage.cards.d.DistortingLens.class)); + cards.add(new SetCardInfo("Drake Hatchling", 76, Rarity.COMMON, mage.cards.d.DrakeHatchling.class)); + cards.add(new SetCardInfo("Dust Bowl", 316, Rarity.RARE, mage.cards.d.DustBowl.class)); + cards.add(new SetCardInfo("Embargo", 77, Rarity.RARE, mage.cards.e.Embargo.class)); + cards.add(new SetCardInfo("Energy Flux", 78, Rarity.UNCOMMON, mage.cards.e.EnergyFlux.class)); + cards.add(new SetCardInfo("Enslaved Horror", 134, Rarity.UNCOMMON, mage.cards.e.EnslavedHorror.class)); + cards.add(new SetCardInfo("Extortion", 135, Rarity.RARE, mage.cards.e.Extortion.class)); + cards.add(new SetCardInfo("Extravagant Spirit", 79, Rarity.RARE, mage.cards.e.ExtravagantSpirit.class)); + cards.add(new SetCardInfo("Eye of Ramos", 294, Rarity.RARE, mage.cards.e.EyeOfRamos.class)); + cards.add(new SetCardInfo("False Demise", 80, Rarity.UNCOMMON, mage.cards.f.FalseDemise.class)); + cards.add(new SetCardInfo("Ferocity", 245, Rarity.COMMON, mage.cards.f.Ferocity.class)); + cards.add(new SetCardInfo("Flailing Manticore", 187, Rarity.RARE, mage.cards.f.FlailingManticore.class)); + cards.add(new SetCardInfo("Flailing Ogre", 188, Rarity.UNCOMMON, mage.cards.f.FlailingOgre.class)); + cards.add(new SetCardInfo("Flailing Soldier", 189, Rarity.COMMON, mage.cards.f.FlailingSoldier.class)); + cards.add(new SetCardInfo("Flaming Sword", 190, Rarity.COMMON, mage.cards.f.FlamingSword.class)); + cards.add(new SetCardInfo("Food Chain", 246, Rarity.RARE, mage.cards.f.FoodChain.class)); + cards.add(new SetCardInfo("Forced March", 136, Rarity.RARE, mage.cards.f.ForcedMarch.class)); + cards.add(new SetCardInfo("Forest", 347, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 348, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 349, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 350, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Foster", 247, Rarity.RARE, mage.cards.f.Foster.class)); + cards.add(new SetCardInfo("Fountain of Cho", 317, Rarity.UNCOMMON, mage.cards.f.FountainOfCho.class)); + cards.add(new SetCardInfo("Fountain Watch", 19, Rarity.RARE, mage.cards.f.FountainWatch.class)); + cards.add(new SetCardInfo("Fresh Volunteers", 20, Rarity.COMMON, mage.cards.f.FreshVolunteers.class)); + cards.add(new SetCardInfo("Furious Assault", 191, Rarity.COMMON, mage.cards.f.FuriousAssault.class)); + cards.add(new SetCardInfo("Game Preserve", 248, Rarity.RARE, mage.cards.g.GamePreserve.class)); + cards.add(new SetCardInfo("General's Regalia", 295, Rarity.RARE, mage.cards.g.GeneralsRegalia.class)); + cards.add(new SetCardInfo("Gerrard's Irregulars", 192, Rarity.COMMON, mage.cards.g.GerrardsIrregulars.class)); + cards.add(new SetCardInfo("Ghoul's Feast", 137, Rarity.UNCOMMON, mage.cards.g.GhoulsFeast.class)); + cards.add(new SetCardInfo("Giant Caterpillar", 249, Rarity.COMMON, mage.cards.g.GiantCaterpillar.class)); + cards.add(new SetCardInfo("Glowing Anemone", 81, Rarity.UNCOMMON, mage.cards.g.GlowingAnemone.class)); + cards.add(new SetCardInfo("Groundskeeper", 250, Rarity.UNCOMMON, mage.cards.g.Groundskeeper.class)); + cards.add(new SetCardInfo("Gush", 82, Rarity.COMMON, mage.cards.g.Gush.class)); + cards.add(new SetCardInfo("Hammer Mage", 193, Rarity.UNCOMMON, mage.cards.h.HammerMage.class)); + cards.add(new SetCardInfo("Haunted Crossroads", 138, Rarity.UNCOMMON, mage.cards.h.HauntedCrossroads.class)); + cards.add(new SetCardInfo("Heart of Ramos", 296, Rarity.RARE, mage.cards.h.HeartOfRamos.class)); + cards.add(new SetCardInfo("Henge Guardian", 297, Rarity.UNCOMMON, mage.cards.h.HengeGuardian.class)); + cards.add(new SetCardInfo("Henge of Ramos", 318, Rarity.UNCOMMON, mage.cards.h.HengeOfRamos.class)); + cards.add(new SetCardInfo("Hickory Woodlot", 319, Rarity.COMMON, mage.cards.h.HickoryWoodlot.class)); + cards.add(new SetCardInfo("High Market", 320, Rarity.RARE, mage.cards.h.HighMarket.class)); + cards.add(new SetCardInfo("High Seas", 83, Rarity.UNCOMMON, mage.cards.h.HighSeas.class)); + cards.add(new SetCardInfo("Highway Robber", 139, Rarity.COMMON, mage.cards.h.HighwayRobber.class)); + cards.add(new SetCardInfo("Hired Giant", 194, Rarity.UNCOMMON, mage.cards.h.HiredGiant.class)); + cards.add(new SetCardInfo("Honor the Fallen", 21, Rarity.RARE, mage.cards.h.HonorTheFallen.class)); + cards.add(new SetCardInfo("Hoodwink", 84, Rarity.COMMON, mage.cards.h.Hoodwink.class)); + cards.add(new SetCardInfo("Horned Troll", 251, Rarity.COMMON, mage.cards.h.HornedTroll.class)); + cards.add(new SetCardInfo("Horn of Plenty", 298, Rarity.RARE, mage.cards.h.HornOfPlenty.class)); + cards.add(new SetCardInfo("Horn of Ramos", 299, Rarity.RARE, mage.cards.h.HornOfRamos.class)); + cards.add(new SetCardInfo("Howling Wolf", 252, Rarity.COMMON, mage.cards.h.HowlingWolf.class)); + cards.add(new SetCardInfo("Hunted Wumpus", 253, Rarity.UNCOMMON, mage.cards.h.HuntedWumpus.class)); + cards.add(new SetCardInfo("Ignoble Soldier", 22, Rarity.UNCOMMON, mage.cards.i.IgnobleSoldier.class)); + cards.add(new SetCardInfo("Indentured Djinn", 85, Rarity.UNCOMMON, mage.cards.i.IndenturedDjinn.class)); + cards.add(new SetCardInfo("Instigator", 140, Rarity.RARE, mage.cards.i.Instigator.class)); + cards.add(new SetCardInfo("Intimidation", 142, Rarity.UNCOMMON, mage.cards.i.Intimidation.class)); + cards.add(new SetCardInfo("Invigorate", 254, Rarity.COMMON, mage.cards.i.Invigorate.class)); + cards.add(new SetCardInfo("Inviolability", 23, Rarity.COMMON, mage.cards.i.Inviolability.class)); + cards.add(new SetCardInfo("Iron Lance", 300, Rarity.UNCOMMON, mage.cards.i.IronLance.class)); + cards.add(new SetCardInfo("Island", 335, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 336, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 337, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 338, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Mask", 24, Rarity.RARE, mage.cards.i.IvoryMask.class)); + cards.add(new SetCardInfo("Jeweled Torque", 301, Rarity.UNCOMMON, mage.cards.j.JeweledTorque.class)); + cards.add(new SetCardInfo("Jhovall Queen", 25, Rarity.RARE, mage.cards.j.JhovallQueen.class)); + cards.add(new SetCardInfo("Jhovall Rider", 26, Rarity.UNCOMMON, mage.cards.j.JhovallRider.class)); + cards.add(new SetCardInfo("Karn's Touch", 86, Rarity.RARE, mage.cards.k.KarnsTouch.class)); + cards.add(new SetCardInfo("Kris Mage", 195, Rarity.COMMON, mage.cards.k.KrisMage.class)); + cards.add(new SetCardInfo("Kyren Archive", 302, Rarity.RARE, mage.cards.k.KyrenArchive.class)); + cards.add(new SetCardInfo("Kyren Glider", 196, Rarity.COMMON, mage.cards.k.KyrenGlider.class)); + cards.add(new SetCardInfo("Kyren Legate", 197, Rarity.UNCOMMON, mage.cards.k.KyrenLegate.class)); + cards.add(new SetCardInfo("Kyren Negotiations", 198, Rarity.UNCOMMON, mage.cards.k.KyrenNegotiations.class)); + cards.add(new SetCardInfo("Kyren Sniper", 199, Rarity.COMMON, mage.cards.k.KyrenSniper.class)); + cards.add(new SetCardInfo("Kyren Toy", 303, Rarity.RARE, mage.cards.k.KyrenToy.class)); + cards.add(new SetCardInfo("Land Grant", 255, Rarity.COMMON, mage.cards.l.LandGrant.class)); + cards.add(new SetCardInfo("Larceny", 143, Rarity.UNCOMMON, mage.cards.l.Larceny.class)); + cards.add(new SetCardInfo("Last Breath", 27, Rarity.UNCOMMON, mage.cards.l.LastBreath.class)); + cards.add(new SetCardInfo("Lava Runner", 200, Rarity.RARE, mage.cards.l.LavaRunner.class)); + cards.add(new SetCardInfo("Liability", 144, Rarity.RARE, mage.cards.l.Liability.class)); + cards.add(new SetCardInfo("Lightning Hounds", 201, Rarity.COMMON, mage.cards.l.LightningHounds.class)); + cards.add(new SetCardInfo("Lithophage", 202, Rarity.RARE, mage.cards.l.Lithophage.class)); + cards.add(new SetCardInfo("Lumbering Satyr", 257, Rarity.UNCOMMON, mage.cards.l.LumberingSatyr.class)); + cards.add(new SetCardInfo("Lunge", 203, Rarity.COMMON, mage.cards.l.Lunge.class)); + cards.add(new SetCardInfo("Lure", 258, Rarity.UNCOMMON, mage.cards.l.Lure.class)); + cards.add(new SetCardInfo("Maggot Therapy", 145, Rarity.COMMON, mage.cards.m.MaggotTherapy.class)); + cards.add(new SetCardInfo("Magistrate's Scepter", 304, Rarity.RARE, mage.cards.m.MagistratesScepter.class)); + cards.add(new SetCardInfo("Magistrate's Veto", 204, Rarity.UNCOMMON, mage.cards.m.MagistratesVeto.class)); + cards.add(new SetCardInfo("Megatherium", 259, Rarity.RARE, mage.cards.m.Megatherium.class)); + cards.add(new SetCardInfo("Mercadia's Downfall", 205, Rarity.UNCOMMON, mage.cards.m.MercadiasDownfall.class)); + cards.add(new SetCardInfo("Mercadian Atlas", 305, Rarity.RARE, mage.cards.m.MercadianAtlas.class)); + cards.add(new SetCardInfo("Mercadian Bazaar", 321, Rarity.UNCOMMON, mage.cards.m.MercadianBazaar.class)); + cards.add(new SetCardInfo("Mercadian Lift", 306, Rarity.RARE, mage.cards.m.MercadianLift.class)); + cards.add(new SetCardInfo("Midnight Ritual", 146, Rarity.RARE, mage.cards.m.MidnightRitual.class)); + cards.add(new SetCardInfo("Misdirection", 87, Rarity.RARE, mage.cards.m.Misdirection.class)); + cards.add(new SetCardInfo("Misshapen Fiend", 147, Rarity.COMMON, mage.cards.m.MisshapenFiend.class)); + cards.add(new SetCardInfo("Misstep", 88, Rarity.COMMON, mage.cards.m.Misstep.class)); + cards.add(new SetCardInfo("Molting Harpy", 148, Rarity.UNCOMMON, mage.cards.m.MoltingHarpy.class)); + cards.add(new SetCardInfo("Moment of Silence", 28, Rarity.COMMON, mage.cards.m.MomentOfSilence.class)); + cards.add(new SetCardInfo("Monkey Cage", 307, Rarity.RARE, mage.cards.m.MonkeyCage.class)); + cards.add(new SetCardInfo("Moonlit Wake", 29, Rarity.UNCOMMON, mage.cards.m.MoonlitWake.class)); + cards.add(new SetCardInfo("Mountain", 343, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 344, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 345, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 346, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Muzzle", 30, Rarity.COMMON, mage.cards.m.Muzzle.class)); + cards.add(new SetCardInfo("Natural Affinity", 260, Rarity.RARE, mage.cards.n.NaturalAffinity.class)); + cards.add(new SetCardInfo("Nether Spirit", 149, Rarity.RARE, mage.cards.n.NetherSpirit.class)); + cards.add(new SetCardInfo("Nightwind Glider", 31, Rarity.COMMON, mage.cards.n.NightwindGlider.class)); + cards.add(new SetCardInfo("Noble Purpose", 32, Rarity.UNCOMMON, mage.cards.n.NoblePurpose.class)); + cards.add(new SetCardInfo("Notorious Assassin", 150, Rarity.RARE, mage.cards.n.NotoriousAssassin.class)); + cards.add(new SetCardInfo("Ogre Taskmaster", 206, Rarity.UNCOMMON, mage.cards.o.OgreTaskmaster.class)); + cards.add(new SetCardInfo("Orim's Cure", 33, Rarity.COMMON, mage.cards.o.OrimsCure.class)); + cards.add(new SetCardInfo("Overtaker", 89, Rarity.RARE, mage.cards.o.Overtaker.class)); + cards.add(new SetCardInfo("Panacea", 308, Rarity.UNCOMMON, mage.cards.p.Panacea.class)); + cards.add(new SetCardInfo("Pangosaur", 261, Rarity.RARE, mage.cards.p.Pangosaur.class)); + cards.add(new SetCardInfo("Peat Bog", 322, Rarity.COMMON, mage.cards.p.PeatBog.class)); + cards.add(new SetCardInfo("Pious Warrior", 34, Rarity.COMMON, mage.cards.p.PiousWarrior.class)); + cards.add(new SetCardInfo("Plains", 331, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 332, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 333, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 334, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Power Matrix", 309, Rarity.RARE, mage.cards.p.PowerMatrix.class)); + cards.add(new SetCardInfo("Primeval Shambler", 152, Rarity.UNCOMMON, mage.cards.p.PrimevalShambler.class)); + cards.add(new SetCardInfo("Puffer Extract", 310, Rarity.UNCOMMON, mage.cards.p.PufferExtract.class)); + cards.add(new SetCardInfo("Pulverize", 207, Rarity.RARE, mage.cards.p.Pulverize.class)); + cards.add(new SetCardInfo("Putrefaction", 153, Rarity.UNCOMMON, mage.cards.p.Putrefaction.class)); + cards.add(new SetCardInfo("Puppet's Verdict", 208, Rarity.RARE, mage.cards.p.PuppetsVerdict.class)); + cards.add(new SetCardInfo("Quagmire Lamprey", 154, Rarity.UNCOMMON, mage.cards.q.QuagmireLamprey.class)); + cards.add(new SetCardInfo("Rain of Tears", 155, Rarity.UNCOMMON, mage.cards.r.RainOfTears.class)); + cards.add(new SetCardInfo("Ramosian Captain", 35, Rarity.UNCOMMON, mage.cards.r.RamosianCaptain.class)); + cards.add(new SetCardInfo("Ramosian Commander", 36, Rarity.UNCOMMON, mage.cards.r.RamosianCommander.class)); + cards.add(new SetCardInfo("Ramosian Lieutenant", 37, Rarity.COMMON, mage.cards.r.RamosianLieutenant.class)); + cards.add(new SetCardInfo("Ramosian Rally", 38, Rarity.COMMON, mage.cards.r.RamosianRally.class)); + cards.add(new SetCardInfo("Ramosian Sergeant", 39, Rarity.COMMON, mage.cards.r.RamosianSergeant.class)); + cards.add(new SetCardInfo("Ramosian Sky Marshal", 40, Rarity.RARE, mage.cards.r.RamosianSkyMarshal.class)); + cards.add(new SetCardInfo("Rampart Crawler", 156, Rarity.COMMON, mage.cards.r.RampartCrawler.class)); + cards.add(new SetCardInfo("Rappelling Scouts", 41, Rarity.RARE, mage.cards.r.RappellingScouts.class)); + cards.add(new SetCardInfo("Remote Farm", 323, Rarity.COMMON, mage.cards.r.RemoteFarm.class)); + cards.add(new SetCardInfo("Renounce", 42, Rarity.UNCOMMON, mage.cards.r.Renounce.class)); + cards.add(new SetCardInfo("Revered Elder", 43, Rarity.COMMON, mage.cards.r.ReveredElder.class)); + cards.add(new SetCardInfo("Reverent Mantra", 44, Rarity.RARE, mage.cards.r.ReverentMantra.class)); + cards.add(new SetCardInfo("Revive", 262, Rarity.UNCOMMON, mage.cards.r.Revive.class)); + cards.add(new SetCardInfo("Righteous Aura", 45, Rarity.UNCOMMON, mage.cards.r.RighteousAura.class)); + cards.add(new SetCardInfo("Rishadan Airship", 91, Rarity.COMMON, mage.cards.r.RishadanAirship.class)); + cards.add(new SetCardInfo("Rishadan Brigand", 92, Rarity.RARE, mage.cards.r.RishadanBrigand.class)); + cards.add(new SetCardInfo("Rishadan Cutpurse", 93, Rarity.COMMON, mage.cards.r.RishadanCutpurse.class)); + cards.add(new SetCardInfo("Rishadan Footpad", 94, Rarity.UNCOMMON, mage.cards.r.RishadanFootpad.class)); + cards.add(new SetCardInfo("Rishadan Pawnshop", 311, Rarity.RARE, mage.cards.r.RishadanPawnshop.class)); + cards.add(new SetCardInfo("Rishadan Port", 324, Rarity.RARE, mage.cards.r.RishadanPort.class)); + cards.add(new SetCardInfo("Rock Badger", 210, Rarity.UNCOMMON, mage.cards.r.RockBadger.class)); + cards.add(new SetCardInfo("Rouse", 157, Rarity.COMMON, mage.cards.r.Rouse.class)); + cards.add(new SetCardInfo("Rushwood Dryad", 263, Rarity.COMMON, mage.cards.r.RushwoodDryad.class)); + cards.add(new SetCardInfo("Rushwood Elemental", 264, Rarity.RARE, mage.cards.r.RushwoodElemental.class)); + cards.add(new SetCardInfo("Rushwood Grove", 325, Rarity.UNCOMMON, mage.cards.r.RushwoodGrove.class)); + cards.add(new SetCardInfo("Rushwood Herbalist", 265, Rarity.COMMON, mage.cards.r.RushwoodHerbalist.class)); + cards.add(new SetCardInfo("Rushwood Legate", 266, Rarity.UNCOMMON, mage.cards.r.RushwoodLegate.class)); + cards.add(new SetCardInfo("Saber Ants", 267, Rarity.UNCOMMON, mage.cards.s.SaberAnts.class)); + cards.add(new SetCardInfo("Sacred Prey", 268, Rarity.COMMON, mage.cards.s.SacredPrey.class)); + cards.add(new SetCardInfo("Sailmonger", 95, Rarity.UNCOMMON, mage.cards.s.Sailmonger.class)); + cards.add(new SetCardInfo("Sand Squid", 96, Rarity.RARE, mage.cards.s.SandSquid.class)); + cards.add(new SetCardInfo("Sandstone Needle", 326, Rarity.COMMON, mage.cards.s.SandstoneNeedle.class)); + cards.add(new SetCardInfo("Saprazzan Bailiff", 97, Rarity.RARE, mage.cards.s.SaprazzanBailiff.class)); + cards.add(new SetCardInfo("Saprazzan Breaker", 98, Rarity.UNCOMMON, mage.cards.s.SaprazzanBreaker.class)); + cards.add(new SetCardInfo("Saprazzan Cove", 327, Rarity.UNCOMMON, mage.cards.s.SaprazzanCove.class)); + cards.add(new SetCardInfo("Saprazzan Heir", 99, Rarity.RARE, mage.cards.s.SaprazzanHeir.class)); + cards.add(new SetCardInfo("Saprazzan Legate", 100, Rarity.UNCOMMON, mage.cards.s.SaprazzanLegate.class)); + cards.add(new SetCardInfo("Saprazzan Outrigger", 101, Rarity.COMMON, mage.cards.s.SaprazzanOutrigger.class)); + cards.add(new SetCardInfo("Saprazzan Raider", 102, Rarity.COMMON, mage.cards.s.SaprazzanRaider.class)); + cards.add(new SetCardInfo("Saprazzan Skerry", 328, Rarity.COMMON, mage.cards.s.SaprazzanSkerry.class)); + cards.add(new SetCardInfo("Scandalmonger", 158, Rarity.UNCOMMON, mage.cards.s.Scandalmonger.class)); + cards.add(new SetCardInfo("Security Detail", 47, Rarity.RARE, mage.cards.s.SecurityDetail.class)); + cards.add(new SetCardInfo("Seismic Mage", 211, Rarity.RARE, mage.cards.s.SeismicMage.class)); + cards.add(new SetCardInfo("Sever Soul", 159, Rarity.COMMON, mage.cards.s.SeverSoul.class)); + cards.add(new SetCardInfo("Shock Troops", 212, Rarity.COMMON, mage.cards.s.ShockTroops.class)); + cards.add(new SetCardInfo("Shoving Match", 103, Rarity.UNCOMMON, mage.cards.s.ShovingMatch.class)); + cards.add(new SetCardInfo("Silent Assassin", 160, Rarity.RARE, mage.cards.s.SilentAssassin.class)); + cards.add(new SetCardInfo("Silverglade Elemental", 269, Rarity.COMMON, mage.cards.s.SilvergladeElemental.class)); + cards.add(new SetCardInfo("Silverglade Pathfinder", 270, Rarity.UNCOMMON, mage.cards.s.SilvergladePathfinder.class)); + cards.add(new SetCardInfo("Sizzle", 213, Rarity.COMMON, mage.cards.s.Sizzle.class)); + cards.add(new SetCardInfo("Skulking Fugitive", 161, Rarity.COMMON, mage.cards.s.SkulkingFugitive.class)); + cards.add(new SetCardInfo("Skull of Ramos", 312, Rarity.RARE, mage.cards.s.SkullOfRamos.class)); + cards.add(new SetCardInfo("Snake Pit", 271, Rarity.UNCOMMON, mage.cards.s.SnakePit.class)); + cards.add(new SetCardInfo("Snorting Gahr", 272, Rarity.COMMON, mage.cards.s.SnortingGahr.class)); + cards.add(new SetCardInfo("Snuff Out", 162, Rarity.COMMON, mage.cards.s.SnuffOut.class)); + cards.add(new SetCardInfo("Soothing Balm", 48, Rarity.COMMON, mage.cards.s.SoothingBalm.class)); + cards.add(new SetCardInfo("Soothsaying", 104, Rarity.UNCOMMON, mage.cards.s.Soothsaying.class)); + cards.add(new SetCardInfo("Soul Channeling", 163, Rarity.COMMON, mage.cards.s.SoulChanneling.class)); + cards.add(new SetCardInfo("Specter's Wail", 164, Rarity.COMMON, mage.cards.s.SpectersWail.class)); + cards.add(new SetCardInfo("Spidersilk Armor", 273, Rarity.COMMON, mage.cards.s.SpidersilkArmor.class)); + cards.add(new SetCardInfo("Spiritual Focus", 49, Rarity.RARE, mage.cards.s.SpiritualFocus.class)); + cards.add(new SetCardInfo("Spontaneous Generation", 274, Rarity.RARE, mage.cards.s.SpontaneousGeneration.class)); + cards.add(new SetCardInfo("Squall", 275, Rarity.COMMON, mage.cards.s.Squall.class)); + cards.add(new SetCardInfo("Squallmonger", 276, Rarity.UNCOMMON, mage.cards.s.Squallmonger.class)); + cards.add(new SetCardInfo("Squee, Goblin Nabob", 214, Rarity.RARE, mage.cards.s.SqueeGoblinNabob.class)); + cards.add(new SetCardInfo("Squeeze", 105, Rarity.RARE, mage.cards.s.Squeeze.class)); + cards.add(new SetCardInfo("Stamina", 277, Rarity.UNCOMMON, mage.cards.s.Stamina.class)); + cards.add(new SetCardInfo("Statecraft", 106, Rarity.RARE, mage.cards.s.Statecraft.class)); + cards.add(new SetCardInfo("Steadfast Guard", 50, Rarity.COMMON, mage.cards.s.SteadfastGuard.class)); + cards.add(new SetCardInfo("Stinging Barrier", 107, Rarity.COMMON, mage.cards.s.StingingBarrier.class)); + cards.add(new SetCardInfo("Stone Rain", 215, Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Story Circle", 51, Rarity.UNCOMMON, mage.cards.s.StoryCircle.class)); + cards.add(new SetCardInfo("Strongarm Thug", 165, Rarity.UNCOMMON, mage.cards.s.StrongarmThug.class)); + cards.add(new SetCardInfo("Subterranean Hangar", 329, Rarity.UNCOMMON, mage.cards.s.SubterraneanHangar.class)); + cards.add(new SetCardInfo("Sustenance", 278, Rarity.UNCOMMON, mage.cards.s.Sustenance.class)); + cards.add(new SetCardInfo("Swamp", 339, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 340, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 341, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 342, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Task Force", 52, Rarity.COMMON, mage.cards.t.TaskForce.class)); + cards.add(new SetCardInfo("Tectonic Break", 216, Rarity.RARE, mage.cards.t.TectonicBreak.class)); + cards.add(new SetCardInfo("Territorial Dispute", 217, Rarity.RARE, mage.cards.t.TerritorialDispute.class)); + cards.add(new SetCardInfo("Thermal Glider", 53, Rarity.COMMON, mage.cards.t.ThermalGlider.class)); + cards.add(new SetCardInfo("Thieves' Auction", 218, Rarity.RARE, mage.cards.t.ThievesAuction.class)); + cards.add(new SetCardInfo("Thrashing Wumpus", 166, Rarity.RARE, mage.cards.t.ThrashingWumpus.class)); + cards.add(new SetCardInfo("Thunderclap", 219, Rarity.COMMON, mage.cards.t.Thunderclap.class)); + cards.add(new SetCardInfo("Thwart", 108, Rarity.UNCOMMON, mage.cards.t.Thwart.class)); + cards.add(new SetCardInfo("Tidal Bore", 109, Rarity.COMMON, mage.cards.t.TidalBore.class)); + cards.add(new SetCardInfo("Tidal Kraken", 110, Rarity.RARE, mage.cards.t.TidalKraken.class)); + cards.add(new SetCardInfo("Tiger Claws", 279, Rarity.COMMON, mage.cards.t.TigerClaws.class)); + cards.add(new SetCardInfo("Timid Drake", 111, Rarity.UNCOMMON, mage.cards.t.TimidDrake.class)); + cards.add(new SetCardInfo("Tonic Peddler", 54, Rarity.UNCOMMON, mage.cards.t.TonicPeddler.class)); + cards.add(new SetCardInfo("Tooth of Ramos", 313, Rarity.RARE, mage.cards.t.ToothOfRamos.class)); + cards.add(new SetCardInfo("Tower of the Magistrate", 330, Rarity.RARE, mage.cards.t.TowerOfTheMagistrate.class)); + cards.add(new SetCardInfo("Toymaker", 314, Rarity.UNCOMMON, mage.cards.t.Toymaker.class)); + cards.add(new SetCardInfo("Trade Routes", 112, Rarity.RARE, mage.cards.t.TradeRoutes.class)); + cards.add(new SetCardInfo("Tranquility", 280, Rarity.COMMON, mage.cards.t.Tranquility.class)); + cards.add(new SetCardInfo("Trap Runner", 55, Rarity.UNCOMMON, mage.cards.t.TrapRunner.class)); + cards.add(new SetCardInfo("Tremor", 220, Rarity.COMMON, mage.cards.t.Tremor.class)); + cards.add(new SetCardInfo("Two-Headed Dragon", 221, Rarity.RARE, mage.cards.t.TwoHeadedDragon.class)); + cards.add(new SetCardInfo("Undertaker", 167, Rarity.COMMON, mage.cards.u.Undertaker.class)); + cards.add(new SetCardInfo("Unmask", 168, Rarity.RARE, mage.cards.u.Unmask.class)); + cards.add(new SetCardInfo("Uphill Battle", 222, Rarity.UNCOMMON, mage.cards.u.UphillBattle.class)); + cards.add(new SetCardInfo("Vendetta", 170, Rarity.COMMON, mage.cards.v.Vendetta.class)); + cards.add(new SetCardInfo("Venomous Breath", 281, Rarity.UNCOMMON, mage.cards.v.VenomousBreath.class)); + cards.add(new SetCardInfo("Venomous Dragonfly", 282, Rarity.COMMON, mage.cards.v.VenomousDragonfly.class)); + cards.add(new SetCardInfo("Vernal Equinox", 283, Rarity.RARE, mage.cards.v.VernalEquinox.class)); + cards.add(new SetCardInfo("Vine Dryad", 284, Rarity.RARE, mage.cards.v.VineDryad.class)); + cards.add(new SetCardInfo("Vine Trellis", 285, Rarity.COMMON, mage.cards.v.VineTrellis.class)); + cards.add(new SetCardInfo("Volcanic Wind", 223, Rarity.UNCOMMON, mage.cards.v.VolcanicWind.class)); + cards.add(new SetCardInfo("Wall of Distortion", 171, Rarity.COMMON, mage.cards.w.WallOfDistortion.class)); + cards.add(new SetCardInfo("War Cadence", 224, Rarity.UNCOMMON, mage.cards.w.WarCadence.class)); + cards.add(new SetCardInfo("War Tax", 113, Rarity.UNCOMMON, mage.cards.w.WarTax.class)); + cards.add(new SetCardInfo("Warmonger", 225, Rarity.UNCOMMON, mage.cards.w.Warmonger.class)); + cards.add(new SetCardInfo("Warpath", 226, Rarity.UNCOMMON, mage.cards.w.Warpath.class)); + cards.add(new SetCardInfo("Waterfront Bouncer", 114, Rarity.COMMON, mage.cards.w.WaterfrontBouncer.class)); + cards.add(new SetCardInfo("Wave of Reckoning", 56, Rarity.RARE, mage.cards.w.WaveOfReckoning.class)); + cards.add(new SetCardInfo("Wild Jhovall", 227, Rarity.COMMON, mage.cards.w.WildJhovall.class)); + cards.add(new SetCardInfo("Wishmonger", 57, Rarity.UNCOMMON, mage.cards.w.Wishmonger.class)); + cards.add(new SetCardInfo("Word of Blasting", 228, Rarity.UNCOMMON, mage.cards.w.WordOfBlasting.class)); + cards.add(new SetCardInfo("Worry Beads", 315, Rarity.RARE, mage.cards.w.WorryBeads.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Mirage.java b/Mage.Sets/src/mage/sets/Mirage.java index 9fa3fd6af01..1fdb30ed7b4 100644 --- a/Mage.Sets/src/mage/sets/Mirage.java +++ b/Mage.Sets/src/mage/sets/Mirage.java @@ -1,350 +1,350 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author North - */ -public final class Mirage extends ExpansionSet { - - private static final Mirage instance = new Mirage(); - - public static Mirage getInstance() { - return instance; - } - - private Mirage() { - super("Mirage", "MIR", ExpansionSet.buildDate(1996, 8, 21), SetType.EXPANSION); - this.blockName = "Mirage"; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Abyssal Hunter", 103, Rarity.RARE, mage.cards.a.AbyssalHunter.class)); - cards.add(new SetCardInfo("Afiya Grove", 205, Rarity.RARE, mage.cards.a.AfiyaGrove.class)); - cards.add(new SetCardInfo("Afterlife", 1, Rarity.UNCOMMON, mage.cards.a.Afterlife.class)); - cards.add(new SetCardInfo("Agility", 154, Rarity.COMMON, mage.cards.a.Agility.class)); - cards.add(new SetCardInfo("Alarum", 2, Rarity.COMMON, mage.cards.a.Alarum.class)); - cards.add(new SetCardInfo("Aleatory", 155, Rarity.UNCOMMON, mage.cards.a.Aleatory.class)); - cards.add(new SetCardInfo("Amber Prison", 292, Rarity.RARE, mage.cards.a.AmberPrison.class)); - cards.add(new SetCardInfo("Amulet of Unmaking", 293, Rarity.RARE, mage.cards.a.AmuletOfUnmaking.class)); - cards.add(new SetCardInfo("Ancestral Memories", 52, Rarity.RARE, mage.cards.a.AncestralMemories.class)); - cards.add(new SetCardInfo("Armor of Thorns", 206, Rarity.COMMON, mage.cards.a.ArmorOfThorns.class)); - cards.add(new SetCardInfo("Armorer Guildmage", 156, Rarity.COMMON, mage.cards.a.ArmorerGuildmage.class)); - cards.add(new SetCardInfo("Ashen Powder", 104, Rarity.RARE, mage.cards.a.AshenPowder.class)); - cards.add(new SetCardInfo("Asmira, Holy Avenger", 256, Rarity.RARE, mage.cards.a.AsmiraHolyAvenger.class)); - cards.add(new SetCardInfo("Auspicious Ancestor", 3, Rarity.RARE, mage.cards.a.AuspiciousAncestor.class)); - cards.add(new SetCardInfo("Azimaet Drake", 53, Rarity.COMMON, mage.cards.a.AzimaetDrake.class)); - cards.add(new SetCardInfo("Bad River", 324, Rarity.UNCOMMON, mage.cards.b.BadRiver.class)); - cards.add(new SetCardInfo("Barbed Foliage", 207, Rarity.UNCOMMON, mage.cards.b.BarbedFoliage.class)); - cards.add(new SetCardInfo("Barbed-Back Wurm", 105, Rarity.UNCOMMON, mage.cards.b.BarbedBackWurm.class)); - cards.add(new SetCardInfo("Bay Falcon", 54, Rarity.COMMON, mage.cards.b.BayFalcon.class)); - cards.add(new SetCardInfo("Bazaar of Wonders", 55, Rarity.RARE, mage.cards.b.BazaarOfWonders.class)); - cards.add(new SetCardInfo("Benevolent Unicorn", 4, Rarity.COMMON, mage.cards.b.BenevolentUnicorn.class)); - cards.add(new SetCardInfo("Benthic Djinn", 257, Rarity.RARE, mage.cards.b.BenthicDjinn.class)); - cards.add(new SetCardInfo("Binding Agony", 106, Rarity.COMMON, mage.cards.b.BindingAgony.class)); - cards.add(new SetCardInfo("Blighted Shaman", 107, Rarity.UNCOMMON, mage.cards.b.BlightedShaman.class)); - cards.add(new SetCardInfo("Blind Fury", 158, Rarity.UNCOMMON, mage.cards.b.BlindFury.class)); - cards.add(new SetCardInfo("Blinding Light", 5, Rarity.UNCOMMON, mage.cards.b.BlindingLight.class)); - cards.add(new SetCardInfo("Blistering Barrier", 159, Rarity.COMMON, mage.cards.b.BlisteringBarrier.class)); - cards.add(new SetCardInfo("Bone Harvest", 108, Rarity.COMMON, mage.cards.b.BoneHarvest.class)); - cards.add(new SetCardInfo("Bone Mask", 295, Rarity.RARE, mage.cards.b.BoneMask.class)); - cards.add(new SetCardInfo("Boomerang", 56, Rarity.COMMON, mage.cards.b.Boomerang.class)); - cards.add(new SetCardInfo("Breathstealer", 109, Rarity.COMMON, mage.cards.b.Breathstealer.class)); - cards.add(new SetCardInfo("Brushwagg", 208, Rarity.RARE, mage.cards.b.Brushwagg.class)); - cards.add(new SetCardInfo("Builder's Bane", 160, Rarity.COMMON, mage.cards.b.BuildersBane.class)); - cards.add(new SetCardInfo("Burning Palm Efreet", 161, Rarity.UNCOMMON, mage.cards.b.BurningPalmEfreet.class)); - cards.add(new SetCardInfo("Burning Shield Askari", 162, Rarity.COMMON, mage.cards.b.BurningShieldAskari.class)); - cards.add(new SetCardInfo("Cadaverous Bloom", 258, Rarity.RARE, mage.cards.c.CadaverousBloom.class)); - cards.add(new SetCardInfo("Cadaverous Knight", 110, Rarity.COMMON, mage.cards.c.CadaverousKnight.class)); - cards.add(new SetCardInfo("Canopy Dragon", 209, Rarity.RARE, mage.cards.c.CanopyDragon.class)); - cards.add(new SetCardInfo("Carrion", 111, Rarity.RARE, mage.cards.c.Carrion.class)); - cards.add(new SetCardInfo("Catacomb Dragon", 112, Rarity.RARE, mage.cards.c.CatacombDragon.class)); - cards.add(new SetCardInfo("Celestial Dawn", 6, Rarity.RARE, mage.cards.c.CelestialDawn.class)); - cards.add(new SetCardInfo("Cerulean Wyvern", 57, Rarity.UNCOMMON, mage.cards.c.CeruleanWyvern.class)); - cards.add(new SetCardInfo("Chaos Charm", 163, Rarity.COMMON, mage.cards.c.ChaosCharm.class)); - cards.add(new SetCardInfo("Chaosphere", 164, Rarity.RARE, mage.cards.c.Chaosphere.class)); - cards.add(new SetCardInfo("Charcoal Diamond", 296, Rarity.UNCOMMON, mage.cards.c.CharcoalDiamond.class)); - cards.add(new SetCardInfo("Chariot of the Sun", 262, Rarity.UNCOMMON, mage.cards.c.ChariotOfTheSun.class)); - cards.add(new SetCardInfo("Choking Sands", 113, Rarity.COMMON, mage.cards.c.ChokingSands.class)); - cards.add(new SetCardInfo("Cinder Cloud", 165, Rarity.UNCOMMON, mage.cards.c.CinderCloud.class)); - cards.add(new SetCardInfo("Civic Guildmage", 7, Rarity.COMMON, mage.cards.c.CivicGuildmage.class)); - cards.add(new SetCardInfo("Cloak of Invisibility", 58, Rarity.COMMON, mage.cards.c.CloakOfInvisibility.class)); - cards.add(new SetCardInfo("Consuming Ferocity", 166, Rarity.UNCOMMON, mage.cards.c.ConsumingFerocity.class)); - cards.add(new SetCardInfo("Coral Fighters", 59, Rarity.UNCOMMON, mage.cards.c.CoralFighters.class)); - cards.add(new SetCardInfo("Crash of Rhinos", 210, Rarity.COMMON, mage.cards.c.CrashOfRhinos.class)); - cards.add(new SetCardInfo("Crimson Hellkite", 167, Rarity.RARE, mage.cards.c.CrimsonHellkite.class)); +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author North + */ +public final class Mirage extends ExpansionSet { + + private static final Mirage instance = new Mirage(); + + public static Mirage getInstance() { + return instance; + } + + private Mirage() { + super("Mirage", "MIR", ExpansionSet.buildDate(1996, 8, 21), SetType.EXPANSION); + this.blockName = "Mirage"; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Abyssal Hunter", 103, Rarity.RARE, mage.cards.a.AbyssalHunter.class)); + cards.add(new SetCardInfo("Afiya Grove", 205, Rarity.RARE, mage.cards.a.AfiyaGrove.class)); + cards.add(new SetCardInfo("Afterlife", 1, Rarity.UNCOMMON, mage.cards.a.Afterlife.class)); + cards.add(new SetCardInfo("Agility", 154, Rarity.COMMON, mage.cards.a.Agility.class)); + cards.add(new SetCardInfo("Alarum", 2, Rarity.COMMON, mage.cards.a.Alarum.class)); + cards.add(new SetCardInfo("Aleatory", 155, Rarity.UNCOMMON, mage.cards.a.Aleatory.class)); + cards.add(new SetCardInfo("Amber Prison", 292, Rarity.RARE, mage.cards.a.AmberPrison.class)); + cards.add(new SetCardInfo("Amulet of Unmaking", 293, Rarity.RARE, mage.cards.a.AmuletOfUnmaking.class)); + cards.add(new SetCardInfo("Ancestral Memories", 52, Rarity.RARE, mage.cards.a.AncestralMemories.class)); + cards.add(new SetCardInfo("Armor of Thorns", 206, Rarity.COMMON, mage.cards.a.ArmorOfThorns.class)); + cards.add(new SetCardInfo("Armorer Guildmage", 156, Rarity.COMMON, mage.cards.a.ArmorerGuildmage.class)); + cards.add(new SetCardInfo("Ashen Powder", 104, Rarity.RARE, mage.cards.a.AshenPowder.class)); + cards.add(new SetCardInfo("Asmira, Holy Avenger", 256, Rarity.RARE, mage.cards.a.AsmiraHolyAvenger.class)); + cards.add(new SetCardInfo("Auspicious Ancestor", 3, Rarity.RARE, mage.cards.a.AuspiciousAncestor.class)); + cards.add(new SetCardInfo("Azimaet Drake", 53, Rarity.COMMON, mage.cards.a.AzimaetDrake.class)); + cards.add(new SetCardInfo("Bad River", 324, Rarity.UNCOMMON, mage.cards.b.BadRiver.class)); + cards.add(new SetCardInfo("Barbed Foliage", 207, Rarity.UNCOMMON, mage.cards.b.BarbedFoliage.class)); + cards.add(new SetCardInfo("Barbed-Back Wurm", 105, Rarity.UNCOMMON, mage.cards.b.BarbedBackWurm.class)); + cards.add(new SetCardInfo("Bay Falcon", 54, Rarity.COMMON, mage.cards.b.BayFalcon.class)); + cards.add(new SetCardInfo("Bazaar of Wonders", 55, Rarity.RARE, mage.cards.b.BazaarOfWonders.class)); + cards.add(new SetCardInfo("Benevolent Unicorn", 4, Rarity.COMMON, mage.cards.b.BenevolentUnicorn.class)); + cards.add(new SetCardInfo("Benthic Djinn", 257, Rarity.RARE, mage.cards.b.BenthicDjinn.class)); + cards.add(new SetCardInfo("Binding Agony", 106, Rarity.COMMON, mage.cards.b.BindingAgony.class)); + cards.add(new SetCardInfo("Blighted Shaman", 107, Rarity.UNCOMMON, mage.cards.b.BlightedShaman.class)); + cards.add(new SetCardInfo("Blind Fury", 158, Rarity.UNCOMMON, mage.cards.b.BlindFury.class)); + cards.add(new SetCardInfo("Blinding Light", 5, Rarity.UNCOMMON, mage.cards.b.BlindingLight.class)); + cards.add(new SetCardInfo("Blistering Barrier", 159, Rarity.COMMON, mage.cards.b.BlisteringBarrier.class)); + cards.add(new SetCardInfo("Bone Harvest", 108, Rarity.COMMON, mage.cards.b.BoneHarvest.class)); + cards.add(new SetCardInfo("Bone Mask", 295, Rarity.RARE, mage.cards.b.BoneMask.class)); + cards.add(new SetCardInfo("Boomerang", 56, Rarity.COMMON, mage.cards.b.Boomerang.class)); + cards.add(new SetCardInfo("Breathstealer", 109, Rarity.COMMON, mage.cards.b.Breathstealer.class)); + cards.add(new SetCardInfo("Brushwagg", 208, Rarity.RARE, mage.cards.b.Brushwagg.class)); + cards.add(new SetCardInfo("Builder's Bane", 160, Rarity.COMMON, mage.cards.b.BuildersBane.class)); + cards.add(new SetCardInfo("Burning Palm Efreet", 161, Rarity.UNCOMMON, mage.cards.b.BurningPalmEfreet.class)); + cards.add(new SetCardInfo("Burning Shield Askari", 162, Rarity.COMMON, mage.cards.b.BurningShieldAskari.class)); + cards.add(new SetCardInfo("Cadaverous Bloom", 258, Rarity.RARE, mage.cards.c.CadaverousBloom.class)); + cards.add(new SetCardInfo("Cadaverous Knight", 110, Rarity.COMMON, mage.cards.c.CadaverousKnight.class)); + cards.add(new SetCardInfo("Canopy Dragon", 209, Rarity.RARE, mage.cards.c.CanopyDragon.class)); + cards.add(new SetCardInfo("Carrion", 111, Rarity.RARE, mage.cards.c.Carrion.class)); + cards.add(new SetCardInfo("Catacomb Dragon", 112, Rarity.RARE, mage.cards.c.CatacombDragon.class)); + cards.add(new SetCardInfo("Celestial Dawn", 6, Rarity.RARE, mage.cards.c.CelestialDawn.class)); + cards.add(new SetCardInfo("Cerulean Wyvern", 57, Rarity.UNCOMMON, mage.cards.c.CeruleanWyvern.class)); + cards.add(new SetCardInfo("Chaos Charm", 163, Rarity.COMMON, mage.cards.c.ChaosCharm.class)); + cards.add(new SetCardInfo("Chaosphere", 164, Rarity.RARE, mage.cards.c.Chaosphere.class)); + cards.add(new SetCardInfo("Charcoal Diamond", 296, Rarity.UNCOMMON, mage.cards.c.CharcoalDiamond.class)); + cards.add(new SetCardInfo("Chariot of the Sun", 262, Rarity.UNCOMMON, mage.cards.c.ChariotOfTheSun.class)); + cards.add(new SetCardInfo("Choking Sands", 113, Rarity.COMMON, mage.cards.c.ChokingSands.class)); + cards.add(new SetCardInfo("Cinder Cloud", 165, Rarity.UNCOMMON, mage.cards.c.CinderCloud.class)); + cards.add(new SetCardInfo("Civic Guildmage", 7, Rarity.COMMON, mage.cards.c.CivicGuildmage.class)); + cards.add(new SetCardInfo("Cloak of Invisibility", 58, Rarity.COMMON, mage.cards.c.CloakOfInvisibility.class)); + cards.add(new SetCardInfo("Consuming Ferocity", 166, Rarity.UNCOMMON, mage.cards.c.ConsumingFerocity.class)); + cards.add(new SetCardInfo("Coral Fighters", 59, Rarity.UNCOMMON, mage.cards.c.CoralFighters.class)); + cards.add(new SetCardInfo("Crash of Rhinos", 210, Rarity.COMMON, mage.cards.c.CrashOfRhinos.class)); + cards.add(new SetCardInfo("Crimson Hellkite", 167, Rarity.RARE, mage.cards.c.CrimsonHellkite.class)); cards.add(new SetCardInfo("Crimson Roc", 168, Rarity.UNCOMMON, mage.cards.c.CrimsonRoc.class)); - cards.add(new SetCardInfo("Crypt Cobra", 114, Rarity.UNCOMMON, mage.cards.c.CryptCobra.class)); - cards.add(new SetCardInfo("Crystal Golem", 298, Rarity.UNCOMMON, mage.cards.c.CrystalGolem.class)); - cards.add(new SetCardInfo("Crystal Vein", 325, Rarity.UNCOMMON, mage.cards.c.CrystalVein.class)); - cards.add(new SetCardInfo("Cursed Totem", 299, Rarity.RARE, mage.cards.c.CursedTotem.class)); - cards.add(new SetCardInfo("Daring Apprentice", 60, Rarity.RARE, mage.cards.d.DaringApprentice.class)); - cards.add(new SetCardInfo("Dark Banishing", 115, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); - cards.add(new SetCardInfo("Dark Ritual", 116, Rarity.COMMON, mage.cards.d.DarkRitual.class)); - cards.add(new SetCardInfo("Dazzling Beauty", 8, Rarity.COMMON, mage.cards.d.DazzlingBeauty.class)); - cards.add(new SetCardInfo("Delirium", 260, Rarity.UNCOMMON, mage.cards.d.Delirium.class)); - cards.add(new SetCardInfo("Dirtwater Wraith", 117, Rarity.COMMON, mage.cards.d.DirtwaterWraith.class)); - cards.add(new SetCardInfo("Disempower", 9, Rarity.COMMON, mage.cards.d.Disempower.class)); - cards.add(new SetCardInfo("Disenchant", 10, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Dissipate", 61, Rarity.UNCOMMON, mage.cards.d.Dissipate.class)); - cards.add(new SetCardInfo("Divine Offering", 11, Rarity.COMMON, mage.cards.d.DivineOffering.class)); - cards.add(new SetCardInfo("Divine Retribution", 12, Rarity.RARE, mage.cards.d.DivineRetribution.class)); - cards.add(new SetCardInfo("Drain Life", 118, Rarity.COMMON, mage.cards.d.DrainLife.class)); - cards.add(new SetCardInfo("Dread Specter", 119, Rarity.UNCOMMON, mage.cards.d.DreadSpecter.class)); - cards.add(new SetCardInfo("Dream Cache", 62, Rarity.COMMON, mage.cards.d.DreamCache.class)); - cards.add(new SetCardInfo("Dwarven Miner", 169, Rarity.UNCOMMON, mage.cards.d.DwarvenMiner.class)); - cards.add(new SetCardInfo("Dwarven Nomad", 170, Rarity.COMMON, mage.cards.d.DwarvenNomad.class)); - cards.add(new SetCardInfo("Early Harvest", 213, Rarity.RARE, mage.cards.e.EarlyHarvest.class)); - cards.add(new SetCardInfo("Ebony Charm", 120, Rarity.COMMON, mage.cards.e.EbonyCharm.class)); - cards.add(new SetCardInfo("Ekundu Griffin", 13, Rarity.COMMON, mage.cards.e.EkunduGriffin.class)); - cards.add(new SetCardInfo("Elixir of Vitality", 300, Rarity.UNCOMMON, mage.cards.e.ElixirOfVitality.class)); - cards.add(new SetCardInfo("Emberwilde Caliph", 322, Rarity.RARE, mage.cards.e.EmberwildeCaliph.class)); - cards.add(new SetCardInfo("Emberwilde Djinn", 172, Rarity.RARE, mage.cards.e.EmberwildeDjinn.class)); - cards.add(new SetCardInfo("Energy Bolt", 263, Rarity.RARE, mage.cards.e.EnergyBolt.class)); - cards.add(new SetCardInfo("Energy Vortex", 64, Rarity.RARE, mage.cards.e.EnergyVortex.class)); - cards.add(new SetCardInfo("Enfeeblement", 121, Rarity.COMMON, mage.cards.e.Enfeeblement.class)); - cards.add(new SetCardInfo("Enlightened Tutor", 14, Rarity.UNCOMMON, mage.cards.e.EnlightenedTutor.class)); - cards.add(new SetCardInfo("Ersatz Gnomes", 301, Rarity.UNCOMMON, mage.cards.e.ErsatzGnomes.class)); - cards.add(new SetCardInfo("Ether Well", 65, Rarity.UNCOMMON, mage.cards.e.EtherWell.class)); - cards.add(new SetCardInfo("Ethereal Champion", 15, Rarity.RARE, mage.cards.e.EtherealChampion.class)); - cards.add(new SetCardInfo("Fallow Earth", 214, Rarity.UNCOMMON, mage.cards.f.FallowEarth.class)); - cards.add(new SetCardInfo("Favorable Destiny", 16, Rarity.UNCOMMON, mage.cards.f.FavorableDestiny.class)); - cards.add(new SetCardInfo("Femeref Archers", 215, Rarity.UNCOMMON, mage.cards.f.FemerefArchers.class)); - cards.add(new SetCardInfo("Femeref Healer", 17, Rarity.COMMON, mage.cards.f.FemerefHealer.class)); - cards.add(new SetCardInfo("Femeref Knight", 18, Rarity.COMMON, mage.cards.f.FemerefKnight.class)); - cards.add(new SetCardInfo("Femeref Scouts", 19, Rarity.COMMON, mage.cards.f.FemerefScouts.class)); - cards.add(new SetCardInfo("Feral Shadow", 122, Rarity.COMMON, mage.cards.f.FeralShadow.class)); - cards.add(new SetCardInfo("Fetid Horror", 123, Rarity.COMMON, mage.cards.f.FetidHorror.class)); - cards.add(new SetCardInfo("Final Fortune", 173, Rarity.RARE, mage.cards.f.FinalFortune.class)); - cards.add(new SetCardInfo("Fire Diamond", 302, Rarity.UNCOMMON, mage.cards.f.FireDiamond.class)); - cards.add(new SetCardInfo("Firebreathing", 174, Rarity.COMMON, mage.cards.f.Firebreathing.class)); - cards.add(new SetCardInfo("Flame Elemental", 175, Rarity.UNCOMMON, mage.cards.f.FlameElemental.class)); - cards.add(new SetCardInfo("Flare", 176, Rarity.COMMON, mage.cards.f.Flare.class)); - cards.add(new SetCardInfo("Flash", 66, Rarity.RARE, mage.cards.f.Flash.class)); - cards.add(new SetCardInfo("Flood Plain", 326, Rarity.UNCOMMON, mage.cards.f.FloodPlain.class)); - cards.add(new SetCardInfo("Floodgate", 67, Rarity.UNCOMMON, mage.cards.f.Floodgate.class)); - cards.add(new SetCardInfo("Fog", 216, Rarity.COMMON, mage.cards.f.Fog.class)); - cards.add(new SetCardInfo("Foratog", 217, Rarity.UNCOMMON, mage.cards.f.Foratog.class)); - cards.add(new SetCardInfo("Forbidden Crypt", 124, Rarity.RARE, mage.cards.f.ForbiddenCrypt.class)); - cards.add(new SetCardInfo("Forest", 347, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 348, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 349, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 350, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forsaken Wastes", 125, Rarity.RARE, mage.cards.f.ForsakenWastes.class)); - cards.add(new SetCardInfo("Frenetic Efreet", 264, Rarity.RARE, mage.cards.f.FreneticEfreet.class)); - cards.add(new SetCardInfo("Giant Mantis", 218, Rarity.COMMON, mage.cards.g.GiantMantis.class)); - cards.add(new SetCardInfo("Gibbering Hyenas", 219, Rarity.COMMON, mage.cards.g.GibberingHyenas.class)); - cards.add(new SetCardInfo("Goblin Elite Infantry", 177, Rarity.COMMON, mage.cards.g.GoblinEliteInfantry.class)); - cards.add(new SetCardInfo("Goblin Scouts", 178, Rarity.UNCOMMON, mage.cards.g.GoblinScouts.class)); - cards.add(new SetCardInfo("Goblin Soothsayer", 179, Rarity.UNCOMMON, mage.cards.g.GoblinSoothsayer.class)); - cards.add(new SetCardInfo("Goblin Tinkerer", 180, Rarity.COMMON, mage.cards.g.GoblinTinkerer.class)); - cards.add(new SetCardInfo("Granger Guildmage", 220, Rarity.COMMON, mage.cards.g.GrangerGuildmage.class)); - cards.add(new SetCardInfo("Grasslands", 327, Rarity.UNCOMMON, mage.cards.g.Grasslands.class)); - cards.add(new SetCardInfo("Grave Servitude", 126, Rarity.COMMON, mage.cards.g.GraveServitude.class)); - cards.add(new SetCardInfo("Gravebane Zombie", 127, Rarity.COMMON, mage.cards.g.GravebaneZombie.class)); - cards.add(new SetCardInfo("Grim Feast", 265, Rarity.RARE, mage.cards.g.GrimFeast.class)); - cards.add(new SetCardInfo("Grinning Totem", 303, Rarity.RARE, mage.cards.g.GrinningTotem.class)); - cards.add(new SetCardInfo("Hakim, Loreweaver", 68, Rarity.RARE, mage.cards.h.HakimLoreweaver.class)); - cards.add(new SetCardInfo("Hall of Gemstone", 221, Rarity.RARE, mage.cards.h.HallOfGemstone.class)); - cards.add(new SetCardInfo("Hammer of Bogardan", 181, Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); - cards.add(new SetCardInfo("Harbinger of Night", 128, Rarity.RARE, mage.cards.h.HarbingerOfNight.class)); - cards.add(new SetCardInfo("Harbor Guardian", 266, Rarity.UNCOMMON, mage.cards.h.HarborGuardian.class)); - cards.add(new SetCardInfo("Harmattan Efreet", 69, Rarity.UNCOMMON, mage.cards.h.HarmattanEfreet.class)); - cards.add(new SetCardInfo("Hazerider Drake", 268, Rarity.UNCOMMON, mage.cards.h.HazeriderDrake.class)); - cards.add(new SetCardInfo("Healing Salve", 20, Rarity.COMMON, mage.cards.h.HealingSalve.class)); - cards.add(new SetCardInfo("Hivis of the Scale", 182, Rarity.RARE, mage.cards.h.HivisOfTheScale.class)); - cards.add(new SetCardInfo("Horrible Hordes", 304, Rarity.UNCOMMON, mage.cards.h.HorribleHordes.class)); - cards.add(new SetCardInfo("Igneous Golem", 305, Rarity.UNCOMMON, mage.cards.i.IgneousGolem.class)); - cards.add(new SetCardInfo("Illicit Auction", 183, Rarity.RARE, mage.cards.i.IllicitAuction.class)); - cards.add(new SetCardInfo("Illumination", 21, Rarity.UNCOMMON, mage.cards.i.Illumination.class)); - cards.add(new SetCardInfo("Incinerate", 184, Rarity.COMMON, mage.cards.i.Incinerate.class)); - cards.add(new SetCardInfo("Infernal Contract", 129, Rarity.RARE, mage.cards.i.InfernalContract.class)); - cards.add(new SetCardInfo("Iron Tusk Elephant", 22, Rarity.UNCOMMON, mage.cards.i.IronTuskElephant.class)); - cards.add(new SetCardInfo("Island", 335, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 336, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 337, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 338, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ivory Charm", 23, Rarity.COMMON, mage.cards.i.IvoryCharm.class)); - cards.add(new SetCardInfo("Jolrael's Centaur", 222, Rarity.COMMON, mage.cards.j.JolraelsCentaur.class)); - cards.add(new SetCardInfo("Jolt", 70, Rarity.COMMON, mage.cards.j.Jolt.class)); - cards.add(new SetCardInfo("Jungle Patrol", 223, Rarity.RARE, mage.cards.j.JunglePatrol.class)); - cards.add(new SetCardInfo("Jungle Troll", 269, Rarity.UNCOMMON, mage.cards.j.JungleTroll.class)); - cards.add(new SetCardInfo("Jungle Wurm", 224, Rarity.COMMON, mage.cards.j.JungleWurm.class)); - cards.add(new SetCardInfo("Kaervek's Hex", 130, Rarity.UNCOMMON, mage.cards.k.KaerveksHex.class)); - cards.add(new SetCardInfo("Kaervek's Purge", 270, Rarity.UNCOMMON, mage.cards.k.KaerveksPurge.class)); - cards.add(new SetCardInfo("Kaervek's Torch", 185, Rarity.COMMON, mage.cards.k.KaerveksTorch.class)); - cards.add(new SetCardInfo("Karoo Meerkat", 225, Rarity.UNCOMMON, mage.cards.k.KarooMeerkat.class)); - cards.add(new SetCardInfo("Kukemssa Pirates", 71, Rarity.RARE, mage.cards.k.KukemssaPirates.class)); - cards.add(new SetCardInfo("Kukemssa Serpent", 72, Rarity.COMMON, mage.cards.k.KukemssaSerpent.class)); - cards.add(new SetCardInfo("Lead Golem", 306, Rarity.UNCOMMON, mage.cards.l.LeadGolem.class)); - cards.add(new SetCardInfo("Leering Gargoyle", 271, Rarity.RARE, mage.cards.l.LeeringGargoyle.class)); - cards.add(new SetCardInfo("Lightning Reflexes", 186, Rarity.COMMON, mage.cards.l.LightningReflexes.class)); - cards.add(new SetCardInfo("Lion's Eye Diamond", 307, Rarity.RARE, mage.cards.l.LionsEyeDiamond.class)); - cards.add(new SetCardInfo("Locust Swarm", 226, Rarity.UNCOMMON, mage.cards.l.LocustSwarm.class)); - cards.add(new SetCardInfo("Lure of Prey", 227, Rarity.RARE, mage.cards.l.LureOfPrey.class)); - cards.add(new SetCardInfo("Malignant Growth", 272, Rarity.RARE, mage.cards.m.MalignantGrowth.class)); - cards.add(new SetCardInfo("Mana Prism", 308, Rarity.UNCOMMON, mage.cards.m.ManaPrism.class)); - cards.add(new SetCardInfo("Mangara's Tome", 309, Rarity.RARE, mage.cards.m.MangarasTome.class)); - cards.add(new SetCardInfo("Marble Diamond", 310, Rarity.UNCOMMON, mage.cards.m.MarbleDiamond.class)); - cards.add(new SetCardInfo("Maro", 228, Rarity.RARE, mage.cards.m.Maro.class)); - cards.add(new SetCardInfo("Melesse Spirit", 27, Rarity.UNCOMMON, mage.cards.m.MelesseSpirit.class)); - cards.add(new SetCardInfo("Memory Lapse", 74, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); - cards.add(new SetCardInfo("Merfolk Raiders", 75, Rarity.COMMON, mage.cards.m.MerfolkRaiders.class)); - cards.add(new SetCardInfo("Merfolk Seer", 76, Rarity.COMMON, mage.cards.m.MerfolkSeer.class)); - cards.add(new SetCardInfo("Mind Harness", 78, Rarity.UNCOMMON, mage.cards.m.MindHarness.class)); - cards.add(new SetCardInfo("Mire Shade", 131, Rarity.UNCOMMON, mage.cards.m.MireShade.class)); - cards.add(new SetCardInfo("Misers' Cage", 311, Rarity.RARE, mage.cards.m.MisersCage.class)); - cards.add(new SetCardInfo("Mist Dragon", 79, Rarity.RARE, mage.cards.m.MistDragon.class)); - cards.add(new SetCardInfo("Moss Diamond", 312, Rarity.UNCOMMON, mage.cards.m.MossDiamond.class)); - cards.add(new SetCardInfo("Mountain Valley", 328, Rarity.UNCOMMON, mage.cards.m.MountainValley.class)); - cards.add(new SetCardInfo("Mountain", 343, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 344, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 345, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 346, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mtenda Griffin", 28, Rarity.UNCOMMON, mage.cards.m.MtendaGriffin.class)); - cards.add(new SetCardInfo("Mtenda Herder", 29, Rarity.COMMON, mage.cards.m.MtendaHerder.class)); - cards.add(new SetCardInfo("Mtenda Lion", 230, Rarity.COMMON, mage.cards.m.MtendaLion.class)); - cards.add(new SetCardInfo("Mystical Tutor", 80, Rarity.UNCOMMON, mage.cards.m.MysticalTutor.class)); - cards.add(new SetCardInfo("Natural Balance", 231, Rarity.RARE, mage.cards.n.NaturalBalance.class)); - cards.add(new SetCardInfo("Nettletooth Djinn", 232, Rarity.UNCOMMON, mage.cards.n.NettletoothDjinn.class)); - cards.add(new SetCardInfo("Noble Elephant", 30, Rarity.COMMON, mage.cards.n.NobleElephant.class)); - cards.add(new SetCardInfo("Nocturnal Raid", 132, Rarity.UNCOMMON, mage.cards.n.NocturnalRaid.class)); - cards.add(new SetCardInfo("Null Chamber", 31, Rarity.RARE, mage.cards.n.NullChamber.class)); - cards.add(new SetCardInfo("Pacifism", 32, Rarity.COMMON, mage.cards.p.Pacifism.class)); - cards.add(new SetCardInfo("Painful Memories", 133, Rarity.UNCOMMON, mage.cards.p.PainfulMemories.class)); - cards.add(new SetCardInfo("Patagia Golem", 313, Rarity.UNCOMMON, mage.cards.p.PatagiaGolem.class)); - cards.add(new SetCardInfo("Paupers' Cage", 314, Rarity.RARE, mage.cards.p.PaupersCage.class)); - cards.add(new SetCardInfo("Pearl Dragon", 33, Rarity.RARE, mage.cards.p.PearlDragon.class)); - cards.add(new SetCardInfo("Phyrexian Dreadnought", 315, Rarity.RARE, mage.cards.p.PhyrexianDreadnought.class)); - cards.add(new SetCardInfo("Phyrexian Purge", 273, Rarity.RARE, mage.cards.p.PhyrexianPurge.class)); - cards.add(new SetCardInfo("Phyrexian Tribute", 134, Rarity.RARE, mage.cards.p.PhyrexianTribute.class)); - cards.add(new SetCardInfo("Phyrexian Vault", 316, Rarity.UNCOMMON, mage.cards.p.PhyrexianVault.class)); - cards.add(new SetCardInfo("Plains", 331, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 332, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 333, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 334, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Political Trickery", 81, Rarity.RARE, mage.cards.p.PoliticalTrickery.class)); - cards.add(new SetCardInfo("Polymorph", 82, Rarity.RARE, mage.cards.p.Polymorph.class)); - cards.add(new SetCardInfo("Power Sink", 83, Rarity.COMMON, mage.cards.p.PowerSink.class)); - cards.add(new SetCardInfo("Prismatic Boon", 274, Rarity.UNCOMMON, mage.cards.p.PrismaticBoon.class)); - cards.add(new SetCardInfo("Prismatic Circle", 34, Rarity.COMMON, mage.cards.p.PrismaticCircle.class)); - cards.add(new SetCardInfo("Prismatic Lace", 84, Rarity.RARE, mage.cards.p.PrismaticLace.class)); - cards.add(new SetCardInfo("Psychic Transfer", 85, Rarity.RARE, mage.cards.p.PsychicTransfer.class)); - cards.add(new SetCardInfo("Purgatory", 275, Rarity.RARE, mage.cards.p.Purgatory.class)); - cards.add(new SetCardInfo("Purraj of Urborg", 135, Rarity.RARE, mage.cards.p.PurrajOfUrborg.class)); - cards.add(new SetCardInfo("Pyric Salamander", 187, Rarity.COMMON, mage.cards.p.PyricSalamander.class)); - cards.add(new SetCardInfo("Quirion Elves", 234, Rarity.COMMON, mage.cards.q.QuirionElves.class)); - cards.add(new SetCardInfo("Radiant Essence", 276, Rarity.UNCOMMON, mage.cards.r.RadiantEssence.class)); - cards.add(new SetCardInfo("Raging Spirit", 188, Rarity.COMMON, mage.cards.r.RagingSpirit.class)); - cards.add(new SetCardInfo("Rampant Growth", 235, Rarity.COMMON, mage.cards.r.RampantGrowth.class)); - cards.add(new SetCardInfo("Rashida Scalebane", 35, Rarity.RARE, mage.cards.r.RashidaScalebane.class)); - cards.add(new SetCardInfo("Ravenous Vampire", 136, Rarity.UNCOMMON, mage.cards.r.RavenousVampire.class)); - cards.add(new SetCardInfo("Ray of Command", 86, Rarity.COMMON, mage.cards.r.RayOfCommand.class)); - cards.add(new SetCardInfo("Razor Pendulum", 317, Rarity.RARE, mage.cards.r.RazorPendulum.class)); - cards.add(new SetCardInfo("Reality Ripple", 87, Rarity.COMMON, mage.cards.r.RealityRipple.class)); - cards.add(new SetCardInfo("Reckless Embermage", 189, Rarity.RARE, mage.cards.r.RecklessEmbermage.class)); - cards.add(new SetCardInfo("Regeneration", 236, Rarity.COMMON, mage.cards.r.Regeneration.class)); - cards.add(new SetCardInfo("Reign of Chaos", 190, Rarity.UNCOMMON, mage.cards.r.ReignOfChaos.class)); - cards.add(new SetCardInfo("Reign of Terror", 137, Rarity.UNCOMMON, mage.cards.r.ReignOfTerror.class)); - cards.add(new SetCardInfo("Reparations", 278, Rarity.RARE, mage.cards.r.Reparations.class)); - cards.add(new SetCardInfo("Restless Dead", 138, Rarity.COMMON, mage.cards.r.RestlessDead.class)); - cards.add(new SetCardInfo("Ritual of Steel", 36, Rarity.COMMON, mage.cards.r.RitualOfSteel.class)); - cards.add(new SetCardInfo("Rock Basilisk", 279, Rarity.RARE, mage.cards.r.RockBasilisk.class)); - cards.add(new SetCardInfo("Rocky Tar Pit", 329, Rarity.UNCOMMON, mage.cards.r.RockyTarPit.class)); - cards.add(new SetCardInfo("Roots of Life", 237, Rarity.UNCOMMON, mage.cards.r.RootsOfLife.class)); - cards.add(new SetCardInfo("Sabertooth Cobra", 238, Rarity.COMMON, mage.cards.s.SabertoothCobra.class)); - cards.add(new SetCardInfo("Sacred Mesa", 37, Rarity.RARE, mage.cards.s.SacredMesa.class)); - cards.add(new SetCardInfo("Sandbar Crocodile", 88, Rarity.COMMON, mage.cards.s.SandbarCrocodile.class)); - cards.add(new SetCardInfo("Sandstorm", 239, Rarity.COMMON, mage.cards.s.Sandstorm.class)); - cards.add(new SetCardInfo("Sapphire Charm", 89, Rarity.COMMON, mage.cards.s.SapphireCharm.class)); - cards.add(new SetCardInfo("Savage Twister", 280, Rarity.UNCOMMON, mage.cards.s.SavageTwister.class)); - cards.add(new SetCardInfo("Sawback Manticore", 281, Rarity.RARE, mage.cards.s.SawbackManticore.class)); - cards.add(new SetCardInfo("Sea Scryer", 90, Rarity.COMMON, mage.cards.s.SeaScryer.class)); - cards.add(new SetCardInfo("Searing Spear Askari", 191, Rarity.COMMON, mage.cards.s.SearingSpearAskari.class)); - cards.add(new SetCardInfo("Seedling Charm", 240, Rarity.COMMON, mage.cards.s.SeedlingCharm.class)); - cards.add(new SetCardInfo("Seeds of Innocence", 241, Rarity.RARE, mage.cards.s.SeedsOfInnocence.class)); - cards.add(new SetCardInfo("Serene Heart", 242, Rarity.COMMON, mage.cards.s.SereneHeart.class)); - cards.add(new SetCardInfo("Sewer Rats", 139, Rarity.COMMON, mage.cards.s.SewerRats.class)); - cards.add(new SetCardInfo("Shadow Guildmage", 140, Rarity.COMMON, mage.cards.s.ShadowGuildmage.class)); - cards.add(new SetCardInfo("Shallow Grave", 141, Rarity.RARE, mage.cards.s.ShallowGrave.class)); - cards.add(new SetCardInfo("Shaper Guildmage", 91, Rarity.COMMON, mage.cards.s.ShaperGuildmage.class)); - cards.add(new SetCardInfo("Shauku's Minion", 283, Rarity.UNCOMMON, mage.cards.s.ShaukusMinion.class)); - cards.add(new SetCardInfo("Shauku, Endbringer", 142, Rarity.RARE, mage.cards.s.ShaukuEndbringer.class)); - cards.add(new SetCardInfo("Shimmer", 92, Rarity.RARE, mage.cards.s.Shimmer.class)); - cards.add(new SetCardInfo("Sidar Jabari", 39, Rarity.RARE, mage.cards.s.SidarJabari.class)); - cards.add(new SetCardInfo("Skulking Ghost", 143, Rarity.COMMON, mage.cards.s.SkulkingGhost.class)); - cards.add(new SetCardInfo("Sky Diamond", 319, Rarity.UNCOMMON, mage.cards.s.SkyDiamond.class)); - cards.add(new SetCardInfo("Soar", 93, Rarity.COMMON, mage.cards.s.Soar.class)); - cards.add(new SetCardInfo("Soul Echo", 40, Rarity.RARE, mage.cards.s.SoulEcho.class)); - cards.add(new SetCardInfo("Soul Rend", 144, Rarity.UNCOMMON, mage.cards.s.SoulRend.class)); - cards.add(new SetCardInfo("Soulshriek", 145, Rarity.COMMON, mage.cards.s.Soulshriek.class)); - cards.add(new SetCardInfo("Spectral Guardian", 41, Rarity.RARE, mage.cards.s.SpectralGuardian.class)); - cards.add(new SetCardInfo("Spirit of the Night", 146, Rarity.RARE, mage.cards.s.SpiritOfTheNight.class)); - cards.add(new SetCardInfo("Spitting Earth", 193, Rarity.COMMON, mage.cards.s.SpittingEarth.class)); - cards.add(new SetCardInfo("Stalking Tiger", 243, Rarity.COMMON, mage.cards.s.StalkingTiger.class)); - cards.add(new SetCardInfo("Stone Rain", 194, Rarity.COMMON, mage.cards.s.StoneRain.class)); - cards.add(new SetCardInfo("Stupor", 147, Rarity.UNCOMMON, mage.cards.s.Stupor.class)); - cards.add(new SetCardInfo("Subterranean Spirit", 195, Rarity.RARE, mage.cards.s.SubterraneanSpirit.class)); - cards.add(new SetCardInfo("Sunweb", 42, Rarity.RARE, mage.cards.s.Sunweb.class)); - cards.add(new SetCardInfo("Superior Numbers", 244, Rarity.UNCOMMON, mage.cards.s.SuperiorNumbers.class)); - cards.add(new SetCardInfo("Suq'Ata Firewalker", 94, Rarity.UNCOMMON, mage.cards.s.SuqAtaFirewalker.class)); - cards.add(new SetCardInfo("Swamp", 339, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 340, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 341, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 342, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Talruum Minotaur", 196, Rarity.COMMON, mage.cards.t.TalruumMinotaur.class)); - cards.add(new SetCardInfo("Taniwha", 95, Rarity.RARE, mage.cards.t.Taniwha.class)); - cards.add(new SetCardInfo("Teeka's Dragon", 320, Rarity.RARE, mage.cards.t.TeekasDragon.class)); - cards.add(new SetCardInfo("Teferi's Curse", 96, Rarity.COMMON, mage.cards.t.TeferisCurse.class)); - cards.add(new SetCardInfo("Teferi's Drake", 97, Rarity.COMMON, mage.cards.t.TeferisDrake.class)); - cards.add(new SetCardInfo("Teferi's Isle", 330, Rarity.RARE, mage.cards.t.TeferisIsle.class)); - cards.add(new SetCardInfo("Telim'Tor", 197, Rarity.RARE, mage.cards.t.TelimTor.class)); - cards.add(new SetCardInfo("Telim'Tor's Darts", 321, Rarity.UNCOMMON, mage.cards.t.TelimTorsDarts.class)); - cards.add(new SetCardInfo("Telim'Tor's Edict", 198, Rarity.RARE, mage.cards.t.TelimTorsEdict.class)); - cards.add(new SetCardInfo("Teremko Griffin", 43, Rarity.COMMON, mage.cards.t.TeremkoGriffin.class)); - cards.add(new SetCardInfo("Thirst", 99, Rarity.COMMON, mage.cards.t.Thirst.class)); - cards.add(new SetCardInfo("Tidal Wave", 100, Rarity.UNCOMMON, mage.cards.t.TidalWave.class)); - cards.add(new SetCardInfo("Tombstone Stairwell", 149, Rarity.RARE, mage.cards.t.TombstoneStairwell.class)); - cards.add(new SetCardInfo("Tranquil Domain", 245, Rarity.COMMON, mage.cards.t.TranquilDomain.class)); - cards.add(new SetCardInfo("Tropical Storm", 246, Rarity.UNCOMMON, mage.cards.t.TropicalStorm.class)); - cards.add(new SetCardInfo("Uktabi Faerie", 247, Rarity.COMMON, mage.cards.u.UktabiFaerie.class)); - cards.add(new SetCardInfo("Uktabi Wildcats", 248, Rarity.RARE, mage.cards.u.UktabiWildcats.class)); - cards.add(new SetCardInfo("Unfulfilled Desires", 285, Rarity.RARE, mage.cards.u.UnfulfilledDesires.class)); - cards.add(new SetCardInfo("Unseen Walker", 249, Rarity.UNCOMMON, mage.cards.u.UnseenWalker.class)); - cards.add(new SetCardInfo("Unyaro Bee Sting", 250, Rarity.UNCOMMON, mage.cards.u.UnyaroBeeSting.class)); - cards.add(new SetCardInfo("Unyaro Griffin", 44, Rarity.UNCOMMON, mage.cards.u.UnyaroGriffin.class)); - cards.add(new SetCardInfo("Urborg Panther", 150, Rarity.COMMON, mage.cards.u.UrborgPanther.class)); - cards.add(new SetCardInfo("Vaporous Djinn", 101, Rarity.UNCOMMON, mage.cards.v.VaporousDjinn.class)); - cards.add(new SetCardInfo("Ventifact Bottle", 323, Rarity.RARE, mage.cards.v.VentifactBottle.class)); - cards.add(new SetCardInfo("Viashino Warrior", 200, Rarity.COMMON, mage.cards.v.ViashinoWarrior.class)); - cards.add(new SetCardInfo("Vigilant Martyr", 45, Rarity.UNCOMMON, mage.cards.v.VigilantMartyr.class)); - cards.add(new SetCardInfo("Village Elder", 251, Rarity.COMMON, mage.cards.v.VillageElder.class)); - cards.add(new SetCardInfo("Vitalizing Cascade", 286, Rarity.UNCOMMON, mage.cards.v.VitalizingCascade.class)); - cards.add(new SetCardInfo("Volcanic Dragon", 201, Rarity.RARE, mage.cards.v.VolcanicDragon.class)); - cards.add(new SetCardInfo("Volcanic Geyser", 202, Rarity.UNCOMMON, mage.cards.v.VolcanicGeyser.class)); - cards.add(new SetCardInfo("Waiting in the Weeds", 252, Rarity.RARE, mage.cards.w.WaitingInTheWeeds.class)); - cards.add(new SetCardInfo("Wall of Resistance", 46, Rarity.COMMON, mage.cards.w.WallOfResistance.class)); - cards.add(new SetCardInfo("Wall of Roots", 253, Rarity.COMMON, mage.cards.w.WallOfRoots.class)); - cards.add(new SetCardInfo("Ward of Lights", 47, Rarity.COMMON, mage.cards.w.WardOfLights.class)); - cards.add(new SetCardInfo("Warping Wurm", 287, Rarity.RARE, mage.cards.w.WarpingWurm.class)); - cards.add(new SetCardInfo("Wave Elemental", 102, Rarity.UNCOMMON, mage.cards.w.WaveElemental.class)); - cards.add(new SetCardInfo("Wellspring", 288, Rarity.RARE, mage.cards.w.Wellspring.class)); - cards.add(new SetCardInfo("Wild Elephant", 254, Rarity.COMMON, mage.cards.w.WildElephant.class)); - cards.add(new SetCardInfo("Wildfire Emissary", 203, Rarity.UNCOMMON, mage.cards.w.WildfireEmissary.class)); - cards.add(new SetCardInfo("Windreaper Falcon", 289, Rarity.UNCOMMON, mage.cards.w.WindreaperFalcon.class)); - cards.add(new SetCardInfo("Withering Boon", 152, Rarity.UNCOMMON, mage.cards.w.WitheringBoon.class)); - cards.add(new SetCardInfo("Worldly Tutor", 255, Rarity.UNCOMMON, mage.cards.w.WorldlyTutor.class)); - cards.add(new SetCardInfo("Zebra Unicorn", 290, Rarity.UNCOMMON, mage.cards.z.ZebraUnicorn.class)); - cards.add(new SetCardInfo("Zhalfirin Commander", 49, Rarity.UNCOMMON, mage.cards.z.ZhalfirinCommander.class)); - cards.add(new SetCardInfo("Zhalfirin Knight", 50, Rarity.COMMON, mage.cards.z.ZhalfirinKnight.class)); - cards.add(new SetCardInfo("Zirilan of the Claw", 204, Rarity.RARE, mage.cards.z.ZirilanOfTheClaw.class)); - cards.add(new SetCardInfo("Zombie Mob", 153, Rarity.UNCOMMON, mage.cards.z.ZombieMob.class)); - cards.add(new SetCardInfo("Zuberi, Golden Feather", 51, Rarity.RARE, mage.cards.z.ZuberiGoldenFeather.class)); - } + cards.add(new SetCardInfo("Crypt Cobra", 114, Rarity.UNCOMMON, mage.cards.c.CryptCobra.class)); + cards.add(new SetCardInfo("Crystal Golem", 298, Rarity.UNCOMMON, mage.cards.c.CrystalGolem.class)); + cards.add(new SetCardInfo("Crystal Vein", 325, Rarity.UNCOMMON, mage.cards.c.CrystalVein.class)); + cards.add(new SetCardInfo("Cursed Totem", 299, Rarity.RARE, mage.cards.c.CursedTotem.class)); + cards.add(new SetCardInfo("Daring Apprentice", 60, Rarity.RARE, mage.cards.d.DaringApprentice.class)); + cards.add(new SetCardInfo("Dark Banishing", 115, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); + cards.add(new SetCardInfo("Dark Ritual", 116, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Dazzling Beauty", 8, Rarity.COMMON, mage.cards.d.DazzlingBeauty.class)); + cards.add(new SetCardInfo("Delirium", 260, Rarity.UNCOMMON, mage.cards.d.Delirium.class)); + cards.add(new SetCardInfo("Dirtwater Wraith", 117, Rarity.COMMON, mage.cards.d.DirtwaterWraith.class)); + cards.add(new SetCardInfo("Disempower", 9, Rarity.COMMON, mage.cards.d.Disempower.class)); + cards.add(new SetCardInfo("Disenchant", 10, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Dissipate", 61, Rarity.UNCOMMON, mage.cards.d.Dissipate.class)); + cards.add(new SetCardInfo("Divine Offering", 11, Rarity.COMMON, mage.cards.d.DivineOffering.class)); + cards.add(new SetCardInfo("Divine Retribution", 12, Rarity.RARE, mage.cards.d.DivineRetribution.class)); + cards.add(new SetCardInfo("Drain Life", 118, Rarity.COMMON, mage.cards.d.DrainLife.class)); + cards.add(new SetCardInfo("Dread Specter", 119, Rarity.UNCOMMON, mage.cards.d.DreadSpecter.class)); + cards.add(new SetCardInfo("Dream Cache", 62, Rarity.COMMON, mage.cards.d.DreamCache.class)); + cards.add(new SetCardInfo("Dwarven Miner", 169, Rarity.UNCOMMON, mage.cards.d.DwarvenMiner.class)); + cards.add(new SetCardInfo("Dwarven Nomad", 170, Rarity.COMMON, mage.cards.d.DwarvenNomad.class)); + cards.add(new SetCardInfo("Early Harvest", 213, Rarity.RARE, mage.cards.e.EarlyHarvest.class)); + cards.add(new SetCardInfo("Ebony Charm", 120, Rarity.COMMON, mage.cards.e.EbonyCharm.class)); + cards.add(new SetCardInfo("Ekundu Griffin", 13, Rarity.COMMON, mage.cards.e.EkunduGriffin.class)); + cards.add(new SetCardInfo("Elixir of Vitality", 300, Rarity.UNCOMMON, mage.cards.e.ElixirOfVitality.class)); + cards.add(new SetCardInfo("Emberwilde Caliph", 322, Rarity.RARE, mage.cards.e.EmberwildeCaliph.class)); + cards.add(new SetCardInfo("Emberwilde Djinn", 172, Rarity.RARE, mage.cards.e.EmberwildeDjinn.class)); + cards.add(new SetCardInfo("Energy Bolt", 263, Rarity.RARE, mage.cards.e.EnergyBolt.class)); + cards.add(new SetCardInfo("Energy Vortex", 64, Rarity.RARE, mage.cards.e.EnergyVortex.class)); + cards.add(new SetCardInfo("Enfeeblement", 121, Rarity.COMMON, mage.cards.e.Enfeeblement.class)); + cards.add(new SetCardInfo("Enlightened Tutor", 14, Rarity.UNCOMMON, mage.cards.e.EnlightenedTutor.class)); + cards.add(new SetCardInfo("Ersatz Gnomes", 301, Rarity.UNCOMMON, mage.cards.e.ErsatzGnomes.class)); + cards.add(new SetCardInfo("Ether Well", 65, Rarity.UNCOMMON, mage.cards.e.EtherWell.class)); + cards.add(new SetCardInfo("Ethereal Champion", 15, Rarity.RARE, mage.cards.e.EtherealChampion.class)); + cards.add(new SetCardInfo("Fallow Earth", 214, Rarity.UNCOMMON, mage.cards.f.FallowEarth.class)); + cards.add(new SetCardInfo("Favorable Destiny", 16, Rarity.UNCOMMON, mage.cards.f.FavorableDestiny.class)); + cards.add(new SetCardInfo("Femeref Archers", 215, Rarity.UNCOMMON, mage.cards.f.FemerefArchers.class)); + cards.add(new SetCardInfo("Femeref Healer", 17, Rarity.COMMON, mage.cards.f.FemerefHealer.class)); + cards.add(new SetCardInfo("Femeref Knight", 18, Rarity.COMMON, mage.cards.f.FemerefKnight.class)); + cards.add(new SetCardInfo("Femeref Scouts", 19, Rarity.COMMON, mage.cards.f.FemerefScouts.class)); + cards.add(new SetCardInfo("Feral Shadow", 122, Rarity.COMMON, mage.cards.f.FeralShadow.class)); + cards.add(new SetCardInfo("Fetid Horror", 123, Rarity.COMMON, mage.cards.f.FetidHorror.class)); + cards.add(new SetCardInfo("Final Fortune", 173, Rarity.RARE, mage.cards.f.FinalFortune.class)); + cards.add(new SetCardInfo("Fire Diamond", 302, Rarity.UNCOMMON, mage.cards.f.FireDiamond.class)); + cards.add(new SetCardInfo("Firebreathing", 174, Rarity.COMMON, mage.cards.f.Firebreathing.class)); + cards.add(new SetCardInfo("Flame Elemental", 175, Rarity.UNCOMMON, mage.cards.f.FlameElemental.class)); + cards.add(new SetCardInfo("Flare", 176, Rarity.COMMON, mage.cards.f.Flare.class)); + cards.add(new SetCardInfo("Flash", 66, Rarity.RARE, mage.cards.f.Flash.class)); + cards.add(new SetCardInfo("Flood Plain", 326, Rarity.UNCOMMON, mage.cards.f.FloodPlain.class)); + cards.add(new SetCardInfo("Floodgate", 67, Rarity.UNCOMMON, mage.cards.f.Floodgate.class)); + cards.add(new SetCardInfo("Fog", 216, Rarity.COMMON, mage.cards.f.Fog.class)); + cards.add(new SetCardInfo("Foratog", 217, Rarity.UNCOMMON, mage.cards.f.Foratog.class)); + cards.add(new SetCardInfo("Forbidden Crypt", 124, Rarity.RARE, mage.cards.f.ForbiddenCrypt.class)); + cards.add(new SetCardInfo("Forest", 347, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 348, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 349, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 350, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forsaken Wastes", 125, Rarity.RARE, mage.cards.f.ForsakenWastes.class)); + cards.add(new SetCardInfo("Frenetic Efreet", 264, Rarity.RARE, mage.cards.f.FreneticEfreet.class)); + cards.add(new SetCardInfo("Giant Mantis", 218, Rarity.COMMON, mage.cards.g.GiantMantis.class)); + cards.add(new SetCardInfo("Gibbering Hyenas", 219, Rarity.COMMON, mage.cards.g.GibberingHyenas.class)); + cards.add(new SetCardInfo("Goblin Elite Infantry", 177, Rarity.COMMON, mage.cards.g.GoblinEliteInfantry.class)); + cards.add(new SetCardInfo("Goblin Scouts", 178, Rarity.UNCOMMON, mage.cards.g.GoblinScouts.class)); + cards.add(new SetCardInfo("Goblin Soothsayer", 179, Rarity.UNCOMMON, mage.cards.g.GoblinSoothsayer.class)); + cards.add(new SetCardInfo("Goblin Tinkerer", 180, Rarity.COMMON, mage.cards.g.GoblinTinkerer.class)); + cards.add(new SetCardInfo("Granger Guildmage", 220, Rarity.COMMON, mage.cards.g.GrangerGuildmage.class)); + cards.add(new SetCardInfo("Grasslands", 327, Rarity.UNCOMMON, mage.cards.g.Grasslands.class)); + cards.add(new SetCardInfo("Grave Servitude", 126, Rarity.COMMON, mage.cards.g.GraveServitude.class)); + cards.add(new SetCardInfo("Gravebane Zombie", 127, Rarity.COMMON, mage.cards.g.GravebaneZombie.class)); + cards.add(new SetCardInfo("Grim Feast", 265, Rarity.RARE, mage.cards.g.GrimFeast.class)); + cards.add(new SetCardInfo("Grinning Totem", 303, Rarity.RARE, mage.cards.g.GrinningTotem.class)); + cards.add(new SetCardInfo("Hakim, Loreweaver", 68, Rarity.RARE, mage.cards.h.HakimLoreweaver.class)); + cards.add(new SetCardInfo("Hall of Gemstone", 221, Rarity.RARE, mage.cards.h.HallOfGemstone.class)); + cards.add(new SetCardInfo("Hammer of Bogardan", 181, Rarity.RARE, mage.cards.h.HammerOfBogardan.class)); + cards.add(new SetCardInfo("Harbinger of Night", 128, Rarity.RARE, mage.cards.h.HarbingerOfNight.class)); + cards.add(new SetCardInfo("Harbor Guardian", 266, Rarity.UNCOMMON, mage.cards.h.HarborGuardian.class)); + cards.add(new SetCardInfo("Harmattan Efreet", 69, Rarity.UNCOMMON, mage.cards.h.HarmattanEfreet.class)); + cards.add(new SetCardInfo("Hazerider Drake", 268, Rarity.UNCOMMON, mage.cards.h.HazeriderDrake.class)); + cards.add(new SetCardInfo("Healing Salve", 20, Rarity.COMMON, mage.cards.h.HealingSalve.class)); + cards.add(new SetCardInfo("Hivis of the Scale", 182, Rarity.RARE, mage.cards.h.HivisOfTheScale.class)); + cards.add(new SetCardInfo("Horrible Hordes", 304, Rarity.UNCOMMON, mage.cards.h.HorribleHordes.class)); + cards.add(new SetCardInfo("Igneous Golem", 305, Rarity.UNCOMMON, mage.cards.i.IgneousGolem.class)); + cards.add(new SetCardInfo("Illicit Auction", 183, Rarity.RARE, mage.cards.i.IllicitAuction.class)); + cards.add(new SetCardInfo("Illumination", 21, Rarity.UNCOMMON, mage.cards.i.Illumination.class)); + cards.add(new SetCardInfo("Incinerate", 184, Rarity.COMMON, mage.cards.i.Incinerate.class)); + cards.add(new SetCardInfo("Infernal Contract", 129, Rarity.RARE, mage.cards.i.InfernalContract.class)); + cards.add(new SetCardInfo("Iron Tusk Elephant", 22, Rarity.UNCOMMON, mage.cards.i.IronTuskElephant.class)); + cards.add(new SetCardInfo("Island", 335, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 336, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 337, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 338, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ivory Charm", 23, Rarity.COMMON, mage.cards.i.IvoryCharm.class)); + cards.add(new SetCardInfo("Jolrael's Centaur", 222, Rarity.COMMON, mage.cards.j.JolraelsCentaur.class)); + cards.add(new SetCardInfo("Jolt", 70, Rarity.COMMON, mage.cards.j.Jolt.class)); + cards.add(new SetCardInfo("Jungle Patrol", 223, Rarity.RARE, mage.cards.j.JunglePatrol.class)); + cards.add(new SetCardInfo("Jungle Troll", 269, Rarity.UNCOMMON, mage.cards.j.JungleTroll.class)); + cards.add(new SetCardInfo("Jungle Wurm", 224, Rarity.COMMON, mage.cards.j.JungleWurm.class)); + cards.add(new SetCardInfo("Kaervek's Hex", 130, Rarity.UNCOMMON, mage.cards.k.KaerveksHex.class)); + cards.add(new SetCardInfo("Kaervek's Purge", 270, Rarity.UNCOMMON, mage.cards.k.KaerveksPurge.class)); + cards.add(new SetCardInfo("Kaervek's Torch", 185, Rarity.COMMON, mage.cards.k.KaerveksTorch.class)); + cards.add(new SetCardInfo("Karoo Meerkat", 225, Rarity.UNCOMMON, mage.cards.k.KarooMeerkat.class)); + cards.add(new SetCardInfo("Kukemssa Pirates", 71, Rarity.RARE, mage.cards.k.KukemssaPirates.class)); + cards.add(new SetCardInfo("Kukemssa Serpent", 72, Rarity.COMMON, mage.cards.k.KukemssaSerpent.class)); + cards.add(new SetCardInfo("Lead Golem", 306, Rarity.UNCOMMON, mage.cards.l.LeadGolem.class)); + cards.add(new SetCardInfo("Leering Gargoyle", 271, Rarity.RARE, mage.cards.l.LeeringGargoyle.class)); + cards.add(new SetCardInfo("Lightning Reflexes", 186, Rarity.COMMON, mage.cards.l.LightningReflexes.class)); + cards.add(new SetCardInfo("Lion's Eye Diamond", 307, Rarity.RARE, mage.cards.l.LionsEyeDiamond.class)); + cards.add(new SetCardInfo("Locust Swarm", 226, Rarity.UNCOMMON, mage.cards.l.LocustSwarm.class)); + cards.add(new SetCardInfo("Lure of Prey", 227, Rarity.RARE, mage.cards.l.LureOfPrey.class)); + cards.add(new SetCardInfo("Malignant Growth", 272, Rarity.RARE, mage.cards.m.MalignantGrowth.class)); + cards.add(new SetCardInfo("Mana Prism", 308, Rarity.UNCOMMON, mage.cards.m.ManaPrism.class)); + cards.add(new SetCardInfo("Mangara's Tome", 309, Rarity.RARE, mage.cards.m.MangarasTome.class)); + cards.add(new SetCardInfo("Marble Diamond", 310, Rarity.UNCOMMON, mage.cards.m.MarbleDiamond.class)); + cards.add(new SetCardInfo("Maro", 228, Rarity.RARE, mage.cards.m.Maro.class)); + cards.add(new SetCardInfo("Melesse Spirit", 27, Rarity.UNCOMMON, mage.cards.m.MelesseSpirit.class)); + cards.add(new SetCardInfo("Memory Lapse", 74, Rarity.COMMON, mage.cards.m.MemoryLapse.class)); + cards.add(new SetCardInfo("Merfolk Raiders", 75, Rarity.COMMON, mage.cards.m.MerfolkRaiders.class)); + cards.add(new SetCardInfo("Merfolk Seer", 76, Rarity.COMMON, mage.cards.m.MerfolkSeer.class)); + cards.add(new SetCardInfo("Mind Harness", 78, Rarity.UNCOMMON, mage.cards.m.MindHarness.class)); + cards.add(new SetCardInfo("Mire Shade", 131, Rarity.UNCOMMON, mage.cards.m.MireShade.class)); + cards.add(new SetCardInfo("Misers' Cage", 311, Rarity.RARE, mage.cards.m.MisersCage.class)); + cards.add(new SetCardInfo("Mist Dragon", 79, Rarity.RARE, mage.cards.m.MistDragon.class)); + cards.add(new SetCardInfo("Moss Diamond", 312, Rarity.UNCOMMON, mage.cards.m.MossDiamond.class)); + cards.add(new SetCardInfo("Mountain Valley", 328, Rarity.UNCOMMON, mage.cards.m.MountainValley.class)); + cards.add(new SetCardInfo("Mountain", 343, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 344, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 345, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 346, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mtenda Griffin", 28, Rarity.UNCOMMON, mage.cards.m.MtendaGriffin.class)); + cards.add(new SetCardInfo("Mtenda Herder", 29, Rarity.COMMON, mage.cards.m.MtendaHerder.class)); + cards.add(new SetCardInfo("Mtenda Lion", 230, Rarity.COMMON, mage.cards.m.MtendaLion.class)); + cards.add(new SetCardInfo("Mystical Tutor", 80, Rarity.UNCOMMON, mage.cards.m.MysticalTutor.class)); + cards.add(new SetCardInfo("Natural Balance", 231, Rarity.RARE, mage.cards.n.NaturalBalance.class)); + cards.add(new SetCardInfo("Nettletooth Djinn", 232, Rarity.UNCOMMON, mage.cards.n.NettletoothDjinn.class)); + cards.add(new SetCardInfo("Noble Elephant", 30, Rarity.COMMON, mage.cards.n.NobleElephant.class)); + cards.add(new SetCardInfo("Nocturnal Raid", 132, Rarity.UNCOMMON, mage.cards.n.NocturnalRaid.class)); + cards.add(new SetCardInfo("Null Chamber", 31, Rarity.RARE, mage.cards.n.NullChamber.class)); + cards.add(new SetCardInfo("Pacifism", 32, Rarity.COMMON, mage.cards.p.Pacifism.class)); + cards.add(new SetCardInfo("Painful Memories", 133, Rarity.UNCOMMON, mage.cards.p.PainfulMemories.class)); + cards.add(new SetCardInfo("Patagia Golem", 313, Rarity.UNCOMMON, mage.cards.p.PatagiaGolem.class)); + cards.add(new SetCardInfo("Paupers' Cage", 314, Rarity.RARE, mage.cards.p.PaupersCage.class)); + cards.add(new SetCardInfo("Pearl Dragon", 33, Rarity.RARE, mage.cards.p.PearlDragon.class)); + cards.add(new SetCardInfo("Phyrexian Dreadnought", 315, Rarity.RARE, mage.cards.p.PhyrexianDreadnought.class)); + cards.add(new SetCardInfo("Phyrexian Purge", 273, Rarity.RARE, mage.cards.p.PhyrexianPurge.class)); + cards.add(new SetCardInfo("Phyrexian Tribute", 134, Rarity.RARE, mage.cards.p.PhyrexianTribute.class)); + cards.add(new SetCardInfo("Phyrexian Vault", 316, Rarity.UNCOMMON, mage.cards.p.PhyrexianVault.class)); + cards.add(new SetCardInfo("Plains", 331, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 332, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 333, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 334, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Political Trickery", 81, Rarity.RARE, mage.cards.p.PoliticalTrickery.class)); + cards.add(new SetCardInfo("Polymorph", 82, Rarity.RARE, mage.cards.p.Polymorph.class)); + cards.add(new SetCardInfo("Power Sink", 83, Rarity.COMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Prismatic Boon", 274, Rarity.UNCOMMON, mage.cards.p.PrismaticBoon.class)); + cards.add(new SetCardInfo("Prismatic Circle", 34, Rarity.COMMON, mage.cards.p.PrismaticCircle.class)); + cards.add(new SetCardInfo("Prismatic Lace", 84, Rarity.RARE, mage.cards.p.PrismaticLace.class)); + cards.add(new SetCardInfo("Psychic Transfer", 85, Rarity.RARE, mage.cards.p.PsychicTransfer.class)); + cards.add(new SetCardInfo("Purgatory", 275, Rarity.RARE, mage.cards.p.Purgatory.class)); + cards.add(new SetCardInfo("Purraj of Urborg", 135, Rarity.RARE, mage.cards.p.PurrajOfUrborg.class)); + cards.add(new SetCardInfo("Pyric Salamander", 187, Rarity.COMMON, mage.cards.p.PyricSalamander.class)); + cards.add(new SetCardInfo("Quirion Elves", 234, Rarity.COMMON, mage.cards.q.QuirionElves.class)); + cards.add(new SetCardInfo("Radiant Essence", 276, Rarity.UNCOMMON, mage.cards.r.RadiantEssence.class)); + cards.add(new SetCardInfo("Raging Spirit", 188, Rarity.COMMON, mage.cards.r.RagingSpirit.class)); + cards.add(new SetCardInfo("Rampant Growth", 235, Rarity.COMMON, mage.cards.r.RampantGrowth.class)); + cards.add(new SetCardInfo("Rashida Scalebane", 35, Rarity.RARE, mage.cards.r.RashidaScalebane.class)); + cards.add(new SetCardInfo("Ravenous Vampire", 136, Rarity.UNCOMMON, mage.cards.r.RavenousVampire.class)); + cards.add(new SetCardInfo("Ray of Command", 86, Rarity.COMMON, mage.cards.r.RayOfCommand.class)); + cards.add(new SetCardInfo("Razor Pendulum", 317, Rarity.RARE, mage.cards.r.RazorPendulum.class)); + cards.add(new SetCardInfo("Reality Ripple", 87, Rarity.COMMON, mage.cards.r.RealityRipple.class)); + cards.add(new SetCardInfo("Reckless Embermage", 189, Rarity.RARE, mage.cards.r.RecklessEmbermage.class)); + cards.add(new SetCardInfo("Regeneration", 236, Rarity.COMMON, mage.cards.r.Regeneration.class)); + cards.add(new SetCardInfo("Reign of Chaos", 190, Rarity.UNCOMMON, mage.cards.r.ReignOfChaos.class)); + cards.add(new SetCardInfo("Reign of Terror", 137, Rarity.UNCOMMON, mage.cards.r.ReignOfTerror.class)); + cards.add(new SetCardInfo("Reparations", 278, Rarity.RARE, mage.cards.r.Reparations.class)); + cards.add(new SetCardInfo("Restless Dead", 138, Rarity.COMMON, mage.cards.r.RestlessDead.class)); + cards.add(new SetCardInfo("Ritual of Steel", 36, Rarity.COMMON, mage.cards.r.RitualOfSteel.class)); + cards.add(new SetCardInfo("Rock Basilisk", 279, Rarity.RARE, mage.cards.r.RockBasilisk.class)); + cards.add(new SetCardInfo("Rocky Tar Pit", 329, Rarity.UNCOMMON, mage.cards.r.RockyTarPit.class)); + cards.add(new SetCardInfo("Roots of Life", 237, Rarity.UNCOMMON, mage.cards.r.RootsOfLife.class)); + cards.add(new SetCardInfo("Sabertooth Cobra", 238, Rarity.COMMON, mage.cards.s.SabertoothCobra.class)); + cards.add(new SetCardInfo("Sacred Mesa", 37, Rarity.RARE, mage.cards.s.SacredMesa.class)); + cards.add(new SetCardInfo("Sandbar Crocodile", 88, Rarity.COMMON, mage.cards.s.SandbarCrocodile.class)); + cards.add(new SetCardInfo("Sandstorm", 239, Rarity.COMMON, mage.cards.s.Sandstorm.class)); + cards.add(new SetCardInfo("Sapphire Charm", 89, Rarity.COMMON, mage.cards.s.SapphireCharm.class)); + cards.add(new SetCardInfo("Savage Twister", 280, Rarity.UNCOMMON, mage.cards.s.SavageTwister.class)); + cards.add(new SetCardInfo("Sawback Manticore", 281, Rarity.RARE, mage.cards.s.SawbackManticore.class)); + cards.add(new SetCardInfo("Sea Scryer", 90, Rarity.COMMON, mage.cards.s.SeaScryer.class)); + cards.add(new SetCardInfo("Searing Spear Askari", 191, Rarity.COMMON, mage.cards.s.SearingSpearAskari.class)); + cards.add(new SetCardInfo("Seedling Charm", 240, Rarity.COMMON, mage.cards.s.SeedlingCharm.class)); + cards.add(new SetCardInfo("Seeds of Innocence", 241, Rarity.RARE, mage.cards.s.SeedsOfInnocence.class)); + cards.add(new SetCardInfo("Serene Heart", 242, Rarity.COMMON, mage.cards.s.SereneHeart.class)); + cards.add(new SetCardInfo("Sewer Rats", 139, Rarity.COMMON, mage.cards.s.SewerRats.class)); + cards.add(new SetCardInfo("Shadow Guildmage", 140, Rarity.COMMON, mage.cards.s.ShadowGuildmage.class)); + cards.add(new SetCardInfo("Shallow Grave", 141, Rarity.RARE, mage.cards.s.ShallowGrave.class)); + cards.add(new SetCardInfo("Shaper Guildmage", 91, Rarity.COMMON, mage.cards.s.ShaperGuildmage.class)); + cards.add(new SetCardInfo("Shauku's Minion", 283, Rarity.UNCOMMON, mage.cards.s.ShaukusMinion.class)); + cards.add(new SetCardInfo("Shauku, Endbringer", 142, Rarity.RARE, mage.cards.s.ShaukuEndbringer.class)); + cards.add(new SetCardInfo("Shimmer", 92, Rarity.RARE, mage.cards.s.Shimmer.class)); + cards.add(new SetCardInfo("Sidar Jabari", 39, Rarity.RARE, mage.cards.s.SidarJabari.class)); + cards.add(new SetCardInfo("Skulking Ghost", 143, Rarity.COMMON, mage.cards.s.SkulkingGhost.class)); + cards.add(new SetCardInfo("Sky Diamond", 319, Rarity.UNCOMMON, mage.cards.s.SkyDiamond.class)); + cards.add(new SetCardInfo("Soar", 93, Rarity.COMMON, mage.cards.s.Soar.class)); + cards.add(new SetCardInfo("Soul Echo", 40, Rarity.RARE, mage.cards.s.SoulEcho.class)); + cards.add(new SetCardInfo("Soul Rend", 144, Rarity.UNCOMMON, mage.cards.s.SoulRend.class)); + cards.add(new SetCardInfo("Soulshriek", 145, Rarity.COMMON, mage.cards.s.Soulshriek.class)); + cards.add(new SetCardInfo("Spectral Guardian", 41, Rarity.RARE, mage.cards.s.SpectralGuardian.class)); + cards.add(new SetCardInfo("Spirit of the Night", 146, Rarity.RARE, mage.cards.s.SpiritOfTheNight.class)); + cards.add(new SetCardInfo("Spitting Earth", 193, Rarity.COMMON, mage.cards.s.SpittingEarth.class)); + cards.add(new SetCardInfo("Stalking Tiger", 243, Rarity.COMMON, mage.cards.s.StalkingTiger.class)); + cards.add(new SetCardInfo("Stone Rain", 194, Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Stupor", 147, Rarity.UNCOMMON, mage.cards.s.Stupor.class)); + cards.add(new SetCardInfo("Subterranean Spirit", 195, Rarity.RARE, mage.cards.s.SubterraneanSpirit.class)); + cards.add(new SetCardInfo("Sunweb", 42, Rarity.RARE, mage.cards.s.Sunweb.class)); + cards.add(new SetCardInfo("Superior Numbers", 244, Rarity.UNCOMMON, mage.cards.s.SuperiorNumbers.class)); + cards.add(new SetCardInfo("Suq'Ata Firewalker", 94, Rarity.UNCOMMON, mage.cards.s.SuqAtaFirewalker.class)); + cards.add(new SetCardInfo("Swamp", 339, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 340, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 341, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 342, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Talruum Minotaur", 196, Rarity.COMMON, mage.cards.t.TalruumMinotaur.class)); + cards.add(new SetCardInfo("Taniwha", 95, Rarity.RARE, mage.cards.t.Taniwha.class)); + cards.add(new SetCardInfo("Teeka's Dragon", 320, Rarity.RARE, mage.cards.t.TeekasDragon.class)); + cards.add(new SetCardInfo("Teferi's Curse", 96, Rarity.COMMON, mage.cards.t.TeferisCurse.class)); + cards.add(new SetCardInfo("Teferi's Drake", 97, Rarity.COMMON, mage.cards.t.TeferisDrake.class)); + cards.add(new SetCardInfo("Teferi's Isle", 330, Rarity.RARE, mage.cards.t.TeferisIsle.class)); + cards.add(new SetCardInfo("Telim'Tor", 197, Rarity.RARE, mage.cards.t.TelimTor.class)); + cards.add(new SetCardInfo("Telim'Tor's Darts", 321, Rarity.UNCOMMON, mage.cards.t.TelimTorsDarts.class)); + cards.add(new SetCardInfo("Telim'Tor's Edict", 198, Rarity.RARE, mage.cards.t.TelimTorsEdict.class)); + cards.add(new SetCardInfo("Teremko Griffin", 43, Rarity.COMMON, mage.cards.t.TeremkoGriffin.class)); + cards.add(new SetCardInfo("Thirst", 99, Rarity.COMMON, mage.cards.t.Thirst.class)); + cards.add(new SetCardInfo("Tidal Wave", 100, Rarity.UNCOMMON, mage.cards.t.TidalWave.class)); + cards.add(new SetCardInfo("Tombstone Stairwell", 149, Rarity.RARE, mage.cards.t.TombstoneStairwell.class)); + cards.add(new SetCardInfo("Tranquil Domain", 245, Rarity.COMMON, mage.cards.t.TranquilDomain.class)); + cards.add(new SetCardInfo("Tropical Storm", 246, Rarity.UNCOMMON, mage.cards.t.TropicalStorm.class)); + cards.add(new SetCardInfo("Uktabi Faerie", 247, Rarity.COMMON, mage.cards.u.UktabiFaerie.class)); + cards.add(new SetCardInfo("Uktabi Wildcats", 248, Rarity.RARE, mage.cards.u.UktabiWildcats.class)); + cards.add(new SetCardInfo("Unfulfilled Desires", 285, Rarity.RARE, mage.cards.u.UnfulfilledDesires.class)); + cards.add(new SetCardInfo("Unseen Walker", 249, Rarity.UNCOMMON, mage.cards.u.UnseenWalker.class)); + cards.add(new SetCardInfo("Unyaro Bee Sting", 250, Rarity.UNCOMMON, mage.cards.u.UnyaroBeeSting.class)); + cards.add(new SetCardInfo("Unyaro Griffin", 44, Rarity.UNCOMMON, mage.cards.u.UnyaroGriffin.class)); + cards.add(new SetCardInfo("Urborg Panther", 150, Rarity.COMMON, mage.cards.u.UrborgPanther.class)); + cards.add(new SetCardInfo("Vaporous Djinn", 101, Rarity.UNCOMMON, mage.cards.v.VaporousDjinn.class)); + cards.add(new SetCardInfo("Ventifact Bottle", 323, Rarity.RARE, mage.cards.v.VentifactBottle.class)); + cards.add(new SetCardInfo("Viashino Warrior", 200, Rarity.COMMON, mage.cards.v.ViashinoWarrior.class)); + cards.add(new SetCardInfo("Vigilant Martyr", 45, Rarity.UNCOMMON, mage.cards.v.VigilantMartyr.class)); + cards.add(new SetCardInfo("Village Elder", 251, Rarity.COMMON, mage.cards.v.VillageElder.class)); + cards.add(new SetCardInfo("Vitalizing Cascade", 286, Rarity.UNCOMMON, mage.cards.v.VitalizingCascade.class)); + cards.add(new SetCardInfo("Volcanic Dragon", 201, Rarity.RARE, mage.cards.v.VolcanicDragon.class)); + cards.add(new SetCardInfo("Volcanic Geyser", 202, Rarity.UNCOMMON, mage.cards.v.VolcanicGeyser.class)); + cards.add(new SetCardInfo("Waiting in the Weeds", 252, Rarity.RARE, mage.cards.w.WaitingInTheWeeds.class)); + cards.add(new SetCardInfo("Wall of Resistance", 46, Rarity.COMMON, mage.cards.w.WallOfResistance.class)); + cards.add(new SetCardInfo("Wall of Roots", 253, Rarity.COMMON, mage.cards.w.WallOfRoots.class)); + cards.add(new SetCardInfo("Ward of Lights", 47, Rarity.COMMON, mage.cards.w.WardOfLights.class)); + cards.add(new SetCardInfo("Warping Wurm", 287, Rarity.RARE, mage.cards.w.WarpingWurm.class)); + cards.add(new SetCardInfo("Wave Elemental", 102, Rarity.UNCOMMON, mage.cards.w.WaveElemental.class)); + cards.add(new SetCardInfo("Wellspring", 288, Rarity.RARE, mage.cards.w.Wellspring.class)); + cards.add(new SetCardInfo("Wild Elephant", 254, Rarity.COMMON, mage.cards.w.WildElephant.class)); + cards.add(new SetCardInfo("Wildfire Emissary", 203, Rarity.UNCOMMON, mage.cards.w.WildfireEmissary.class)); + cards.add(new SetCardInfo("Windreaper Falcon", 289, Rarity.UNCOMMON, mage.cards.w.WindreaperFalcon.class)); + cards.add(new SetCardInfo("Withering Boon", 152, Rarity.UNCOMMON, mage.cards.w.WitheringBoon.class)); + cards.add(new SetCardInfo("Worldly Tutor", 255, Rarity.UNCOMMON, mage.cards.w.WorldlyTutor.class)); + cards.add(new SetCardInfo("Zebra Unicorn", 290, Rarity.UNCOMMON, mage.cards.z.ZebraUnicorn.class)); + cards.add(new SetCardInfo("Zhalfirin Commander", 49, Rarity.UNCOMMON, mage.cards.z.ZhalfirinCommander.class)); + cards.add(new SetCardInfo("Zhalfirin Knight", 50, Rarity.COMMON, mage.cards.z.ZhalfirinKnight.class)); + cards.add(new SetCardInfo("Zirilan of the Claw", 204, Rarity.RARE, mage.cards.z.ZirilanOfTheClaw.class)); + cards.add(new SetCardInfo("Zombie Mob", 153, Rarity.UNCOMMON, mage.cards.z.ZombieMob.class)); + cards.add(new SetCardInfo("Zuberi, Golden Feather", 51, Rarity.RARE, mage.cards.z.ZuberiGoldenFeather.class)); + } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/Prophecy.java b/Mage.Sets/src/mage/sets/Prophecy.java index 9ff9dde2a77..fda54f8e3a8 100644 --- a/Mage.Sets/src/mage/sets/Prophecy.java +++ b/Mage.Sets/src/mage/sets/Prophecy.java @@ -1,175 +1,175 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author North - */ -public final class Prophecy extends ExpansionSet { - - private static final Prophecy instance = new Prophecy(); - - public static Prophecy getInstance() { - return instance; - } - - private Prophecy() { - super("Prophecy", "PCY", ExpansionSet.buildDate(2000, 4, 27), SetType.EXPANSION); - this.blockName = "Masques"; - this.parentSet = MercadianMasques.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Abolish", 1, Rarity.UNCOMMON, mage.cards.a.Abolish.class)); - cards.add(new SetCardInfo("Agent of Shauku", 55, Rarity.COMMON, mage.cards.a.AgentOfShauku.class)); - cards.add(new SetCardInfo("Alexi's Cloak", 29, Rarity.COMMON, mage.cards.a.AlexisCloak.class)); - cards.add(new SetCardInfo("Alexi, Zephyr Mage", 28, Rarity.RARE, mage.cards.a.AlexiZephyrMage.class)); - cards.add(new SetCardInfo("Aura Fracture", 2, Rarity.COMMON, mage.cards.a.AuraFracture.class)); - cards.add(new SetCardInfo("Avatar of Fury", 82, Rarity.RARE, mage.cards.a.AvatarOfFury.class)); - cards.add(new SetCardInfo("Avatar of Hope", 3, Rarity.RARE, mage.cards.a.AvatarOfHope.class)); - cards.add(new SetCardInfo("Avatar of Might", 109, Rarity.RARE, mage.cards.a.AvatarOfMight.class)); - cards.add(new SetCardInfo("Avatar of Will", 30, Rarity.RARE, mage.cards.a.AvatarOfWill.class)); - cards.add(new SetCardInfo("Avatar of Woe", 56, Rarity.RARE, mage.cards.a.AvatarOfWoe.class)); - cards.add(new SetCardInfo("Barbed Field", 83, Rarity.UNCOMMON, mage.cards.b.BarbedField.class)); - cards.add(new SetCardInfo("Blessed Wind", 4, Rarity.RARE, mage.cards.b.BlessedWind.class)); - cards.add(new SetCardInfo("Bog Elemental", 57, Rarity.RARE, mage.cards.b.BogElemental.class)); - cards.add(new SetCardInfo("Bog Glider", 58, Rarity.COMMON, mage.cards.b.BogGlider.class)); - cards.add(new SetCardInfo("Branded Brawlers", 84, Rarity.COMMON, mage.cards.b.BrandedBrawlers.class)); - cards.add(new SetCardInfo("Brutal Suppression", 85, Rarity.UNCOMMON, mage.cards.b.BrutalSuppression.class)); - cards.add(new SetCardInfo("Calming Verse", 110, Rarity.COMMON, mage.cards.c.CalmingVerse.class)); - cards.add(new SetCardInfo("Celestial Convergence", 5, Rarity.RARE, mage.cards.c.CelestialConvergence.class)); - cards.add(new SetCardInfo("Chilling Apparition", 59, Rarity.UNCOMMON, mage.cards.c.ChillingApparition.class)); - cards.add(new SetCardInfo("Chimeric Idol", 136, Rarity.UNCOMMON, mage.cards.c.ChimericIdol.class)); - cards.add(new SetCardInfo("Citadel of Pain", 86, Rarity.UNCOMMON, mage.cards.c.CitadelOfPain.class)); - cards.add(new SetCardInfo("Coastal Hornclaw", 31, Rarity.COMMON, mage.cards.c.CoastalHornclaw.class)); - cards.add(new SetCardInfo("Coffin Puppets", 60, Rarity.RARE, mage.cards.c.CoffinPuppets.class)); - cards.add(new SetCardInfo("Copper-Leaf Angel", 137, Rarity.RARE, mage.cards.c.CopperLeafAngel.class)); - cards.add(new SetCardInfo("Darba", 111, Rarity.UNCOMMON, mage.cards.d.Darba.class)); - cards.add(new SetCardInfo("Death Charmer", 61, Rarity.COMMON, mage.cards.d.DeathCharmer.class)); - cards.add(new SetCardInfo("Denying Wind", 32, Rarity.RARE, mage.cards.d.DenyingWind.class)); - cards.add(new SetCardInfo("Despoil", 62, Rarity.COMMON, mage.cards.d.Despoil.class)); - cards.add(new SetCardInfo("Devastate", 87, Rarity.COMMON, mage.cards.d.Devastate.class)); - cards.add(new SetCardInfo("Diving Griffin", 6, Rarity.COMMON, mage.cards.d.DivingGriffin.class)); - cards.add(new SetCardInfo("Dual Nature", 112, Rarity.RARE, mage.cards.d.DualNature.class)); - cards.add(new SetCardInfo("Elephant Resurgence", 113, Rarity.RARE, mage.cards.e.ElephantResurgence.class)); - cards.add(new SetCardInfo("Endbringer's Revel", 63, Rarity.UNCOMMON, mage.cards.e.EndbringersRevel.class)); - cards.add(new SetCardInfo("Entangler", 7, Rarity.UNCOMMON, mage.cards.e.Entangler.class)); - cards.add(new SetCardInfo("Excavation", 33, Rarity.UNCOMMON, mage.cards.e.Excavation.class)); - cards.add(new SetCardInfo("Excise", 8, Rarity.COMMON, mage.cards.e.Excise.class)); - cards.add(new SetCardInfo("Fault Riders", 88, Rarity.COMMON, mage.cards.f.FaultRiders.class)); - cards.add(new SetCardInfo("Fen Stalker", 64, Rarity.COMMON, mage.cards.f.FenStalker.class)); - cards.add(new SetCardInfo("Fickle Efreet", 89, Rarity.RARE, mage.cards.f.FickleEfreet.class)); - cards.add(new SetCardInfo("Flameshot", 90, Rarity.UNCOMMON, mage.cards.f.Flameshot.class)); - cards.add(new SetCardInfo("Flay", 65, Rarity.COMMON, mage.cards.f.Flay.class)); - cards.add(new SetCardInfo("Flowering Field", 9, Rarity.UNCOMMON, mage.cards.f.FloweringField.class)); - cards.add(new SetCardInfo("Foil", 34, Rarity.UNCOMMON, mage.cards.f.Foil.class)); - cards.add(new SetCardInfo("Forgotten Harvest", 114, Rarity.RARE, mage.cards.f.ForgottenHarvest.class)); - cards.add(new SetCardInfo("Glittering Lion", 10, Rarity.UNCOMMON, mage.cards.g.GlitteringLion.class)); - cards.add(new SetCardInfo("Glittering Lynx", 11, Rarity.COMMON, mage.cards.g.GlitteringLynx.class)); - cards.add(new SetCardInfo("Greel's Caress", 67, Rarity.COMMON, mage.cards.g.GreelsCaress.class)); - cards.add(new SetCardInfo("Greel, Mind Raker", 66, Rarity.RARE, mage.cards.g.GreelMindRaker.class)); - cards.add(new SetCardInfo("Gulf Squid", 35, Rarity.COMMON, mage.cards.g.GulfSquid.class)); - cards.add(new SetCardInfo("Hazy Homunculus", 36, Rarity.COMMON, mage.cards.h.HazyHomunculus.class)); - cards.add(new SetCardInfo("Heightened Awareness", 37, Rarity.RARE, mage.cards.h.HeightenedAwareness.class)); - cards.add(new SetCardInfo("Hollow Warrior", 138, Rarity.UNCOMMON, mage.cards.h.HollowWarrior.class)); - cards.add(new SetCardInfo("Infernal Genesis", 68, Rarity.RARE, mage.cards.i.InfernalGenesis.class)); - cards.add(new SetCardInfo("Inflame", 91, Rarity.COMMON, mage.cards.i.Inflame.class)); - cards.add(new SetCardInfo("Jeweled Spirit", 12, Rarity.RARE, mage.cards.j.JeweledSpirit.class)); - cards.add(new SetCardInfo("Jolrael, Empress of Beasts", 115, Rarity.RARE, mage.cards.j.JolraelEmpressOfBeasts.class)); - cards.add(new SetCardInfo("Jolrael's Favor", 116, Rarity.COMMON, mage.cards.j.JolraelsFavor.class)); - cards.add(new SetCardInfo("Keldon Arsonist", 92, Rarity.UNCOMMON, mage.cards.k.KeldonArsonist.class)); - cards.add(new SetCardInfo("Keldon Battlewagon", 139, Rarity.RARE, mage.cards.k.KeldonBattlewagon.class)); - cards.add(new SetCardInfo("Keldon Berserker", 93, Rarity.COMMON, mage.cards.k.KeldonBerserker.class)); - cards.add(new SetCardInfo("Keldon Firebombers", 94, Rarity.RARE, mage.cards.k.KeldonFirebombers.class)); - cards.add(new SetCardInfo("Latulla, Keldon Overseer", 95, Rarity.RARE, mage.cards.l.LatullaKeldonOverseer.class)); - cards.add(new SetCardInfo("Latulla's Orders", 96, Rarity.COMMON, mage.cards.l.LatullasOrders.class)); - cards.add(new SetCardInfo("Lesser Gargadon", 97, Rarity.UNCOMMON, mage.cards.l.LesserGargadon.class)); - cards.add(new SetCardInfo("Living Terrain", 117, Rarity.UNCOMMON, mage.cards.l.LivingTerrain.class)); - cards.add(new SetCardInfo("Mageta's Boon", 14, Rarity.COMMON, mage.cards.m.MagetasBoon.class)); - cards.add(new SetCardInfo("Mageta the Lion", 13, Rarity.RARE, mage.cards.m.MagetaTheLion.class)); - cards.add(new SetCardInfo("Mana Vapors", 38, Rarity.UNCOMMON, mage.cards.m.ManaVapors.class)); - cards.add(new SetCardInfo("Marsh Boa", 118, Rarity.COMMON, mage.cards.m.MarshBoa.class)); - cards.add(new SetCardInfo("Mercenary Informer", 15, Rarity.RARE, mage.cards.m.MercenaryInformer.class)); - cards.add(new SetCardInfo("Mine Bearer", 16, Rarity.COMMON, mage.cards.m.MineBearer.class)); - cards.add(new SetCardInfo("Mirror Strike", 17, Rarity.UNCOMMON, mage.cards.m.MirrorStrike.class)); - cards.add(new SetCardInfo("Mungha Wurm", 119, Rarity.RARE, mage.cards.m.MunghaWurm.class)); - cards.add(new SetCardInfo("Nakaya Shade", 69, Rarity.UNCOMMON, mage.cards.n.NakayaShade.class)); - cards.add(new SetCardInfo("Noxious Field", 70, Rarity.UNCOMMON, mage.cards.n.NoxiousField.class)); - cards.add(new SetCardInfo("Outbreak", 71, Rarity.UNCOMMON, mage.cards.o.Outbreak.class)); - cards.add(new SetCardInfo("Overburden", 39, Rarity.RARE, mage.cards.o.Overburden.class)); - cards.add(new SetCardInfo("Panic Attack", 98, Rarity.COMMON, mage.cards.p.PanicAttack.class)); - cards.add(new SetCardInfo("Pit Raptor", 72, Rarity.UNCOMMON, mage.cards.p.PitRaptor.class)); - cards.add(new SetCardInfo("Plague Fiend", 73, Rarity.COMMON, mage.cards.p.PlagueFiend.class)); - cards.add(new SetCardInfo("Plague Wind", 74, Rarity.RARE, mage.cards.p.PlagueWind.class)); - cards.add(new SetCardInfo("Psychic Theft", 40, Rarity.RARE, mage.cards.p.PsychicTheft.class)); - cards.add(new SetCardInfo("Pygmy Razorback", 120, Rarity.COMMON, mage.cards.p.PygmyRazorback.class)); - cards.add(new SetCardInfo("Quicksilver Wall", 41, Rarity.UNCOMMON, mage.cards.q.QuicksilverWall.class)); - cards.add(new SetCardInfo("Rebel Informer", 75, Rarity.RARE, mage.cards.r.RebelInformer.class)); - cards.add(new SetCardInfo("Rethink", 42, Rarity.COMMON, mage.cards.r.Rethink.class)); - cards.add(new SetCardInfo("Reveille Squad", 18, Rarity.UNCOMMON, mage.cards.r.ReveilleSquad.class)); - cards.add(new SetCardInfo("Rhystic Cave", 142, Rarity.UNCOMMON, mage.cards.r.RhysticCave.class)); - cards.add(new SetCardInfo("Rhystic Circle", 19, Rarity.COMMON, mage.cards.r.RhysticCircle.class)); - cards.add(new SetCardInfo("Rhystic Deluge", 43, Rarity.COMMON, mage.cards.r.RhysticDeluge.class)); - cards.add(new SetCardInfo("Rhystic Lightning", 99, Rarity.COMMON, mage.cards.r.RhysticLightning.class)); - cards.add(new SetCardInfo("Rhystic Scrying", 44, Rarity.UNCOMMON, mage.cards.r.RhysticScrying.class)); - cards.add(new SetCardInfo("Rhystic Shield", 20, Rarity.COMMON, mage.cards.r.RhysticShield.class)); - cards.add(new SetCardInfo("Rhystic Study", 45, Rarity.COMMON, mage.cards.r.RhysticStudy.class)); - cards.add(new SetCardInfo("Rhystic Syphon", 76, Rarity.UNCOMMON, mage.cards.r.RhysticSyphon.class)); - cards.add(new SetCardInfo("Rhystic Tutor", 77, Rarity.RARE, mage.cards.r.RhysticTutor.class)); - cards.add(new SetCardInfo("Ribbon Snake", 46, Rarity.COMMON, mage.cards.r.RibbonSnake.class)); - cards.add(new SetCardInfo("Rib Cage Spider", 121, Rarity.COMMON, mage.cards.r.RibCageSpider.class)); - cards.add(new SetCardInfo("Ridgeline Rager", 100, Rarity.COMMON, mage.cards.r.RidgelineRager.class)); - cards.add(new SetCardInfo("Root Cage", 122, Rarity.UNCOMMON, mage.cards.r.RootCage.class)); - cards.add(new SetCardInfo("Samite Sanctuary", 21, Rarity.RARE, mage.cards.s.SamiteSanctuary.class)); - cards.add(new SetCardInfo("Scoria Cat", 101, Rarity.UNCOMMON, mage.cards.s.ScoriaCat.class)); - cards.add(new SetCardInfo("Search for Survivors", 102, Rarity.RARE, mage.cards.s.SearchForSurvivors.class)); - cards.add(new SetCardInfo("Searing Wind", 103, Rarity.RARE, mage.cards.s.SearingWind.class)); - cards.add(new SetCardInfo("Sheltering Prayers", 22, Rarity.RARE, mage.cards.s.ShelteringPrayers.class)); - cards.add(new SetCardInfo("Shield Dancer", 23, Rarity.UNCOMMON, mage.cards.s.ShieldDancer.class)); - cards.add(new SetCardInfo("Shrouded Serpent", 47, Rarity.RARE, mage.cards.s.ShroudedSerpent.class)); - cards.add(new SetCardInfo("Silt Crawler", 123, Rarity.COMMON, mage.cards.s.SiltCrawler.class)); - cards.add(new SetCardInfo("Snag", 124, Rarity.UNCOMMON, mage.cards.s.Snag.class)); - cards.add(new SetCardInfo("Soul Charmer", 24, Rarity.COMMON, mage.cards.s.SoulCharmer.class)); - cards.add(new SetCardInfo("Soul Strings", 78, Rarity.COMMON, mage.cards.s.SoulStrings.class)); - cards.add(new SetCardInfo("Spiketail Drake", 48, Rarity.UNCOMMON, mage.cards.s.SpiketailDrake.class)); - cards.add(new SetCardInfo("Spiketail Hatchling", 49, Rarity.COMMON, mage.cards.s.SpiketailHatchling.class)); - cards.add(new SetCardInfo("Spitting Spider", 125, Rarity.UNCOMMON, mage.cards.s.SpittingSpider.class)); - cards.add(new SetCardInfo("Spore Frog", 126, Rarity.COMMON, mage.cards.s.SporeFrog.class)); - cards.add(new SetCardInfo("Spur Grappler", 104, Rarity.COMMON, mage.cards.s.SpurGrappler.class)); - cards.add(new SetCardInfo("Squirrel Wrangler", 127, Rarity.RARE, mage.cards.s.SquirrelWrangler.class)); - cards.add(new SetCardInfo("Steal Strength", 79, Rarity.COMMON, mage.cards.s.StealStrength.class)); - cards.add(new SetCardInfo("Stormwatch Eagle", 50, Rarity.COMMON, mage.cards.s.StormwatchEagle.class)); - cards.add(new SetCardInfo("Sunken Field", 51, Rarity.UNCOMMON, mage.cards.s.SunkenField.class)); - cards.add(new SetCardInfo("Sword Dancer", 25, Rarity.UNCOMMON, mage.cards.s.SwordDancer.class)); - cards.add(new SetCardInfo("Task Mage Assembly", 105, Rarity.RARE, mage.cards.t.TaskMageAssembly.class)); - cards.add(new SetCardInfo("Thresher Beast", 128, Rarity.COMMON, mage.cards.t.ThresherBeast.class)); - cards.add(new SetCardInfo("Thrive", 129, Rarity.COMMON, mage.cards.t.Thrive.class)); - cards.add(new SetCardInfo("Trenching Steed", 26, Rarity.COMMON, mage.cards.t.TrenchingSteed.class)); - cards.add(new SetCardInfo("Troubled Healer", 27, Rarity.COMMON, mage.cards.t.TroubledHealer.class)); - cards.add(new SetCardInfo("Troublesome Spirit", 52, Rarity.RARE, mage.cards.t.TroublesomeSpirit.class)); - cards.add(new SetCardInfo("Verdant Field", 130, Rarity.UNCOMMON, mage.cards.v.VerdantField.class)); - cards.add(new SetCardInfo("Veteran Brawlers", 106, Rarity.RARE, mage.cards.v.VeteranBrawlers.class)); - cards.add(new SetCardInfo("Vintara Elephant", 131, Rarity.COMMON, mage.cards.v.VintaraElephant.class)); - cards.add(new SetCardInfo("Vintara Snapper", 132, Rarity.UNCOMMON, mage.cards.v.VintaraSnapper.class)); - cards.add(new SetCardInfo("Vitalizing Wind", 133, Rarity.RARE, mage.cards.v.VitalizingWind.class)); - cards.add(new SetCardInfo("Wall of Vipers", 80, Rarity.UNCOMMON, mage.cards.w.WallOfVipers.class)); - cards.add(new SetCardInfo("Well of Discovery", 140, Rarity.RARE, mage.cards.w.WellOfDiscovery.class)); - cards.add(new SetCardInfo("Well of Life", 141, Rarity.UNCOMMON, mage.cards.w.WellOfLife.class)); - cards.add(new SetCardInfo("Whip Sergeant", 107, Rarity.UNCOMMON, mage.cards.w.WhipSergeant.class)); - cards.add(new SetCardInfo("Whipstitched Zombie", 81, Rarity.COMMON, mage.cards.w.WhipstitchedZombie.class)); - cards.add(new SetCardInfo("Wild Might", 134, Rarity.COMMON, mage.cards.w.WildMight.class)); - cards.add(new SetCardInfo("Windscouter", 53, Rarity.UNCOMMON, mage.cards.w.Windscouter.class)); - cards.add(new SetCardInfo("Wing Storm", 135, Rarity.UNCOMMON, mage.cards.w.WingStorm.class)); - cards.add(new SetCardInfo("Wintermoon Mesa", 143, Rarity.RARE, mage.cards.w.WintermoonMesa.class)); - cards.add(new SetCardInfo("Withdraw", 54, Rarity.COMMON, mage.cards.w.Withdraw.class)); - cards.add(new SetCardInfo("Zerapa Minotaur", 108, Rarity.COMMON, mage.cards.z.ZerapaMinotaur.class)); - } -} + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author North + */ +public final class Prophecy extends ExpansionSet { + + private static final Prophecy instance = new Prophecy(); + + public static Prophecy getInstance() { + return instance; + } + + private Prophecy() { + super("Prophecy", "PCY", ExpansionSet.buildDate(2000, 4, 27), SetType.EXPANSION); + this.blockName = "Masques"; + this.parentSet = MercadianMasques.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Abolish", 1, Rarity.UNCOMMON, mage.cards.a.Abolish.class)); + cards.add(new SetCardInfo("Agent of Shauku", 55, Rarity.COMMON, mage.cards.a.AgentOfShauku.class)); + cards.add(new SetCardInfo("Alexi's Cloak", 29, Rarity.COMMON, mage.cards.a.AlexisCloak.class)); + cards.add(new SetCardInfo("Alexi, Zephyr Mage", 28, Rarity.RARE, mage.cards.a.AlexiZephyrMage.class)); + cards.add(new SetCardInfo("Aura Fracture", 2, Rarity.COMMON, mage.cards.a.AuraFracture.class)); + cards.add(new SetCardInfo("Avatar of Fury", 82, Rarity.RARE, mage.cards.a.AvatarOfFury.class)); + cards.add(new SetCardInfo("Avatar of Hope", 3, Rarity.RARE, mage.cards.a.AvatarOfHope.class)); + cards.add(new SetCardInfo("Avatar of Might", 109, Rarity.RARE, mage.cards.a.AvatarOfMight.class)); + cards.add(new SetCardInfo("Avatar of Will", 30, Rarity.RARE, mage.cards.a.AvatarOfWill.class)); + cards.add(new SetCardInfo("Avatar of Woe", 56, Rarity.RARE, mage.cards.a.AvatarOfWoe.class)); + cards.add(new SetCardInfo("Barbed Field", 83, Rarity.UNCOMMON, mage.cards.b.BarbedField.class)); + cards.add(new SetCardInfo("Blessed Wind", 4, Rarity.RARE, mage.cards.b.BlessedWind.class)); + cards.add(new SetCardInfo("Bog Elemental", 57, Rarity.RARE, mage.cards.b.BogElemental.class)); + cards.add(new SetCardInfo("Bog Glider", 58, Rarity.COMMON, mage.cards.b.BogGlider.class)); + cards.add(new SetCardInfo("Branded Brawlers", 84, Rarity.COMMON, mage.cards.b.BrandedBrawlers.class)); + cards.add(new SetCardInfo("Brutal Suppression", 85, Rarity.UNCOMMON, mage.cards.b.BrutalSuppression.class)); + cards.add(new SetCardInfo("Calming Verse", 110, Rarity.COMMON, mage.cards.c.CalmingVerse.class)); + cards.add(new SetCardInfo("Celestial Convergence", 5, Rarity.RARE, mage.cards.c.CelestialConvergence.class)); + cards.add(new SetCardInfo("Chilling Apparition", 59, Rarity.UNCOMMON, mage.cards.c.ChillingApparition.class)); + cards.add(new SetCardInfo("Chimeric Idol", 136, Rarity.UNCOMMON, mage.cards.c.ChimericIdol.class)); + cards.add(new SetCardInfo("Citadel of Pain", 86, Rarity.UNCOMMON, mage.cards.c.CitadelOfPain.class)); + cards.add(new SetCardInfo("Coastal Hornclaw", 31, Rarity.COMMON, mage.cards.c.CoastalHornclaw.class)); + cards.add(new SetCardInfo("Coffin Puppets", 60, Rarity.RARE, mage.cards.c.CoffinPuppets.class)); + cards.add(new SetCardInfo("Copper-Leaf Angel", 137, Rarity.RARE, mage.cards.c.CopperLeafAngel.class)); + cards.add(new SetCardInfo("Darba", 111, Rarity.UNCOMMON, mage.cards.d.Darba.class)); + cards.add(new SetCardInfo("Death Charmer", 61, Rarity.COMMON, mage.cards.d.DeathCharmer.class)); + cards.add(new SetCardInfo("Denying Wind", 32, Rarity.RARE, mage.cards.d.DenyingWind.class)); + cards.add(new SetCardInfo("Despoil", 62, Rarity.COMMON, mage.cards.d.Despoil.class)); + cards.add(new SetCardInfo("Devastate", 87, Rarity.COMMON, mage.cards.d.Devastate.class)); + cards.add(new SetCardInfo("Diving Griffin", 6, Rarity.COMMON, mage.cards.d.DivingGriffin.class)); + cards.add(new SetCardInfo("Dual Nature", 112, Rarity.RARE, mage.cards.d.DualNature.class)); + cards.add(new SetCardInfo("Elephant Resurgence", 113, Rarity.RARE, mage.cards.e.ElephantResurgence.class)); + cards.add(new SetCardInfo("Endbringer's Revel", 63, Rarity.UNCOMMON, mage.cards.e.EndbringersRevel.class)); + cards.add(new SetCardInfo("Entangler", 7, Rarity.UNCOMMON, mage.cards.e.Entangler.class)); + cards.add(new SetCardInfo("Excavation", 33, Rarity.UNCOMMON, mage.cards.e.Excavation.class)); + cards.add(new SetCardInfo("Excise", 8, Rarity.COMMON, mage.cards.e.Excise.class)); + cards.add(new SetCardInfo("Fault Riders", 88, Rarity.COMMON, mage.cards.f.FaultRiders.class)); + cards.add(new SetCardInfo("Fen Stalker", 64, Rarity.COMMON, mage.cards.f.FenStalker.class)); + cards.add(new SetCardInfo("Fickle Efreet", 89, Rarity.RARE, mage.cards.f.FickleEfreet.class)); + cards.add(new SetCardInfo("Flameshot", 90, Rarity.UNCOMMON, mage.cards.f.Flameshot.class)); + cards.add(new SetCardInfo("Flay", 65, Rarity.COMMON, mage.cards.f.Flay.class)); + cards.add(new SetCardInfo("Flowering Field", 9, Rarity.UNCOMMON, mage.cards.f.FloweringField.class)); + cards.add(new SetCardInfo("Foil", 34, Rarity.UNCOMMON, mage.cards.f.Foil.class)); + cards.add(new SetCardInfo("Forgotten Harvest", 114, Rarity.RARE, mage.cards.f.ForgottenHarvest.class)); + cards.add(new SetCardInfo("Glittering Lion", 10, Rarity.UNCOMMON, mage.cards.g.GlitteringLion.class)); + cards.add(new SetCardInfo("Glittering Lynx", 11, Rarity.COMMON, mage.cards.g.GlitteringLynx.class)); + cards.add(new SetCardInfo("Greel's Caress", 67, Rarity.COMMON, mage.cards.g.GreelsCaress.class)); + cards.add(new SetCardInfo("Greel, Mind Raker", 66, Rarity.RARE, mage.cards.g.GreelMindRaker.class)); + cards.add(new SetCardInfo("Gulf Squid", 35, Rarity.COMMON, mage.cards.g.GulfSquid.class)); + cards.add(new SetCardInfo("Hazy Homunculus", 36, Rarity.COMMON, mage.cards.h.HazyHomunculus.class)); + cards.add(new SetCardInfo("Heightened Awareness", 37, Rarity.RARE, mage.cards.h.HeightenedAwareness.class)); + cards.add(new SetCardInfo("Hollow Warrior", 138, Rarity.UNCOMMON, mage.cards.h.HollowWarrior.class)); + cards.add(new SetCardInfo("Infernal Genesis", 68, Rarity.RARE, mage.cards.i.InfernalGenesis.class)); + cards.add(new SetCardInfo("Inflame", 91, Rarity.COMMON, mage.cards.i.Inflame.class)); + cards.add(new SetCardInfo("Jeweled Spirit", 12, Rarity.RARE, mage.cards.j.JeweledSpirit.class)); + cards.add(new SetCardInfo("Jolrael, Empress of Beasts", 115, Rarity.RARE, mage.cards.j.JolraelEmpressOfBeasts.class)); + cards.add(new SetCardInfo("Jolrael's Favor", 116, Rarity.COMMON, mage.cards.j.JolraelsFavor.class)); + cards.add(new SetCardInfo("Keldon Arsonist", 92, Rarity.UNCOMMON, mage.cards.k.KeldonArsonist.class)); + cards.add(new SetCardInfo("Keldon Battlewagon", 139, Rarity.RARE, mage.cards.k.KeldonBattlewagon.class)); + cards.add(new SetCardInfo("Keldon Berserker", 93, Rarity.COMMON, mage.cards.k.KeldonBerserker.class)); + cards.add(new SetCardInfo("Keldon Firebombers", 94, Rarity.RARE, mage.cards.k.KeldonFirebombers.class)); + cards.add(new SetCardInfo("Latulla, Keldon Overseer", 95, Rarity.RARE, mage.cards.l.LatullaKeldonOverseer.class)); + cards.add(new SetCardInfo("Latulla's Orders", 96, Rarity.COMMON, mage.cards.l.LatullasOrders.class)); + cards.add(new SetCardInfo("Lesser Gargadon", 97, Rarity.UNCOMMON, mage.cards.l.LesserGargadon.class)); + cards.add(new SetCardInfo("Living Terrain", 117, Rarity.UNCOMMON, mage.cards.l.LivingTerrain.class)); + cards.add(new SetCardInfo("Mageta's Boon", 14, Rarity.COMMON, mage.cards.m.MagetasBoon.class)); + cards.add(new SetCardInfo("Mageta the Lion", 13, Rarity.RARE, mage.cards.m.MagetaTheLion.class)); + cards.add(new SetCardInfo("Mana Vapors", 38, Rarity.UNCOMMON, mage.cards.m.ManaVapors.class)); + cards.add(new SetCardInfo("Marsh Boa", 118, Rarity.COMMON, mage.cards.m.MarshBoa.class)); + cards.add(new SetCardInfo("Mercenary Informer", 15, Rarity.RARE, mage.cards.m.MercenaryInformer.class)); + cards.add(new SetCardInfo("Mine Bearer", 16, Rarity.COMMON, mage.cards.m.MineBearer.class)); + cards.add(new SetCardInfo("Mirror Strike", 17, Rarity.UNCOMMON, mage.cards.m.MirrorStrike.class)); + cards.add(new SetCardInfo("Mungha Wurm", 119, Rarity.RARE, mage.cards.m.MunghaWurm.class)); + cards.add(new SetCardInfo("Nakaya Shade", 69, Rarity.UNCOMMON, mage.cards.n.NakayaShade.class)); + cards.add(new SetCardInfo("Noxious Field", 70, Rarity.UNCOMMON, mage.cards.n.NoxiousField.class)); + cards.add(new SetCardInfo("Outbreak", 71, Rarity.UNCOMMON, mage.cards.o.Outbreak.class)); + cards.add(new SetCardInfo("Overburden", 39, Rarity.RARE, mage.cards.o.Overburden.class)); + cards.add(new SetCardInfo("Panic Attack", 98, Rarity.COMMON, mage.cards.p.PanicAttack.class)); + cards.add(new SetCardInfo("Pit Raptor", 72, Rarity.UNCOMMON, mage.cards.p.PitRaptor.class)); + cards.add(new SetCardInfo("Plague Fiend", 73, Rarity.COMMON, mage.cards.p.PlagueFiend.class)); + cards.add(new SetCardInfo("Plague Wind", 74, Rarity.RARE, mage.cards.p.PlagueWind.class)); + cards.add(new SetCardInfo("Psychic Theft", 40, Rarity.RARE, mage.cards.p.PsychicTheft.class)); + cards.add(new SetCardInfo("Pygmy Razorback", 120, Rarity.COMMON, mage.cards.p.PygmyRazorback.class)); + cards.add(new SetCardInfo("Quicksilver Wall", 41, Rarity.UNCOMMON, mage.cards.q.QuicksilverWall.class)); + cards.add(new SetCardInfo("Rebel Informer", 75, Rarity.RARE, mage.cards.r.RebelInformer.class)); + cards.add(new SetCardInfo("Rethink", 42, Rarity.COMMON, mage.cards.r.Rethink.class)); + cards.add(new SetCardInfo("Reveille Squad", 18, Rarity.UNCOMMON, mage.cards.r.ReveilleSquad.class)); + cards.add(new SetCardInfo("Rhystic Cave", 142, Rarity.UNCOMMON, mage.cards.r.RhysticCave.class)); + cards.add(new SetCardInfo("Rhystic Circle", 19, Rarity.COMMON, mage.cards.r.RhysticCircle.class)); + cards.add(new SetCardInfo("Rhystic Deluge", 43, Rarity.COMMON, mage.cards.r.RhysticDeluge.class)); + cards.add(new SetCardInfo("Rhystic Lightning", 99, Rarity.COMMON, mage.cards.r.RhysticLightning.class)); + cards.add(new SetCardInfo("Rhystic Scrying", 44, Rarity.UNCOMMON, mage.cards.r.RhysticScrying.class)); + cards.add(new SetCardInfo("Rhystic Shield", 20, Rarity.COMMON, mage.cards.r.RhysticShield.class)); + cards.add(new SetCardInfo("Rhystic Study", 45, Rarity.COMMON, mage.cards.r.RhysticStudy.class)); + cards.add(new SetCardInfo("Rhystic Syphon", 76, Rarity.UNCOMMON, mage.cards.r.RhysticSyphon.class)); + cards.add(new SetCardInfo("Rhystic Tutor", 77, Rarity.RARE, mage.cards.r.RhysticTutor.class)); + cards.add(new SetCardInfo("Ribbon Snake", 46, Rarity.COMMON, mage.cards.r.RibbonSnake.class)); + cards.add(new SetCardInfo("Rib Cage Spider", 121, Rarity.COMMON, mage.cards.r.RibCageSpider.class)); + cards.add(new SetCardInfo("Ridgeline Rager", 100, Rarity.COMMON, mage.cards.r.RidgelineRager.class)); + cards.add(new SetCardInfo("Root Cage", 122, Rarity.UNCOMMON, mage.cards.r.RootCage.class)); + cards.add(new SetCardInfo("Samite Sanctuary", 21, Rarity.RARE, mage.cards.s.SamiteSanctuary.class)); + cards.add(new SetCardInfo("Scoria Cat", 101, Rarity.UNCOMMON, mage.cards.s.ScoriaCat.class)); + cards.add(new SetCardInfo("Search for Survivors", 102, Rarity.RARE, mage.cards.s.SearchForSurvivors.class)); + cards.add(new SetCardInfo("Searing Wind", 103, Rarity.RARE, mage.cards.s.SearingWind.class)); + cards.add(new SetCardInfo("Sheltering Prayers", 22, Rarity.RARE, mage.cards.s.ShelteringPrayers.class)); + cards.add(new SetCardInfo("Shield Dancer", 23, Rarity.UNCOMMON, mage.cards.s.ShieldDancer.class)); + cards.add(new SetCardInfo("Shrouded Serpent", 47, Rarity.RARE, mage.cards.s.ShroudedSerpent.class)); + cards.add(new SetCardInfo("Silt Crawler", 123, Rarity.COMMON, mage.cards.s.SiltCrawler.class)); + cards.add(new SetCardInfo("Snag", 124, Rarity.UNCOMMON, mage.cards.s.Snag.class)); + cards.add(new SetCardInfo("Soul Charmer", 24, Rarity.COMMON, mage.cards.s.SoulCharmer.class)); + cards.add(new SetCardInfo("Soul Strings", 78, Rarity.COMMON, mage.cards.s.SoulStrings.class)); + cards.add(new SetCardInfo("Spiketail Drake", 48, Rarity.UNCOMMON, mage.cards.s.SpiketailDrake.class)); + cards.add(new SetCardInfo("Spiketail Hatchling", 49, Rarity.COMMON, mage.cards.s.SpiketailHatchling.class)); + cards.add(new SetCardInfo("Spitting Spider", 125, Rarity.UNCOMMON, mage.cards.s.SpittingSpider.class)); + cards.add(new SetCardInfo("Spore Frog", 126, Rarity.COMMON, mage.cards.s.SporeFrog.class)); + cards.add(new SetCardInfo("Spur Grappler", 104, Rarity.COMMON, mage.cards.s.SpurGrappler.class)); + cards.add(new SetCardInfo("Squirrel Wrangler", 127, Rarity.RARE, mage.cards.s.SquirrelWrangler.class)); + cards.add(new SetCardInfo("Steal Strength", 79, Rarity.COMMON, mage.cards.s.StealStrength.class)); + cards.add(new SetCardInfo("Stormwatch Eagle", 50, Rarity.COMMON, mage.cards.s.StormwatchEagle.class)); + cards.add(new SetCardInfo("Sunken Field", 51, Rarity.UNCOMMON, mage.cards.s.SunkenField.class)); + cards.add(new SetCardInfo("Sword Dancer", 25, Rarity.UNCOMMON, mage.cards.s.SwordDancer.class)); + cards.add(new SetCardInfo("Task Mage Assembly", 105, Rarity.RARE, mage.cards.t.TaskMageAssembly.class)); + cards.add(new SetCardInfo("Thresher Beast", 128, Rarity.COMMON, mage.cards.t.ThresherBeast.class)); + cards.add(new SetCardInfo("Thrive", 129, Rarity.COMMON, mage.cards.t.Thrive.class)); + cards.add(new SetCardInfo("Trenching Steed", 26, Rarity.COMMON, mage.cards.t.TrenchingSteed.class)); + cards.add(new SetCardInfo("Troubled Healer", 27, Rarity.COMMON, mage.cards.t.TroubledHealer.class)); + cards.add(new SetCardInfo("Troublesome Spirit", 52, Rarity.RARE, mage.cards.t.TroublesomeSpirit.class)); + cards.add(new SetCardInfo("Verdant Field", 130, Rarity.UNCOMMON, mage.cards.v.VerdantField.class)); + cards.add(new SetCardInfo("Veteran Brawlers", 106, Rarity.RARE, mage.cards.v.VeteranBrawlers.class)); + cards.add(new SetCardInfo("Vintara Elephant", 131, Rarity.COMMON, mage.cards.v.VintaraElephant.class)); + cards.add(new SetCardInfo("Vintara Snapper", 132, Rarity.UNCOMMON, mage.cards.v.VintaraSnapper.class)); + cards.add(new SetCardInfo("Vitalizing Wind", 133, Rarity.RARE, mage.cards.v.VitalizingWind.class)); + cards.add(new SetCardInfo("Wall of Vipers", 80, Rarity.UNCOMMON, mage.cards.w.WallOfVipers.class)); + cards.add(new SetCardInfo("Well of Discovery", 140, Rarity.RARE, mage.cards.w.WellOfDiscovery.class)); + cards.add(new SetCardInfo("Well of Life", 141, Rarity.UNCOMMON, mage.cards.w.WellOfLife.class)); + cards.add(new SetCardInfo("Whip Sergeant", 107, Rarity.UNCOMMON, mage.cards.w.WhipSergeant.class)); + cards.add(new SetCardInfo("Whipstitched Zombie", 81, Rarity.COMMON, mage.cards.w.WhipstitchedZombie.class)); + cards.add(new SetCardInfo("Wild Might", 134, Rarity.COMMON, mage.cards.w.WildMight.class)); + cards.add(new SetCardInfo("Windscouter", 53, Rarity.UNCOMMON, mage.cards.w.Windscouter.class)); + cards.add(new SetCardInfo("Wing Storm", 135, Rarity.UNCOMMON, mage.cards.w.WingStorm.class)); + cards.add(new SetCardInfo("Wintermoon Mesa", 143, Rarity.RARE, mage.cards.w.WintermoonMesa.class)); + cards.add(new SetCardInfo("Withdraw", 54, Rarity.COMMON, mage.cards.w.Withdraw.class)); + cards.add(new SetCardInfo("Zerapa Minotaur", 108, Rarity.COMMON, mage.cards.z.ZerapaMinotaur.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Starter1999.java b/Mage.Sets/src/mage/sets/Starter1999.java index d41c6b095fd..f9146ef2ec6 100644 --- a/Mage.Sets/src/mage/sets/Starter1999.java +++ b/Mage.Sets/src/mage/sets/Starter1999.java @@ -1,201 +1,201 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author LevelX2 - */ -public final class Starter1999 extends ExpansionSet { - - private static final Starter1999 instance = new Starter1999(); - - public static Starter1999 getInstance() { - return instance; - } - - private Starter1999() { - super("Starter 1999", "S99", ExpansionSet.buildDate(1999, 7, 1), SetType.SUPPLEMENTAL); - this.blockName = "Beginner"; - this.hasBasicLands = true; - this.hasBoosters = true; - this.numBoosterLands = 2; - this.numBoosterCommon = 9; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Abyssal Horror", 63, Rarity.RARE, mage.cards.a.AbyssalHorror.class)); - cards.add(new SetCardInfo("Air Elemental", 32, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); - cards.add(new SetCardInfo("Alluring Scent", 124, Rarity.RARE, mage.cards.a.AlluringScent.class)); - cards.add(new SetCardInfo("Ancient Craving", 64, Rarity.RARE, mage.cards.a.AncientCraving.class)); - cards.add(new SetCardInfo("Angelic Blessing", 3, Rarity.COMMON, mage.cards.a.AngelicBlessing.class)); - cards.add(new SetCardInfo("Angel of Light", 1, Rarity.UNCOMMON, mage.cards.a.AngelOfLight.class)); - cards.add(new SetCardInfo("Angel of Mercy", 2, Rarity.UNCOMMON, mage.cards.a.AngelOfMercy.class)); - cards.add(new SetCardInfo("Archangel", 4, Rarity.RARE, mage.cards.a.Archangel.class)); - cards.add(new SetCardInfo("Ardent Militia", 5, Rarity.UNCOMMON, mage.cards.a.ArdentMilitia.class)); - cards.add(new SetCardInfo("Armageddon", 6, Rarity.RARE, mage.cards.a.Armageddon.class)); - cards.add(new SetCardInfo("Barbtooth Wurm", 125, Rarity.COMMON, mage.cards.b.BarbtoothWurm.class)); - cards.add(new SetCardInfo("Bargain", 7, Rarity.UNCOMMON, mage.cards.b.Bargain.class)); - cards.add(new SetCardInfo("Blinding Light", 8, Rarity.RARE, mage.cards.b.BlindingLight.class)); - cards.add(new SetCardInfo("Bog Imp", 65, Rarity.COMMON, mage.cards.b.BogImp.class)); - cards.add(new SetCardInfo("Bog Raiders", 66, Rarity.COMMON, mage.cards.b.BogRaiders.class)); - cards.add(new SetCardInfo("Bog Wraith", 67, Rarity.UNCOMMON, mage.cards.b.BogWraith.class)); - cards.add(new SetCardInfo("Border Guard", 9, Rarity.COMMON, mage.cards.b.BorderGuard.class)); - cards.add(new SetCardInfo("Breath of Life", 10, Rarity.UNCOMMON, mage.cards.b.BreathOfLife.class)); - cards.add(new SetCardInfo("Bull Hippo", 126, Rarity.UNCOMMON, mage.cards.b.BullHippo.class)); - cards.add(new SetCardInfo("Champion Lancer", 11, Rarity.RARE, mage.cards.c.ChampionLancer.class)); - cards.add(new SetCardInfo("Charging Paladin", 12, Rarity.UNCOMMON, mage.cards.c.ChargingPaladin.class)); - cards.add(new SetCardInfo("Chorus of Woe", 68, Rarity.COMMON, mage.cards.c.ChorusOfWoe.class)); - cards.add(new SetCardInfo("Cinder Storm", 93, Rarity.UNCOMMON, mage.cards.c.CinderStorm.class)); - cards.add(new SetCardInfo("Coercion", 69, Rarity.UNCOMMON, mage.cards.c.Coercion.class)); - cards.add(new SetCardInfo("Coral Eel", 33, Rarity.COMMON, mage.cards.c.CoralEel.class)); - cards.add(new SetCardInfo("Counterspell", 34, Rarity.UNCOMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Dakmor Ghoul", 70, Rarity.UNCOMMON, mage.cards.d.DakmorGhoul.class)); - cards.add(new SetCardInfo("Dakmor Lancer", 71, Rarity.RARE, mage.cards.d.DakmorLancer.class)); - cards.add(new SetCardInfo("Dakmor Plague", 72, Rarity.UNCOMMON, mage.cards.d.DakmorPlague.class)); - cards.add(new SetCardInfo("Dakmor Scorpion", 73, Rarity.COMMON, mage.cards.d.DakmorScorpion.class)); - cards.add(new SetCardInfo("Dakmor Sorceress", 74, Rarity.RARE, mage.cards.d.DakmorSorceress.class)); - cards.add(new SetCardInfo("Dark Offering", 75, Rarity.UNCOMMON, mage.cards.d.DarkOffering.class)); - cards.add(new SetCardInfo("Denizen of the Deep", 35, Rarity.RARE, mage.cards.d.DenizenOfTheDeep.class)); - cards.add(new SetCardInfo("Devastation", 94, Rarity.RARE, mage.cards.d.Devastation.class)); - cards.add(new SetCardInfo("Devoted Hero", 13, Rarity.COMMON, mage.cards.d.DevotedHero.class)); - cards.add(new SetCardInfo("Devout Monk", 14, Rarity.COMMON, mage.cards.d.DevoutMonk.class)); - cards.add(new SetCardInfo("Dread Reaper", 76, Rarity.RARE, mage.cards.d.DreadReaper.class)); - cards.add(new SetCardInfo("Durkwood Boars", 127, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); - cards.add(new SetCardInfo("Eager Cadet", 15, Rarity.COMMON, mage.cards.e.EagerCadet.class)); - cards.add(new SetCardInfo("Earth Elemental", 95, Rarity.UNCOMMON, mage.cards.e.EarthElemental.class)); - cards.add(new SetCardInfo("Exhaustion", 36, Rarity.UNCOMMON, mage.cards.e.Exhaustion.class)); - cards.add(new SetCardInfo("Extinguish", 37, Rarity.COMMON, mage.cards.e.Extinguish.class)); - cards.add(new SetCardInfo("Eye Spy", 38, Rarity.UNCOMMON, mage.cards.e.EyeSpy.class)); - cards.add(new SetCardInfo("False Peace", 16, Rarity.UNCOMMON, mage.cards.f.FalsePeace.class)); - cards.add(new SetCardInfo("Feral Shadow", 77, Rarity.COMMON, mage.cards.f.FeralShadow.class)); - cards.add(new SetCardInfo("Fire Elemental", 96, Rarity.UNCOMMON, mage.cards.f.FireElemental.class)); - cards.add(new SetCardInfo("Fire Tempest", 97, Rarity.RARE, mage.cards.f.FireTempest.class)); - cards.add(new SetCardInfo("Foot Soldiers", 17, Rarity.COMMON, mage.cards.f.FootSoldiers.class)); - cards.add(new SetCardInfo("Forest", 170, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 171, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 172, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 173, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Gerrard's Wisdom", 18, Rarity.RARE, mage.cards.g.GerrardsWisdom.class)); - cards.add(new SetCardInfo("Giant Octopus", 39, Rarity.COMMON, mage.cards.g.GiantOctopus.class)); - cards.add(new SetCardInfo("Goblin Cavaliers", 98, Rarity.COMMON, mage.cards.g.GoblinCavaliers.class)); - cards.add(new SetCardInfo("Goblin Chariot", 99, Rarity.COMMON, mage.cards.g.GoblinChariot.class)); - cards.add(new SetCardInfo("Goblin Commando", 100, Rarity.UNCOMMON, mage.cards.g.GoblinCommando.class)); - cards.add(new SetCardInfo("Goblin General", 101, Rarity.UNCOMMON, mage.cards.g.GoblinGeneral.class)); - cards.add(new SetCardInfo("Goblin Glider", 102, Rarity.UNCOMMON, mage.cards.g.GoblinGlider.class)); - cards.add(new SetCardInfo("Goblin Hero", 103, Rarity.COMMON, mage.cards.g.GoblinHero.class)); - cards.add(new SetCardInfo("Goblin Lore", 104, Rarity.UNCOMMON, mage.cards.g.GoblinLore.class)); - cards.add(new SetCardInfo("Goblin Mountaineer", 105, Rarity.COMMON, mage.cards.g.GoblinMountaineer.class)); - cards.add(new SetCardInfo("Goblin Settler", 106, Rarity.UNCOMMON, mage.cards.g.GoblinSettler.class)); - cards.add(new SetCardInfo("Gorilla Warrior", 128, Rarity.COMMON, mage.cards.g.GorillaWarrior.class)); - cards.add(new SetCardInfo("Gravedigger", 78, Rarity.UNCOMMON, mage.cards.g.Gravedigger.class)); - cards.add(new SetCardInfo("Grim Tutor", 79, Rarity.RARE, mage.cards.g.GrimTutor.class)); - cards.add(new SetCardInfo("Grizzly Bears", 129, Rarity.COMMON, mage.cards.g.GrizzlyBears.class)); - cards.add(new SetCardInfo("Hand of Death", 80, Rarity.COMMON, mage.cards.h.HandOfDeath.class)); - cards.add(new SetCardInfo("Hollow Dogs", 81, Rarity.COMMON, mage.cards.h.HollowDogs.class)); - cards.add(new SetCardInfo("Howling Fury", 82, Rarity.UNCOMMON, mage.cards.h.HowlingFury.class)); - cards.add(new SetCardInfo("Hulking Goblin", 107, Rarity.COMMON, mage.cards.h.HulkingGoblin.class)); - cards.add(new SetCardInfo("Hulking Ogre", 108, Rarity.UNCOMMON, mage.cards.h.HulkingOgre.class)); - cards.add(new SetCardInfo("Ingenious Thief", 40, Rarity.COMMON, mage.cards.i.IngeniousThief.class)); - cards.add(new SetCardInfo("Island", 158, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 159, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 160, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 161, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Jagged Lightning", 109, Rarity.UNCOMMON, mage.cards.j.JaggedLightning.class)); - cards.add(new SetCardInfo("Knight Errant", 19, Rarity.COMMON, mage.cards.k.KnightErrant.class)); - cards.add(new SetCardInfo("Last Chance", 110, Rarity.RARE, mage.cards.l.LastChance.class)); - cards.add(new SetCardInfo("Lava Axe", 111, Rarity.COMMON, mage.cards.l.LavaAxe.class)); - cards.add(new SetCardInfo("Lone Wolf", 130, Rarity.COMMON, mage.cards.l.LoneWolf.class)); - cards.add(new SetCardInfo("Loyal Sentry", 20, Rarity.RARE, mage.cards.l.LoyalSentry.class)); - cards.add(new SetCardInfo("Lynx", 131, Rarity.UNCOMMON, mage.cards.l.Lynx.class)); - cards.add(new SetCardInfo("Man-o'-War", 41, Rarity.UNCOMMON, mage.cards.m.ManOWar.class)); - cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 42, Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); - cards.add(new SetCardInfo("Mind Rot", 83, Rarity.COMMON, mage.cards.m.MindRot.class)); - cards.add(new SetCardInfo("Mons's Goblin Raiders", 112, Rarity.COMMON, mage.cards.m.MonssGoblinRaiders.class)); - cards.add(new SetCardInfo("Monstrous Growth", 132, Rarity.COMMON, mage.cards.m.MonstrousGrowth.class)); - cards.add(new SetCardInfo("Moon Sprite", 133, Rarity.UNCOMMON, mage.cards.m.MoonSprite.class)); - cards.add(new SetCardInfo("Mountain", 166, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 167, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 168, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 169, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Muck Rats", 84, Rarity.COMMON, mage.cards.m.MuckRats.class)); - cards.add(new SetCardInfo("Natural Spring", 134, Rarity.UNCOMMON, mage.cards.n.NaturalSpring.class)); - cards.add(new SetCardInfo("Nature's Cloak", 135, Rarity.RARE, mage.cards.n.NaturesCloak.class)); - cards.add(new SetCardInfo("Nature's Lore", 136, Rarity.COMMON, mage.cards.n.NaturesLore.class)); - cards.add(new SetCardInfo("Norwood Archers", 137, Rarity.COMMON, mage.cards.n.NorwoodArchers.class)); - cards.add(new SetCardInfo("Norwood Ranger", 138, Rarity.COMMON, mage.cards.n.NorwoodRanger.class)); - cards.add(new SetCardInfo("Ogre Warrior", 113, Rarity.COMMON, mage.cards.o.OgreWarrior.class)); - cards.add(new SetCardInfo("Path of Peace", 21, Rarity.COMMON, mage.cards.p.PathOfPeace.class)); - cards.add(new SetCardInfo("Phantom Warrior", 44, Rarity.RARE, mage.cards.p.PhantomWarrior.class)); - cards.add(new SetCardInfo("Plains", 154, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 155, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 156, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 157, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Pride of Lions", 139, Rarity.UNCOMMON, mage.cards.p.PrideOfLions.class)); - cards.add(new SetCardInfo("Psychic Transfer", 46, Rarity.RARE, mage.cards.p.PsychicTransfer.class)); - cards.add(new SetCardInfo("Raging Goblin", 114, Rarity.COMMON, mage.cards.r.RagingGoblin.class)); - cards.add(new SetCardInfo("Raise Dead", 85, Rarity.COMMON, mage.cards.r.RaiseDead.class)); - cards.add(new SetCardInfo("Ransack", 47, Rarity.RARE, mage.cards.r.Ransack.class)); - cards.add(new SetCardInfo("Ravenous Rats", 86, Rarity.UNCOMMON, mage.cards.r.RavenousRats.class)); - cards.add(new SetCardInfo("Relearn", 48, Rarity.UNCOMMON, mage.cards.r.Relearn.class)); - cards.add(new SetCardInfo("Relentless Assault", 115, Rarity.RARE, mage.cards.r.RelentlessAssault.class)); - cards.add(new SetCardInfo("Remove Soul", 49, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); - cards.add(new SetCardInfo("Renewing Touch", 140, Rarity.UNCOMMON, mage.cards.r.RenewingTouch.class)); - cards.add(new SetCardInfo("Righteous Charge", 22, Rarity.UNCOMMON, mage.cards.r.RighteousCharge.class)); - cards.add(new SetCardInfo("Righteous Fury", 23, Rarity.RARE, mage.cards.r.RighteousFury.class)); - cards.add(new SetCardInfo("Royal Falcon", 24, Rarity.COMMON, mage.cards.r.RoyalFalcon.class)); - cards.add(new SetCardInfo("Royal Trooper", 25, Rarity.UNCOMMON, mage.cards.r.RoyalTrooper.class)); - cards.add(new SetCardInfo("Sacred Nectar", 26, Rarity.COMMON, mage.cards.s.SacredNectar.class)); - cards.add(new SetCardInfo("Scathe Zombies", 87, Rarity.COMMON, mage.cards.s.ScatheZombies.class)); - cards.add(new SetCardInfo("Scorching Spear", 116, Rarity.COMMON, mage.cards.s.ScorchingSpear.class)); - cards.add(new SetCardInfo("Sea Eagle", 50, Rarity.COMMON, mage.cards.s.SeaEagle.class)); - cards.add(new SetCardInfo("Serpent Warrior", 88, Rarity.COMMON, mage.cards.s.SerpentWarrior.class)); - cards.add(new SetCardInfo("Shrieking Specter", 89, Rarity.UNCOMMON, mage.cards.s.ShriekingSpecter.class)); - cards.add(new SetCardInfo("Silverback Ape", 141, Rarity.UNCOMMON, mage.cards.s.SilverbackApe.class)); - cards.add(new SetCardInfo("Sleight of Hand", 51, Rarity.COMMON, mage.cards.s.SleightOfHand.class)); - cards.add(new SetCardInfo("Snapping Drake", 52, Rarity.COMMON, mage.cards.s.SnappingDrake.class)); - cards.add(new SetCardInfo("Soul Feast", 90, Rarity.UNCOMMON, mage.cards.s.SoulFeast.class)); - cards.add(new SetCardInfo("Southern Elephant", 142, Rarity.COMMON, mage.cards.s.SouthernElephant.class)); - cards.add(new SetCardInfo("Spitting Earth", 117, Rarity.UNCOMMON, mage.cards.s.SpittingEarth.class)); - cards.add(new SetCardInfo("Squall", 143, Rarity.COMMON, mage.cards.s.Squall.class)); - cards.add(new SetCardInfo("Steadfastness", 27, Rarity.COMMON, mage.cards.s.Steadfastness.class)); - cards.add(new SetCardInfo("Stone Rain", 118, Rarity.COMMON, mage.cards.s.StoneRain.class)); - cards.add(new SetCardInfo("Storm Crow", 53, Rarity.COMMON, mage.cards.s.StormCrow.class)); - cards.add(new SetCardInfo("Stream of Acid", 91, Rarity.UNCOMMON, mage.cards.s.StreamOfAcid.class)); - cards.add(new SetCardInfo("Summer Bloom", 144, Rarity.RARE, mage.cards.s.SummerBloom.class)); - cards.add(new SetCardInfo("Swamp", 162, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 163, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 164, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 165, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sylvan Basilisk", 145, Rarity.RARE, mage.cards.s.SylvanBasilisk.class)); - cards.add(new SetCardInfo("Sylvan Yeti", 146, Rarity.RARE, mage.cards.s.SylvanYeti.class)); - cards.add(new SetCardInfo("Thorn Elemental", 147, Rarity.RARE, mage.cards.t.ThornElemental.class)); - cards.add(new SetCardInfo("Thunder Dragon", 119, Rarity.RARE, mage.cards.t.ThunderDragon.class)); - cards.add(new SetCardInfo("Tidings", 54, Rarity.UNCOMMON, mage.cards.t.Tidings.class)); - cards.add(new SetCardInfo("Time Ebb", 55, Rarity.COMMON, mage.cards.t.TimeEbb.class)); - cards.add(new SetCardInfo("Time Warp", 56, Rarity.RARE, mage.cards.t.TimeWarp.class)); - cards.add(new SetCardInfo("Touch of Brilliance", 57, Rarity.COMMON, mage.cards.t.TouchOfBrilliance.class)); - cards.add(new SetCardInfo("Trained Orgg", 120, Rarity.RARE, mage.cards.t.TrainedOrgg.class)); - cards.add(new SetCardInfo("Tremor", 121, Rarity.COMMON, mage.cards.t.Tremor.class)); - cards.add(new SetCardInfo("Undo", 58, Rarity.UNCOMMON, mage.cards.u.Undo.class)); - cards.add(new SetCardInfo("Untamed Wilds", 148, Rarity.UNCOMMON, mage.cards.u.UntamedWilds.class)); - cards.add(new SetCardInfo("Venerable Monk", 28, Rarity.COMMON, mage.cards.v.VenerableMonk.class)); - cards.add(new SetCardInfo("Vengeance", 29, Rarity.UNCOMMON, mage.cards.v.Vengeance.class)); - cards.add(new SetCardInfo("Veteran Cavalier", 30, Rarity.UNCOMMON, mage.cards.v.VeteranCavalier.class)); - cards.add(new SetCardInfo("Vizzerdrix", 59, Rarity.RARE, mage.cards.v.Vizzerdrix.class)); - cards.add(new SetCardInfo("Volcanic Dragon", 122, Rarity.RARE, mage.cards.v.VolcanicDragon.class)); - cards.add(new SetCardInfo("Volcanic Hammer", 123, Rarity.COMMON, mage.cards.v.VolcanicHammer.class)); - cards.add(new SetCardInfo("Water Elemental", 60, Rarity.UNCOMMON, mage.cards.w.WaterElemental.class)); - cards.add(new SetCardInfo("Whiptail Wurm", 149, Rarity.UNCOMMON, mage.cards.w.WhiptailWurm.class)); - cards.add(new SetCardInfo("Whirlwind", 150, Rarity.RARE, mage.cards.w.Whirlwind.class)); - cards.add(new SetCardInfo("Wicked Pact", 92, Rarity.RARE, mage.cards.w.WickedPact.class)); - cards.add(new SetCardInfo("Wild Griffin", 31, Rarity.COMMON, mage.cards.w.WildGriffin.class)); - cards.add(new SetCardInfo("Wild Ox", 151, Rarity.UNCOMMON, mage.cards.w.WildOx.class)); - cards.add(new SetCardInfo("Willow Elf", 152, Rarity.COMMON, mage.cards.w.WillowElf.class)); - cards.add(new SetCardInfo("Wind Drake", 61, Rarity.COMMON, mage.cards.w.WindDrake.class)); - cards.add(new SetCardInfo("Wind Sail", 62, Rarity.UNCOMMON, mage.cards.w.WindSail.class)); - cards.add(new SetCardInfo("Wood Elves", 153, Rarity.UNCOMMON, mage.cards.w.WoodElves.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author LevelX2 + */ +public final class Starter1999 extends ExpansionSet { + + private static final Starter1999 instance = new Starter1999(); + + public static Starter1999 getInstance() { + return instance; + } + + private Starter1999() { + super("Starter 1999", "S99", ExpansionSet.buildDate(1999, 7, 1), SetType.SUPPLEMENTAL); + this.blockName = "Beginner"; + this.hasBasicLands = true; + this.hasBoosters = true; + this.numBoosterLands = 2; + this.numBoosterCommon = 9; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Abyssal Horror", 63, Rarity.RARE, mage.cards.a.AbyssalHorror.class)); + cards.add(new SetCardInfo("Air Elemental", 32, Rarity.UNCOMMON, mage.cards.a.AirElemental.class)); + cards.add(new SetCardInfo("Alluring Scent", 124, Rarity.RARE, mage.cards.a.AlluringScent.class)); + cards.add(new SetCardInfo("Ancient Craving", 64, Rarity.RARE, mage.cards.a.AncientCraving.class)); + cards.add(new SetCardInfo("Angelic Blessing", 3, Rarity.COMMON, mage.cards.a.AngelicBlessing.class)); + cards.add(new SetCardInfo("Angel of Light", 1, Rarity.UNCOMMON, mage.cards.a.AngelOfLight.class)); + cards.add(new SetCardInfo("Angel of Mercy", 2, Rarity.UNCOMMON, mage.cards.a.AngelOfMercy.class)); + cards.add(new SetCardInfo("Archangel", 4, Rarity.RARE, mage.cards.a.Archangel.class)); + cards.add(new SetCardInfo("Ardent Militia", 5, Rarity.UNCOMMON, mage.cards.a.ArdentMilitia.class)); + cards.add(new SetCardInfo("Armageddon", 6, Rarity.RARE, mage.cards.a.Armageddon.class)); + cards.add(new SetCardInfo("Barbtooth Wurm", 125, Rarity.COMMON, mage.cards.b.BarbtoothWurm.class)); + cards.add(new SetCardInfo("Bargain", 7, Rarity.UNCOMMON, mage.cards.b.Bargain.class)); + cards.add(new SetCardInfo("Blinding Light", 8, Rarity.RARE, mage.cards.b.BlindingLight.class)); + cards.add(new SetCardInfo("Bog Imp", 65, Rarity.COMMON, mage.cards.b.BogImp.class)); + cards.add(new SetCardInfo("Bog Raiders", 66, Rarity.COMMON, mage.cards.b.BogRaiders.class)); + cards.add(new SetCardInfo("Bog Wraith", 67, Rarity.UNCOMMON, mage.cards.b.BogWraith.class)); + cards.add(new SetCardInfo("Border Guard", 9, Rarity.COMMON, mage.cards.b.BorderGuard.class)); + cards.add(new SetCardInfo("Breath of Life", 10, Rarity.UNCOMMON, mage.cards.b.BreathOfLife.class)); + cards.add(new SetCardInfo("Bull Hippo", 126, Rarity.UNCOMMON, mage.cards.b.BullHippo.class)); + cards.add(new SetCardInfo("Champion Lancer", 11, Rarity.RARE, mage.cards.c.ChampionLancer.class)); + cards.add(new SetCardInfo("Charging Paladin", 12, Rarity.UNCOMMON, mage.cards.c.ChargingPaladin.class)); + cards.add(new SetCardInfo("Chorus of Woe", 68, Rarity.COMMON, mage.cards.c.ChorusOfWoe.class)); + cards.add(new SetCardInfo("Cinder Storm", 93, Rarity.UNCOMMON, mage.cards.c.CinderStorm.class)); + cards.add(new SetCardInfo("Coercion", 69, Rarity.UNCOMMON, mage.cards.c.Coercion.class)); + cards.add(new SetCardInfo("Coral Eel", 33, Rarity.COMMON, mage.cards.c.CoralEel.class)); + cards.add(new SetCardInfo("Counterspell", 34, Rarity.UNCOMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Dakmor Ghoul", 70, Rarity.UNCOMMON, mage.cards.d.DakmorGhoul.class)); + cards.add(new SetCardInfo("Dakmor Lancer", 71, Rarity.RARE, mage.cards.d.DakmorLancer.class)); + cards.add(new SetCardInfo("Dakmor Plague", 72, Rarity.UNCOMMON, mage.cards.d.DakmorPlague.class)); + cards.add(new SetCardInfo("Dakmor Scorpion", 73, Rarity.COMMON, mage.cards.d.DakmorScorpion.class)); + cards.add(new SetCardInfo("Dakmor Sorceress", 74, Rarity.RARE, mage.cards.d.DakmorSorceress.class)); + cards.add(new SetCardInfo("Dark Offering", 75, Rarity.UNCOMMON, mage.cards.d.DarkOffering.class)); + cards.add(new SetCardInfo("Denizen of the Deep", 35, Rarity.RARE, mage.cards.d.DenizenOfTheDeep.class)); + cards.add(new SetCardInfo("Devastation", 94, Rarity.RARE, mage.cards.d.Devastation.class)); + cards.add(new SetCardInfo("Devoted Hero", 13, Rarity.COMMON, mage.cards.d.DevotedHero.class)); + cards.add(new SetCardInfo("Devout Monk", 14, Rarity.COMMON, mage.cards.d.DevoutMonk.class)); + cards.add(new SetCardInfo("Dread Reaper", 76, Rarity.RARE, mage.cards.d.DreadReaper.class)); + cards.add(new SetCardInfo("Durkwood Boars", 127, Rarity.COMMON, mage.cards.d.DurkwoodBoars.class)); + cards.add(new SetCardInfo("Eager Cadet", 15, Rarity.COMMON, mage.cards.e.EagerCadet.class)); + cards.add(new SetCardInfo("Earth Elemental", 95, Rarity.UNCOMMON, mage.cards.e.EarthElemental.class)); + cards.add(new SetCardInfo("Exhaustion", 36, Rarity.UNCOMMON, mage.cards.e.Exhaustion.class)); + cards.add(new SetCardInfo("Extinguish", 37, Rarity.COMMON, mage.cards.e.Extinguish.class)); + cards.add(new SetCardInfo("Eye Spy", 38, Rarity.UNCOMMON, mage.cards.e.EyeSpy.class)); + cards.add(new SetCardInfo("False Peace", 16, Rarity.UNCOMMON, mage.cards.f.FalsePeace.class)); + cards.add(new SetCardInfo("Feral Shadow", 77, Rarity.COMMON, mage.cards.f.FeralShadow.class)); + cards.add(new SetCardInfo("Fire Elemental", 96, Rarity.UNCOMMON, mage.cards.f.FireElemental.class)); + cards.add(new SetCardInfo("Fire Tempest", 97, Rarity.RARE, mage.cards.f.FireTempest.class)); + cards.add(new SetCardInfo("Foot Soldiers", 17, Rarity.COMMON, mage.cards.f.FootSoldiers.class)); + cards.add(new SetCardInfo("Forest", 170, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 171, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 172, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 173, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Gerrard's Wisdom", 18, Rarity.RARE, mage.cards.g.GerrardsWisdom.class)); + cards.add(new SetCardInfo("Giant Octopus", 39, Rarity.COMMON, mage.cards.g.GiantOctopus.class)); + cards.add(new SetCardInfo("Goblin Cavaliers", 98, Rarity.COMMON, mage.cards.g.GoblinCavaliers.class)); + cards.add(new SetCardInfo("Goblin Chariot", 99, Rarity.COMMON, mage.cards.g.GoblinChariot.class)); + cards.add(new SetCardInfo("Goblin Commando", 100, Rarity.UNCOMMON, mage.cards.g.GoblinCommando.class)); + cards.add(new SetCardInfo("Goblin General", 101, Rarity.UNCOMMON, mage.cards.g.GoblinGeneral.class)); + cards.add(new SetCardInfo("Goblin Glider", 102, Rarity.UNCOMMON, mage.cards.g.GoblinGlider.class)); + cards.add(new SetCardInfo("Goblin Hero", 103, Rarity.COMMON, mage.cards.g.GoblinHero.class)); + cards.add(new SetCardInfo("Goblin Lore", 104, Rarity.UNCOMMON, mage.cards.g.GoblinLore.class)); + cards.add(new SetCardInfo("Goblin Mountaineer", 105, Rarity.COMMON, mage.cards.g.GoblinMountaineer.class)); + cards.add(new SetCardInfo("Goblin Settler", 106, Rarity.UNCOMMON, mage.cards.g.GoblinSettler.class)); + cards.add(new SetCardInfo("Gorilla Warrior", 128, Rarity.COMMON, mage.cards.g.GorillaWarrior.class)); + cards.add(new SetCardInfo("Gravedigger", 78, Rarity.UNCOMMON, mage.cards.g.Gravedigger.class)); + cards.add(new SetCardInfo("Grim Tutor", 79, Rarity.RARE, mage.cards.g.GrimTutor.class)); + cards.add(new SetCardInfo("Grizzly Bears", 129, Rarity.COMMON, mage.cards.g.GrizzlyBears.class)); + cards.add(new SetCardInfo("Hand of Death", 80, Rarity.COMMON, mage.cards.h.HandOfDeath.class)); + cards.add(new SetCardInfo("Hollow Dogs", 81, Rarity.COMMON, mage.cards.h.HollowDogs.class)); + cards.add(new SetCardInfo("Howling Fury", 82, Rarity.UNCOMMON, mage.cards.h.HowlingFury.class)); + cards.add(new SetCardInfo("Hulking Goblin", 107, Rarity.COMMON, mage.cards.h.HulkingGoblin.class)); + cards.add(new SetCardInfo("Hulking Ogre", 108, Rarity.UNCOMMON, mage.cards.h.HulkingOgre.class)); + cards.add(new SetCardInfo("Ingenious Thief", 40, Rarity.COMMON, mage.cards.i.IngeniousThief.class)); + cards.add(new SetCardInfo("Island", 158, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 159, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 160, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 161, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jagged Lightning", 109, Rarity.UNCOMMON, mage.cards.j.JaggedLightning.class)); + cards.add(new SetCardInfo("Knight Errant", 19, Rarity.COMMON, mage.cards.k.KnightErrant.class)); + cards.add(new SetCardInfo("Last Chance", 110, Rarity.RARE, mage.cards.l.LastChance.class)); + cards.add(new SetCardInfo("Lava Axe", 111, Rarity.COMMON, mage.cards.l.LavaAxe.class)); + cards.add(new SetCardInfo("Lone Wolf", 130, Rarity.COMMON, mage.cards.l.LoneWolf.class)); + cards.add(new SetCardInfo("Loyal Sentry", 20, Rarity.RARE, mage.cards.l.LoyalSentry.class)); + cards.add(new SetCardInfo("Lynx", 131, Rarity.UNCOMMON, mage.cards.l.Lynx.class)); + cards.add(new SetCardInfo("Man-o'-War", 41, Rarity.UNCOMMON, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Merfolk of the Pearl Trident", 42, Rarity.COMMON, mage.cards.m.MerfolkOfThePearlTrident.class)); + cards.add(new SetCardInfo("Mind Rot", 83, Rarity.COMMON, mage.cards.m.MindRot.class)); + cards.add(new SetCardInfo("Mons's Goblin Raiders", 112, Rarity.COMMON, mage.cards.m.MonssGoblinRaiders.class)); + cards.add(new SetCardInfo("Monstrous Growth", 132, Rarity.COMMON, mage.cards.m.MonstrousGrowth.class)); + cards.add(new SetCardInfo("Moon Sprite", 133, Rarity.UNCOMMON, mage.cards.m.MoonSprite.class)); + cards.add(new SetCardInfo("Mountain", 166, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 167, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 168, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 169, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Muck Rats", 84, Rarity.COMMON, mage.cards.m.MuckRats.class)); + cards.add(new SetCardInfo("Natural Spring", 134, Rarity.UNCOMMON, mage.cards.n.NaturalSpring.class)); + cards.add(new SetCardInfo("Nature's Cloak", 135, Rarity.RARE, mage.cards.n.NaturesCloak.class)); + cards.add(new SetCardInfo("Nature's Lore", 136, Rarity.COMMON, mage.cards.n.NaturesLore.class)); + cards.add(new SetCardInfo("Norwood Archers", 137, Rarity.COMMON, mage.cards.n.NorwoodArchers.class)); + cards.add(new SetCardInfo("Norwood Ranger", 138, Rarity.COMMON, mage.cards.n.NorwoodRanger.class)); + cards.add(new SetCardInfo("Ogre Warrior", 113, Rarity.COMMON, mage.cards.o.OgreWarrior.class)); + cards.add(new SetCardInfo("Path of Peace", 21, Rarity.COMMON, mage.cards.p.PathOfPeace.class)); + cards.add(new SetCardInfo("Phantom Warrior", 44, Rarity.RARE, mage.cards.p.PhantomWarrior.class)); + cards.add(new SetCardInfo("Plains", 154, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 155, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 156, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 157, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Pride of Lions", 139, Rarity.UNCOMMON, mage.cards.p.PrideOfLions.class)); + cards.add(new SetCardInfo("Psychic Transfer", 46, Rarity.RARE, mage.cards.p.PsychicTransfer.class)); + cards.add(new SetCardInfo("Raging Goblin", 114, Rarity.COMMON, mage.cards.r.RagingGoblin.class)); + cards.add(new SetCardInfo("Raise Dead", 85, Rarity.COMMON, mage.cards.r.RaiseDead.class)); + cards.add(new SetCardInfo("Ransack", 47, Rarity.RARE, mage.cards.r.Ransack.class)); + cards.add(new SetCardInfo("Ravenous Rats", 86, Rarity.UNCOMMON, mage.cards.r.RavenousRats.class)); + cards.add(new SetCardInfo("Relearn", 48, Rarity.UNCOMMON, mage.cards.r.Relearn.class)); + cards.add(new SetCardInfo("Relentless Assault", 115, Rarity.RARE, mage.cards.r.RelentlessAssault.class)); + cards.add(new SetCardInfo("Remove Soul", 49, Rarity.COMMON, mage.cards.r.RemoveSoul.class)); + cards.add(new SetCardInfo("Renewing Touch", 140, Rarity.UNCOMMON, mage.cards.r.RenewingTouch.class)); + cards.add(new SetCardInfo("Righteous Charge", 22, Rarity.UNCOMMON, mage.cards.r.RighteousCharge.class)); + cards.add(new SetCardInfo("Righteous Fury", 23, Rarity.RARE, mage.cards.r.RighteousFury.class)); + cards.add(new SetCardInfo("Royal Falcon", 24, Rarity.COMMON, mage.cards.r.RoyalFalcon.class)); + cards.add(new SetCardInfo("Royal Trooper", 25, Rarity.UNCOMMON, mage.cards.r.RoyalTrooper.class)); + cards.add(new SetCardInfo("Sacred Nectar", 26, Rarity.COMMON, mage.cards.s.SacredNectar.class)); + cards.add(new SetCardInfo("Scathe Zombies", 87, Rarity.COMMON, mage.cards.s.ScatheZombies.class)); + cards.add(new SetCardInfo("Scorching Spear", 116, Rarity.COMMON, mage.cards.s.ScorchingSpear.class)); + cards.add(new SetCardInfo("Sea Eagle", 50, Rarity.COMMON, mage.cards.s.SeaEagle.class)); + cards.add(new SetCardInfo("Serpent Warrior", 88, Rarity.COMMON, mage.cards.s.SerpentWarrior.class)); + cards.add(new SetCardInfo("Shrieking Specter", 89, Rarity.UNCOMMON, mage.cards.s.ShriekingSpecter.class)); + cards.add(new SetCardInfo("Silverback Ape", 141, Rarity.UNCOMMON, mage.cards.s.SilverbackApe.class)); + cards.add(new SetCardInfo("Sleight of Hand", 51, Rarity.COMMON, mage.cards.s.SleightOfHand.class)); + cards.add(new SetCardInfo("Snapping Drake", 52, Rarity.COMMON, mage.cards.s.SnappingDrake.class)); + cards.add(new SetCardInfo("Soul Feast", 90, Rarity.UNCOMMON, mage.cards.s.SoulFeast.class)); + cards.add(new SetCardInfo("Southern Elephant", 142, Rarity.COMMON, mage.cards.s.SouthernElephant.class)); + cards.add(new SetCardInfo("Spitting Earth", 117, Rarity.UNCOMMON, mage.cards.s.SpittingEarth.class)); + cards.add(new SetCardInfo("Squall", 143, Rarity.COMMON, mage.cards.s.Squall.class)); + cards.add(new SetCardInfo("Steadfastness", 27, Rarity.COMMON, mage.cards.s.Steadfastness.class)); + cards.add(new SetCardInfo("Stone Rain", 118, Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Storm Crow", 53, Rarity.COMMON, mage.cards.s.StormCrow.class)); + cards.add(new SetCardInfo("Stream of Acid", 91, Rarity.UNCOMMON, mage.cards.s.StreamOfAcid.class)); + cards.add(new SetCardInfo("Summer Bloom", 144, Rarity.RARE, mage.cards.s.SummerBloom.class)); + cards.add(new SetCardInfo("Swamp", 162, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 163, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 164, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 165, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Basilisk", 145, Rarity.RARE, mage.cards.s.SylvanBasilisk.class)); + cards.add(new SetCardInfo("Sylvan Yeti", 146, Rarity.RARE, mage.cards.s.SylvanYeti.class)); + cards.add(new SetCardInfo("Thorn Elemental", 147, Rarity.RARE, mage.cards.t.ThornElemental.class)); + cards.add(new SetCardInfo("Thunder Dragon", 119, Rarity.RARE, mage.cards.t.ThunderDragon.class)); + cards.add(new SetCardInfo("Tidings", 54, Rarity.UNCOMMON, mage.cards.t.Tidings.class)); + cards.add(new SetCardInfo("Time Ebb", 55, Rarity.COMMON, mage.cards.t.TimeEbb.class)); + cards.add(new SetCardInfo("Time Warp", 56, Rarity.RARE, mage.cards.t.TimeWarp.class)); + cards.add(new SetCardInfo("Touch of Brilliance", 57, Rarity.COMMON, mage.cards.t.TouchOfBrilliance.class)); + cards.add(new SetCardInfo("Trained Orgg", 120, Rarity.RARE, mage.cards.t.TrainedOrgg.class)); + cards.add(new SetCardInfo("Tremor", 121, Rarity.COMMON, mage.cards.t.Tremor.class)); + cards.add(new SetCardInfo("Undo", 58, Rarity.UNCOMMON, mage.cards.u.Undo.class)); + cards.add(new SetCardInfo("Untamed Wilds", 148, Rarity.UNCOMMON, mage.cards.u.UntamedWilds.class)); + cards.add(new SetCardInfo("Venerable Monk", 28, Rarity.COMMON, mage.cards.v.VenerableMonk.class)); + cards.add(new SetCardInfo("Vengeance", 29, Rarity.UNCOMMON, mage.cards.v.Vengeance.class)); + cards.add(new SetCardInfo("Veteran Cavalier", 30, Rarity.UNCOMMON, mage.cards.v.VeteranCavalier.class)); + cards.add(new SetCardInfo("Vizzerdrix", 59, Rarity.RARE, mage.cards.v.Vizzerdrix.class)); + cards.add(new SetCardInfo("Volcanic Dragon", 122, Rarity.RARE, mage.cards.v.VolcanicDragon.class)); + cards.add(new SetCardInfo("Volcanic Hammer", 123, Rarity.COMMON, mage.cards.v.VolcanicHammer.class)); + cards.add(new SetCardInfo("Water Elemental", 60, Rarity.UNCOMMON, mage.cards.w.WaterElemental.class)); + cards.add(new SetCardInfo("Whiptail Wurm", 149, Rarity.UNCOMMON, mage.cards.w.WhiptailWurm.class)); + cards.add(new SetCardInfo("Whirlwind", 150, Rarity.RARE, mage.cards.w.Whirlwind.class)); + cards.add(new SetCardInfo("Wicked Pact", 92, Rarity.RARE, mage.cards.w.WickedPact.class)); + cards.add(new SetCardInfo("Wild Griffin", 31, Rarity.COMMON, mage.cards.w.WildGriffin.class)); + cards.add(new SetCardInfo("Wild Ox", 151, Rarity.UNCOMMON, mage.cards.w.WildOx.class)); + cards.add(new SetCardInfo("Willow Elf", 152, Rarity.COMMON, mage.cards.w.WillowElf.class)); + cards.add(new SetCardInfo("Wind Drake", 61, Rarity.COMMON, mage.cards.w.WindDrake.class)); + cards.add(new SetCardInfo("Wind Sail", 62, Rarity.UNCOMMON, mage.cards.w.WindSail.class)); + cards.add(new SetCardInfo("Wood Elves", 153, Rarity.UNCOMMON, mage.cards.w.WoodElves.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Stronghold.java b/Mage.Sets/src/mage/sets/Stronghold.java index 173d3fcf778..644edecce68 100644 --- a/Mage.Sets/src/mage/sets/Stronghold.java +++ b/Mage.Sets/src/mage/sets/Stronghold.java @@ -1,174 +1,174 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author North - */ -public final class Stronghold extends ExpansionSet { - - private static final Stronghold instance = new Stronghold(); - - public static Stronghold getInstance() { - return instance; - } - - private Stronghold() { - super("Stronghold", "STH", ExpansionSet.buildDate(1998, 3, 2), SetType.EXPANSION); - this.blockName = "Tempest"; - this.parentSet = Tempest.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - - cards.add(new SetCardInfo("Acidic Sliver", 126, Rarity.UNCOMMON, mage.cards.a.AcidicSliver.class)); - cards.add(new SetCardInfo("Amok", 76, Rarity.RARE, mage.cards.a.Amok.class)); - cards.add(new SetCardInfo("Awakening", 101, Rarity.RARE, mage.cards.a.Awakening.class)); - cards.add(new SetCardInfo("Bandage", 1, Rarity.COMMON, mage.cards.b.Bandage.class)); - cards.add(new SetCardInfo("Bottomless Pit", 51, Rarity.UNCOMMON, mage.cards.b.BottomlessPit.class)); - cards.add(new SetCardInfo("Brush with Death", 52, Rarity.COMMON, mage.cards.b.BrushWithDeath.class)); - cards.add(new SetCardInfo("Bullwhip", 132, Rarity.UNCOMMON, mage.cards.b.Bullwhip.class)); - cards.add(new SetCardInfo("Burgeoning", 102, Rarity.RARE, mage.cards.b.Burgeoning.class)); - cards.add(new SetCardInfo("Calming Licid", 2, Rarity.UNCOMMON, mage.cards.c.CalmingLicid.class)); - cards.add(new SetCardInfo("Cannibalize", 53, Rarity.COMMON, mage.cards.c.Cannibalize.class)); - cards.add(new SetCardInfo("Carnassid", 103, Rarity.RARE, mage.cards.c.Carnassid.class)); - cards.add(new SetCardInfo("Change of Heart", 3, Rarity.COMMON, mage.cards.c.ChangeOfHeart.class)); - cards.add(new SetCardInfo("Cloud Spirit", 26, Rarity.COMMON, mage.cards.c.CloudSpirit.class)); - cards.add(new SetCardInfo("Constant Mists", 104, Rarity.UNCOMMON, mage.cards.c.ConstantMists.class)); - cards.add(new SetCardInfo("Contemplation", 4, Rarity.UNCOMMON, mage.cards.c.Contemplation.class)); - cards.add(new SetCardInfo("Contempt", 27, Rarity.COMMON, mage.cards.c.Contempt.class)); - cards.add(new SetCardInfo("Conviction", 5, Rarity.COMMON, mage.cards.c.Conviction.class)); - cards.add(new SetCardInfo("Convulsing Licid", 77, Rarity.UNCOMMON, mage.cards.c.ConvulsingLicid.class)); - cards.add(new SetCardInfo("Corrupting Licid", 54, Rarity.UNCOMMON, mage.cards.c.CorruptingLicid.class)); - cards.add(new SetCardInfo("Craven Giant", 78, Rarity.COMMON, mage.cards.c.CravenGiant.class)); - cards.add(new SetCardInfo("Crossbow Ambush", 105, Rarity.COMMON, mage.cards.c.CrossbowAmbush.class)); - cards.add(new SetCardInfo("Crovax the Cursed", 55, Rarity.RARE, mage.cards.c.CrovaxTheCursed.class)); - cards.add(new SetCardInfo("Crystalline Sliver", 127, Rarity.UNCOMMON, mage.cards.c.CrystallineSliver.class)); - cards.add(new SetCardInfo("Dauthi Trapper", 56, Rarity.UNCOMMON, mage.cards.d.DauthiTrapper.class)); - cards.add(new SetCardInfo("Death Stroke", 57, Rarity.COMMON, mage.cards.d.DeathStroke.class)); - cards.add(new SetCardInfo("Dream Halls", 28, Rarity.RARE, mage.cards.d.DreamHalls.class)); - cards.add(new SetCardInfo("Dream Prowler", 29, Rarity.COMMON, mage.cards.d.DreamProwler.class)); - cards.add(new SetCardInfo("Duct Crawler", 79, Rarity.COMMON, mage.cards.d.DuctCrawler.class)); - cards.add(new SetCardInfo("Dungeon Shade", 58, Rarity.COMMON, mage.cards.d.DungeonShade.class)); - cards.add(new SetCardInfo("Elven Rite", 106, Rarity.UNCOMMON, mage.cards.e.ElvenRite.class)); - cards.add(new SetCardInfo("Endangered Armodon", 107, Rarity.COMMON, mage.cards.e.EndangeredArmodon.class)); - cards.add(new SetCardInfo("Ensnaring Bridge", 133, Rarity.RARE, mage.cards.e.EnsnaringBridge.class)); - cards.add(new SetCardInfo("Evacuation", 30, Rarity.RARE, mage.cards.e.Evacuation.class)); - cards.add(new SetCardInfo("Fanning the Flames", 80, Rarity.UNCOMMON, mage.cards.f.FanningTheFlames.class)); - cards.add(new SetCardInfo("Flame Wave", 81, Rarity.UNCOMMON, mage.cards.f.FlameWave.class)); - cards.add(new SetCardInfo("Fling", 82, Rarity.COMMON, mage.cards.f.Fling.class)); - cards.add(new SetCardInfo("Flowstone Blade", 83, Rarity.COMMON, mage.cards.f.FlowstoneBlade.class)); - cards.add(new SetCardInfo("Flowstone Hellion", 84, Rarity.UNCOMMON, mage.cards.f.FlowstoneHellion.class)); - cards.add(new SetCardInfo("Flowstone Mauler", 85, Rarity.RARE, mage.cards.f.FlowstoneMauler.class)); - cards.add(new SetCardInfo("Flowstone Shambler", 86, Rarity.COMMON, mage.cards.f.FlowstoneShambler.class)); - cards.add(new SetCardInfo("Foul Imp", 59, Rarity.COMMON, mage.cards.f.FoulImp.class)); - cards.add(new SetCardInfo("Furnace Spirit", 87, Rarity.COMMON, mage.cards.f.FurnaceSpirit.class)); - cards.add(new SetCardInfo("Gliding Licid", 31, Rarity.UNCOMMON, mage.cards.g.GlidingLicid.class)); - cards.add(new SetCardInfo("Grave Pact", 60, Rarity.RARE, mage.cards.g.GravePact.class)); - cards.add(new SetCardInfo("Hammerhead Shark", 32, Rarity.COMMON, mage.cards.h.HammerheadShark.class)); - cards.add(new SetCardInfo("Heartstone", 134, Rarity.UNCOMMON, mage.cards.h.Heartstone.class)); - cards.add(new SetCardInfo("Heat of Battle", 88, Rarity.UNCOMMON, mage.cards.h.HeatOfBattle.class)); - cards.add(new SetCardInfo("Hermit Druid", 108, Rarity.RARE, mage.cards.h.HermitDruid.class)); - cards.add(new SetCardInfo("Hesitation", 33, Rarity.UNCOMMON, mage.cards.h.Hesitation.class)); - cards.add(new SetCardInfo("Hibernation Sliver", 128, Rarity.UNCOMMON, mage.cards.h.HibernationSliver.class)); - cards.add(new SetCardInfo("Hidden Retreat", 6, Rarity.RARE, mage.cards.h.HiddenRetreat.class)); - cards.add(new SetCardInfo("Honor Guard", 7, Rarity.COMMON, mage.cards.h.HonorGuard.class)); - cards.add(new SetCardInfo("Horn of Greed", 135, Rarity.RARE, mage.cards.h.HornOfGreed.class)); - cards.add(new SetCardInfo("Hornet Cannon", 136, Rarity.UNCOMMON, mage.cards.h.HornetCannon.class)); - cards.add(new SetCardInfo("Intruder Alarm", 34, Rarity.RARE, mage.cards.i.IntruderAlarm.class)); - cards.add(new SetCardInfo("Invasion Plans", 89, Rarity.RARE, mage.cards.i.InvasionPlans.class)); - cards.add(new SetCardInfo("Jinxed Ring", 137, Rarity.RARE, mage.cards.j.JinxedRing.class)); - cards.add(new SetCardInfo("Lab Rats", 61, Rarity.COMMON, mage.cards.l.LabRats.class)); - cards.add(new SetCardInfo("Lancers en-Kor", 8, Rarity.UNCOMMON, mage.cards.l.LancersEnKor.class)); - cards.add(new SetCardInfo("Leap", 35, Rarity.COMMON, mage.cards.l.Leap.class)); - cards.add(new SetCardInfo("Lowland Basilisk", 109, Rarity.COMMON, mage.cards.l.LowlandBasilisk.class)); - cards.add(new SetCardInfo("Mana Leak", 36, Rarity.COMMON, mage.cards.m.ManaLeak.class)); - cards.add(new SetCardInfo("Mask of the Mimic", 37, Rarity.UNCOMMON, mage.cards.m.MaskOfTheMimic.class)); - cards.add(new SetCardInfo("Megrim", 62, Rarity.UNCOMMON, mage.cards.m.Megrim.class)); - cards.add(new SetCardInfo("Mind Games", 38, Rarity.COMMON, mage.cards.m.MindGames.class)); - cards.add(new SetCardInfo("Mind Peel", 63, Rarity.UNCOMMON, mage.cards.m.MindPeel.class)); - cards.add(new SetCardInfo("Mindwarper", 64, Rarity.RARE, mage.cards.m.Mindwarper.class)); - cards.add(new SetCardInfo("Mob Justice", 90, Rarity.COMMON, mage.cards.m.MobJustice.class)); - cards.add(new SetCardInfo("Mogg Bombers", 91, Rarity.COMMON, mage.cards.m.MoggBombers.class)); - cards.add(new SetCardInfo("Mogg Flunkies", 92, Rarity.COMMON, mage.cards.m.MoggFlunkies.class)); - cards.add(new SetCardInfo("Mogg Infestation", 93, Rarity.RARE, mage.cards.m.MoggInfestation.class)); - cards.add(new SetCardInfo("Mogg Maniac", 94, Rarity.UNCOMMON, mage.cards.m.MoggManiac.class)); - cards.add(new SetCardInfo("Morgue Thrull", 65, Rarity.COMMON, mage.cards.m.MorgueThrull.class)); - cards.add(new SetCardInfo("Mortuary", 66, Rarity.RARE, mage.cards.m.Mortuary.class)); - cards.add(new SetCardInfo("Mox Diamond", 138, Rarity.RARE, mage.cards.m.MoxDiamond.class)); - cards.add(new SetCardInfo("Mulch", 110, Rarity.COMMON, mage.cards.m.Mulch.class)); - cards.add(new SetCardInfo("Nomads en-Kor", 9, Rarity.COMMON, mage.cards.n.NomadsEnKor.class)); - cards.add(new SetCardInfo("Overgrowth", 111, Rarity.COMMON, mage.cards.o.Overgrowth.class)); - cards.add(new SetCardInfo("Portcullis", 139, Rarity.RARE, mage.cards.p.Portcullis.class)); - cards.add(new SetCardInfo("Primal Rage", 112, Rarity.UNCOMMON, mage.cards.p.PrimalRage.class)); - cards.add(new SetCardInfo("Provoke", 113, Rarity.COMMON, mage.cards.p.Provoke.class)); - cards.add(new SetCardInfo("Pursuit of Knowledge", 10, Rarity.RARE, mage.cards.p.PursuitOfKnowledge.class)); - cards.add(new SetCardInfo("Rabid Rats", 67, Rarity.COMMON, mage.cards.r.RabidRats.class)); - cards.add(new SetCardInfo("Ransack", 39, Rarity.UNCOMMON, mage.cards.r.Ransack.class)); - cards.add(new SetCardInfo("Rebound", 40, Rarity.UNCOMMON, mage.cards.r.Rebound.class)); - cards.add(new SetCardInfo("Reins of Power", 41, Rarity.RARE, mage.cards.r.ReinsOfPower.class)); - cards.add(new SetCardInfo("Revenant", 68, Rarity.RARE, mage.cards.r.Revenant.class)); - cards.add(new SetCardInfo("Rolling Stones", 11, Rarity.RARE, mage.cards.r.RollingStones.class)); - cards.add(new SetCardInfo("Ruination", 95, Rarity.RARE, mage.cards.r.Ruination.class)); - cards.add(new SetCardInfo("Sacred Ground", 12, Rarity.RARE, mage.cards.s.SacredGround.class)); - cards.add(new SetCardInfo("Samite Blessing", 13, Rarity.COMMON, mage.cards.s.SamiteBlessing.class)); - cards.add(new SetCardInfo("Scapegoat", 14, Rarity.UNCOMMON, mage.cards.s.Scapegoat.class)); - cards.add(new SetCardInfo("Seething Anger", 96, Rarity.COMMON, mage.cards.s.SeethingAnger.class)); - cards.add(new SetCardInfo("Serpent Warrior", 69, Rarity.COMMON, mage.cards.s.SerpentWarrior.class)); - cards.add(new SetCardInfo("Shaman en-Kor", 15, Rarity.RARE, mage.cards.s.ShamanEnKor.class)); - cards.add(new SetCardInfo("Shard Phoenix", 97, Rarity.RARE, mage.cards.s.ShardPhoenix.class)); - cards.add(new SetCardInfo("Shifting Wall", 140, Rarity.UNCOMMON, mage.cards.s.ShiftingWall.class)); - cards.add(new SetCardInfo("Shock", 98, Rarity.COMMON, mage.cards.s.Shock.class)); - cards.add(new SetCardInfo("Sift", 42, Rarity.COMMON, mage.cards.s.Sift.class)); - cards.add(new SetCardInfo("Silver Wyvern", 43, Rarity.RARE, mage.cards.s.SilverWyvern.class)); - cards.add(new SetCardInfo("Skeleton Scavengers", 70, Rarity.RARE, mage.cards.s.SkeletonScavengers.class)); - cards.add(new SetCardInfo("Skyshroud Archer", 114, Rarity.COMMON, mage.cards.s.SkyshroudArcher.class)); - cards.add(new SetCardInfo("Skyshroud Falcon", 16, Rarity.COMMON, mage.cards.s.SkyshroudFalcon.class)); - cards.add(new SetCardInfo("Skyshroud Troopers", 115, Rarity.COMMON, mage.cards.s.SkyshroudTroopers.class)); - cards.add(new SetCardInfo("Sliver Queen", 129, Rarity.RARE, mage.cards.s.SliverQueen.class)); - cards.add(new SetCardInfo("Smite", 17, Rarity.COMMON, mage.cards.s.Smite.class)); - cards.add(new SetCardInfo("Soltari Champion", 18, Rarity.RARE, mage.cards.s.SoltariChampion.class)); - cards.add(new SetCardInfo("Spike Breeder", 116, Rarity.RARE, mage.cards.s.SpikeBreeder.class)); - cards.add(new SetCardInfo("Spike Colony", 117, Rarity.COMMON, mage.cards.s.SpikeColony.class)); - cards.add(new SetCardInfo("Spike Feeder", 118, Rarity.UNCOMMON, mage.cards.s.SpikeFeeder.class)); - cards.add(new SetCardInfo("Spike Soldier", 119, Rarity.UNCOMMON, mage.cards.s.SpikeSoldier.class)); - cards.add(new SetCardInfo("Spike Worker", 120, Rarity.COMMON, mage.cards.s.SpikeWorker.class)); - cards.add(new SetCardInfo("Spindrift Drake", 44, Rarity.COMMON, mage.cards.s.SpindriftDrake.class)); - cards.add(new SetCardInfo("Spined Sliver", 130, Rarity.UNCOMMON, mage.cards.s.SpinedSliver.class)); - cards.add(new SetCardInfo("Spined Wurm", 121, Rarity.COMMON, mage.cards.s.SpinedWurm.class)); - cards.add(new SetCardInfo("Spirit en-Kor", 19, Rarity.COMMON, mage.cards.s.SpiritEnKor.class)); - cards.add(new SetCardInfo("Spitting Hydra", 99, Rarity.RARE, mage.cards.s.SpittingHydra.class)); - cards.add(new SetCardInfo("Stronghold Assassin", 71, Rarity.RARE, mage.cards.s.StrongholdAssassin.class)); - cards.add(new SetCardInfo("Stronghold Taskmaster", 72, Rarity.UNCOMMON, mage.cards.s.StrongholdTaskmaster.class)); - cards.add(new SetCardInfo("Sword of the Chosen", 141, Rarity.RARE, mage.cards.s.SwordOfTheChosen.class)); - cards.add(new SetCardInfo("Temper", 20, Rarity.UNCOMMON, mage.cards.t.Temper.class)); - cards.add(new SetCardInfo("Tempting Licid", 122, Rarity.UNCOMMON, mage.cards.t.TemptingLicid.class)); - cards.add(new SetCardInfo("Thalakos Deceiver", 45, Rarity.RARE, mage.cards.t.ThalakosDeceiver.class)); - cards.add(new SetCardInfo("Tidal Surge", 46, Rarity.COMMON, mage.cards.t.TidalSurge.class)); - cards.add(new SetCardInfo("Tidal Warrior", 47, Rarity.COMMON, mage.cards.t.TidalWarrior.class)); - cards.add(new SetCardInfo("Torment", 73, Rarity.COMMON, mage.cards.t.Torment.class)); - cards.add(new SetCardInfo("Tortured Existence", 74, Rarity.COMMON, mage.cards.t.TorturedExistence.class)); - cards.add(new SetCardInfo("Venerable Monk", 21, Rarity.COMMON, mage.cards.v.VenerableMonk.class)); - cards.add(new SetCardInfo("Verdant Touch", 123, Rarity.RARE, mage.cards.v.VerdantTouch.class)); - cards.add(new SetCardInfo("Victual Sliver", 131, Rarity.UNCOMMON, mage.cards.v.VictualSliver.class)); - cards.add(new SetCardInfo("Volrath's Gardens", 124, Rarity.RARE, mage.cards.v.VolrathsGardens.class)); - cards.add(new SetCardInfo("Volrath's Laboratory", 142, Rarity.RARE, mage.cards.v.VolrathsLaboratory.class)); - cards.add(new SetCardInfo("Volrath's Shapeshifter", 48, Rarity.RARE, mage.cards.v.VolrathsShapeshifter.class)); - cards.add(new SetCardInfo("Volrath's Stronghold", 143, Rarity.RARE, mage.cards.v.VolrathsStronghold.class)); - cards.add(new SetCardInfo("Walking Dream", 49, Rarity.UNCOMMON, mage.cards.w.WalkingDream.class)); - cards.add(new SetCardInfo("Wall of Blossoms", 125, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); - cards.add(new SetCardInfo("Wall of Essence", 22, Rarity.UNCOMMON, mage.cards.w.WallOfEssence.class)); - cards.add(new SetCardInfo("Wall of Razors", 100, Rarity.UNCOMMON, mage.cards.w.WallOfRazors.class)); - cards.add(new SetCardInfo("Wall of Souls", 75, Rarity.UNCOMMON, mage.cards.w.WallOfSouls.class)); - cards.add(new SetCardInfo("Wall of Tears", 50, Rarity.UNCOMMON, mage.cards.w.WallOfTears.class)); - cards.add(new SetCardInfo("Warrior Angel", 24, Rarity.RARE, mage.cards.w.WarriorAngel.class)); - cards.add(new SetCardInfo("Warrior en-Kor", 23, Rarity.UNCOMMON, mage.cards.w.WarriorEnKor.class)); - cards.add(new SetCardInfo("Youthful Knight", 25, Rarity.COMMON, mage.cards.y.YouthfulKnight.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author North + */ +public final class Stronghold extends ExpansionSet { + + private static final Stronghold instance = new Stronghold(); + + public static Stronghold getInstance() { + return instance; + } + + private Stronghold() { + super("Stronghold", "STH", ExpansionSet.buildDate(1998, 3, 2), SetType.EXPANSION); + this.blockName = "Tempest"; + this.parentSet = Tempest.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + + cards.add(new SetCardInfo("Acidic Sliver", 126, Rarity.UNCOMMON, mage.cards.a.AcidicSliver.class)); + cards.add(new SetCardInfo("Amok", 76, Rarity.RARE, mage.cards.a.Amok.class)); + cards.add(new SetCardInfo("Awakening", 101, Rarity.RARE, mage.cards.a.Awakening.class)); + cards.add(new SetCardInfo("Bandage", 1, Rarity.COMMON, mage.cards.b.Bandage.class)); + cards.add(new SetCardInfo("Bottomless Pit", 51, Rarity.UNCOMMON, mage.cards.b.BottomlessPit.class)); + cards.add(new SetCardInfo("Brush with Death", 52, Rarity.COMMON, mage.cards.b.BrushWithDeath.class)); + cards.add(new SetCardInfo("Bullwhip", 132, Rarity.UNCOMMON, mage.cards.b.Bullwhip.class)); + cards.add(new SetCardInfo("Burgeoning", 102, Rarity.RARE, mage.cards.b.Burgeoning.class)); + cards.add(new SetCardInfo("Calming Licid", 2, Rarity.UNCOMMON, mage.cards.c.CalmingLicid.class)); + cards.add(new SetCardInfo("Cannibalize", 53, Rarity.COMMON, mage.cards.c.Cannibalize.class)); + cards.add(new SetCardInfo("Carnassid", 103, Rarity.RARE, mage.cards.c.Carnassid.class)); + cards.add(new SetCardInfo("Change of Heart", 3, Rarity.COMMON, mage.cards.c.ChangeOfHeart.class)); + cards.add(new SetCardInfo("Cloud Spirit", 26, Rarity.COMMON, mage.cards.c.CloudSpirit.class)); + cards.add(new SetCardInfo("Constant Mists", 104, Rarity.UNCOMMON, mage.cards.c.ConstantMists.class)); + cards.add(new SetCardInfo("Contemplation", 4, Rarity.UNCOMMON, mage.cards.c.Contemplation.class)); + cards.add(new SetCardInfo("Contempt", 27, Rarity.COMMON, mage.cards.c.Contempt.class)); + cards.add(new SetCardInfo("Conviction", 5, Rarity.COMMON, mage.cards.c.Conviction.class)); + cards.add(new SetCardInfo("Convulsing Licid", 77, Rarity.UNCOMMON, mage.cards.c.ConvulsingLicid.class)); + cards.add(new SetCardInfo("Corrupting Licid", 54, Rarity.UNCOMMON, mage.cards.c.CorruptingLicid.class)); + cards.add(new SetCardInfo("Craven Giant", 78, Rarity.COMMON, mage.cards.c.CravenGiant.class)); + cards.add(new SetCardInfo("Crossbow Ambush", 105, Rarity.COMMON, mage.cards.c.CrossbowAmbush.class)); + cards.add(new SetCardInfo("Crovax the Cursed", 55, Rarity.RARE, mage.cards.c.CrovaxTheCursed.class)); + cards.add(new SetCardInfo("Crystalline Sliver", 127, Rarity.UNCOMMON, mage.cards.c.CrystallineSliver.class)); + cards.add(new SetCardInfo("Dauthi Trapper", 56, Rarity.UNCOMMON, mage.cards.d.DauthiTrapper.class)); + cards.add(new SetCardInfo("Death Stroke", 57, Rarity.COMMON, mage.cards.d.DeathStroke.class)); + cards.add(new SetCardInfo("Dream Halls", 28, Rarity.RARE, mage.cards.d.DreamHalls.class)); + cards.add(new SetCardInfo("Dream Prowler", 29, Rarity.COMMON, mage.cards.d.DreamProwler.class)); + cards.add(new SetCardInfo("Duct Crawler", 79, Rarity.COMMON, mage.cards.d.DuctCrawler.class)); + cards.add(new SetCardInfo("Dungeon Shade", 58, Rarity.COMMON, mage.cards.d.DungeonShade.class)); + cards.add(new SetCardInfo("Elven Rite", 106, Rarity.UNCOMMON, mage.cards.e.ElvenRite.class)); + cards.add(new SetCardInfo("Endangered Armodon", 107, Rarity.COMMON, mage.cards.e.EndangeredArmodon.class)); + cards.add(new SetCardInfo("Ensnaring Bridge", 133, Rarity.RARE, mage.cards.e.EnsnaringBridge.class)); + cards.add(new SetCardInfo("Evacuation", 30, Rarity.RARE, mage.cards.e.Evacuation.class)); + cards.add(new SetCardInfo("Fanning the Flames", 80, Rarity.UNCOMMON, mage.cards.f.FanningTheFlames.class)); + cards.add(new SetCardInfo("Flame Wave", 81, Rarity.UNCOMMON, mage.cards.f.FlameWave.class)); + cards.add(new SetCardInfo("Fling", 82, Rarity.COMMON, mage.cards.f.Fling.class)); + cards.add(new SetCardInfo("Flowstone Blade", 83, Rarity.COMMON, mage.cards.f.FlowstoneBlade.class)); + cards.add(new SetCardInfo("Flowstone Hellion", 84, Rarity.UNCOMMON, mage.cards.f.FlowstoneHellion.class)); + cards.add(new SetCardInfo("Flowstone Mauler", 85, Rarity.RARE, mage.cards.f.FlowstoneMauler.class)); + cards.add(new SetCardInfo("Flowstone Shambler", 86, Rarity.COMMON, mage.cards.f.FlowstoneShambler.class)); + cards.add(new SetCardInfo("Foul Imp", 59, Rarity.COMMON, mage.cards.f.FoulImp.class)); + cards.add(new SetCardInfo("Furnace Spirit", 87, Rarity.COMMON, mage.cards.f.FurnaceSpirit.class)); + cards.add(new SetCardInfo("Gliding Licid", 31, Rarity.UNCOMMON, mage.cards.g.GlidingLicid.class)); + cards.add(new SetCardInfo("Grave Pact", 60, Rarity.RARE, mage.cards.g.GravePact.class)); + cards.add(new SetCardInfo("Hammerhead Shark", 32, Rarity.COMMON, mage.cards.h.HammerheadShark.class)); + cards.add(new SetCardInfo("Heartstone", 134, Rarity.UNCOMMON, mage.cards.h.Heartstone.class)); + cards.add(new SetCardInfo("Heat of Battle", 88, Rarity.UNCOMMON, mage.cards.h.HeatOfBattle.class)); + cards.add(new SetCardInfo("Hermit Druid", 108, Rarity.RARE, mage.cards.h.HermitDruid.class)); + cards.add(new SetCardInfo("Hesitation", 33, Rarity.UNCOMMON, mage.cards.h.Hesitation.class)); + cards.add(new SetCardInfo("Hibernation Sliver", 128, Rarity.UNCOMMON, mage.cards.h.HibernationSliver.class)); + cards.add(new SetCardInfo("Hidden Retreat", 6, Rarity.RARE, mage.cards.h.HiddenRetreat.class)); + cards.add(new SetCardInfo("Honor Guard", 7, Rarity.COMMON, mage.cards.h.HonorGuard.class)); + cards.add(new SetCardInfo("Horn of Greed", 135, Rarity.RARE, mage.cards.h.HornOfGreed.class)); + cards.add(new SetCardInfo("Hornet Cannon", 136, Rarity.UNCOMMON, mage.cards.h.HornetCannon.class)); + cards.add(new SetCardInfo("Intruder Alarm", 34, Rarity.RARE, mage.cards.i.IntruderAlarm.class)); + cards.add(new SetCardInfo("Invasion Plans", 89, Rarity.RARE, mage.cards.i.InvasionPlans.class)); + cards.add(new SetCardInfo("Jinxed Ring", 137, Rarity.RARE, mage.cards.j.JinxedRing.class)); + cards.add(new SetCardInfo("Lab Rats", 61, Rarity.COMMON, mage.cards.l.LabRats.class)); + cards.add(new SetCardInfo("Lancers en-Kor", 8, Rarity.UNCOMMON, mage.cards.l.LancersEnKor.class)); + cards.add(new SetCardInfo("Leap", 35, Rarity.COMMON, mage.cards.l.Leap.class)); + cards.add(new SetCardInfo("Lowland Basilisk", 109, Rarity.COMMON, mage.cards.l.LowlandBasilisk.class)); + cards.add(new SetCardInfo("Mana Leak", 36, Rarity.COMMON, mage.cards.m.ManaLeak.class)); + cards.add(new SetCardInfo("Mask of the Mimic", 37, Rarity.UNCOMMON, mage.cards.m.MaskOfTheMimic.class)); + cards.add(new SetCardInfo("Megrim", 62, Rarity.UNCOMMON, mage.cards.m.Megrim.class)); + cards.add(new SetCardInfo("Mind Games", 38, Rarity.COMMON, mage.cards.m.MindGames.class)); + cards.add(new SetCardInfo("Mind Peel", 63, Rarity.UNCOMMON, mage.cards.m.MindPeel.class)); + cards.add(new SetCardInfo("Mindwarper", 64, Rarity.RARE, mage.cards.m.Mindwarper.class)); + cards.add(new SetCardInfo("Mob Justice", 90, Rarity.COMMON, mage.cards.m.MobJustice.class)); + cards.add(new SetCardInfo("Mogg Bombers", 91, Rarity.COMMON, mage.cards.m.MoggBombers.class)); + cards.add(new SetCardInfo("Mogg Flunkies", 92, Rarity.COMMON, mage.cards.m.MoggFlunkies.class)); + cards.add(new SetCardInfo("Mogg Infestation", 93, Rarity.RARE, mage.cards.m.MoggInfestation.class)); + cards.add(new SetCardInfo("Mogg Maniac", 94, Rarity.UNCOMMON, mage.cards.m.MoggManiac.class)); + cards.add(new SetCardInfo("Morgue Thrull", 65, Rarity.COMMON, mage.cards.m.MorgueThrull.class)); + cards.add(new SetCardInfo("Mortuary", 66, Rarity.RARE, mage.cards.m.Mortuary.class)); + cards.add(new SetCardInfo("Mox Diamond", 138, Rarity.RARE, mage.cards.m.MoxDiamond.class)); + cards.add(new SetCardInfo("Mulch", 110, Rarity.COMMON, mage.cards.m.Mulch.class)); + cards.add(new SetCardInfo("Nomads en-Kor", 9, Rarity.COMMON, mage.cards.n.NomadsEnKor.class)); + cards.add(new SetCardInfo("Overgrowth", 111, Rarity.COMMON, mage.cards.o.Overgrowth.class)); + cards.add(new SetCardInfo("Portcullis", 139, Rarity.RARE, mage.cards.p.Portcullis.class)); + cards.add(new SetCardInfo("Primal Rage", 112, Rarity.UNCOMMON, mage.cards.p.PrimalRage.class)); + cards.add(new SetCardInfo("Provoke", 113, Rarity.COMMON, mage.cards.p.Provoke.class)); + cards.add(new SetCardInfo("Pursuit of Knowledge", 10, Rarity.RARE, mage.cards.p.PursuitOfKnowledge.class)); + cards.add(new SetCardInfo("Rabid Rats", 67, Rarity.COMMON, mage.cards.r.RabidRats.class)); + cards.add(new SetCardInfo("Ransack", 39, Rarity.UNCOMMON, mage.cards.r.Ransack.class)); + cards.add(new SetCardInfo("Rebound", 40, Rarity.UNCOMMON, mage.cards.r.Rebound.class)); + cards.add(new SetCardInfo("Reins of Power", 41, Rarity.RARE, mage.cards.r.ReinsOfPower.class)); + cards.add(new SetCardInfo("Revenant", 68, Rarity.RARE, mage.cards.r.Revenant.class)); + cards.add(new SetCardInfo("Rolling Stones", 11, Rarity.RARE, mage.cards.r.RollingStones.class)); + cards.add(new SetCardInfo("Ruination", 95, Rarity.RARE, mage.cards.r.Ruination.class)); + cards.add(new SetCardInfo("Sacred Ground", 12, Rarity.RARE, mage.cards.s.SacredGround.class)); + cards.add(new SetCardInfo("Samite Blessing", 13, Rarity.COMMON, mage.cards.s.SamiteBlessing.class)); + cards.add(new SetCardInfo("Scapegoat", 14, Rarity.UNCOMMON, mage.cards.s.Scapegoat.class)); + cards.add(new SetCardInfo("Seething Anger", 96, Rarity.COMMON, mage.cards.s.SeethingAnger.class)); + cards.add(new SetCardInfo("Serpent Warrior", 69, Rarity.COMMON, mage.cards.s.SerpentWarrior.class)); + cards.add(new SetCardInfo("Shaman en-Kor", 15, Rarity.RARE, mage.cards.s.ShamanEnKor.class)); + cards.add(new SetCardInfo("Shard Phoenix", 97, Rarity.RARE, mage.cards.s.ShardPhoenix.class)); + cards.add(new SetCardInfo("Shifting Wall", 140, Rarity.UNCOMMON, mage.cards.s.ShiftingWall.class)); + cards.add(new SetCardInfo("Shock", 98, Rarity.COMMON, mage.cards.s.Shock.class)); + cards.add(new SetCardInfo("Sift", 42, Rarity.COMMON, mage.cards.s.Sift.class)); + cards.add(new SetCardInfo("Silver Wyvern", 43, Rarity.RARE, mage.cards.s.SilverWyvern.class)); + cards.add(new SetCardInfo("Skeleton Scavengers", 70, Rarity.RARE, mage.cards.s.SkeletonScavengers.class)); + cards.add(new SetCardInfo("Skyshroud Archer", 114, Rarity.COMMON, mage.cards.s.SkyshroudArcher.class)); + cards.add(new SetCardInfo("Skyshroud Falcon", 16, Rarity.COMMON, mage.cards.s.SkyshroudFalcon.class)); + cards.add(new SetCardInfo("Skyshroud Troopers", 115, Rarity.COMMON, mage.cards.s.SkyshroudTroopers.class)); + cards.add(new SetCardInfo("Sliver Queen", 129, Rarity.RARE, mage.cards.s.SliverQueen.class)); + cards.add(new SetCardInfo("Smite", 17, Rarity.COMMON, mage.cards.s.Smite.class)); + cards.add(new SetCardInfo("Soltari Champion", 18, Rarity.RARE, mage.cards.s.SoltariChampion.class)); + cards.add(new SetCardInfo("Spike Breeder", 116, Rarity.RARE, mage.cards.s.SpikeBreeder.class)); + cards.add(new SetCardInfo("Spike Colony", 117, Rarity.COMMON, mage.cards.s.SpikeColony.class)); + cards.add(new SetCardInfo("Spike Feeder", 118, Rarity.UNCOMMON, mage.cards.s.SpikeFeeder.class)); + cards.add(new SetCardInfo("Spike Soldier", 119, Rarity.UNCOMMON, mage.cards.s.SpikeSoldier.class)); + cards.add(new SetCardInfo("Spike Worker", 120, Rarity.COMMON, mage.cards.s.SpikeWorker.class)); + cards.add(new SetCardInfo("Spindrift Drake", 44, Rarity.COMMON, mage.cards.s.SpindriftDrake.class)); + cards.add(new SetCardInfo("Spined Sliver", 130, Rarity.UNCOMMON, mage.cards.s.SpinedSliver.class)); + cards.add(new SetCardInfo("Spined Wurm", 121, Rarity.COMMON, mage.cards.s.SpinedWurm.class)); + cards.add(new SetCardInfo("Spirit en-Kor", 19, Rarity.COMMON, mage.cards.s.SpiritEnKor.class)); + cards.add(new SetCardInfo("Spitting Hydra", 99, Rarity.RARE, mage.cards.s.SpittingHydra.class)); + cards.add(new SetCardInfo("Stronghold Assassin", 71, Rarity.RARE, mage.cards.s.StrongholdAssassin.class)); + cards.add(new SetCardInfo("Stronghold Taskmaster", 72, Rarity.UNCOMMON, mage.cards.s.StrongholdTaskmaster.class)); + cards.add(new SetCardInfo("Sword of the Chosen", 141, Rarity.RARE, mage.cards.s.SwordOfTheChosen.class)); + cards.add(new SetCardInfo("Temper", 20, Rarity.UNCOMMON, mage.cards.t.Temper.class)); + cards.add(new SetCardInfo("Tempting Licid", 122, Rarity.UNCOMMON, mage.cards.t.TemptingLicid.class)); + cards.add(new SetCardInfo("Thalakos Deceiver", 45, Rarity.RARE, mage.cards.t.ThalakosDeceiver.class)); + cards.add(new SetCardInfo("Tidal Surge", 46, Rarity.COMMON, mage.cards.t.TidalSurge.class)); + cards.add(new SetCardInfo("Tidal Warrior", 47, Rarity.COMMON, mage.cards.t.TidalWarrior.class)); + cards.add(new SetCardInfo("Torment", 73, Rarity.COMMON, mage.cards.t.Torment.class)); + cards.add(new SetCardInfo("Tortured Existence", 74, Rarity.COMMON, mage.cards.t.TorturedExistence.class)); + cards.add(new SetCardInfo("Venerable Monk", 21, Rarity.COMMON, mage.cards.v.VenerableMonk.class)); + cards.add(new SetCardInfo("Verdant Touch", 123, Rarity.RARE, mage.cards.v.VerdantTouch.class)); + cards.add(new SetCardInfo("Victual Sliver", 131, Rarity.UNCOMMON, mage.cards.v.VictualSliver.class)); + cards.add(new SetCardInfo("Volrath's Gardens", 124, Rarity.RARE, mage.cards.v.VolrathsGardens.class)); + cards.add(new SetCardInfo("Volrath's Laboratory", 142, Rarity.RARE, mage.cards.v.VolrathsLaboratory.class)); + cards.add(new SetCardInfo("Volrath's Shapeshifter", 48, Rarity.RARE, mage.cards.v.VolrathsShapeshifter.class)); + cards.add(new SetCardInfo("Volrath's Stronghold", 143, Rarity.RARE, mage.cards.v.VolrathsStronghold.class)); + cards.add(new SetCardInfo("Walking Dream", 49, Rarity.UNCOMMON, mage.cards.w.WalkingDream.class)); + cards.add(new SetCardInfo("Wall of Blossoms", 125, Rarity.UNCOMMON, mage.cards.w.WallOfBlossoms.class)); + cards.add(new SetCardInfo("Wall of Essence", 22, Rarity.UNCOMMON, mage.cards.w.WallOfEssence.class)); + cards.add(new SetCardInfo("Wall of Razors", 100, Rarity.UNCOMMON, mage.cards.w.WallOfRazors.class)); + cards.add(new SetCardInfo("Wall of Souls", 75, Rarity.UNCOMMON, mage.cards.w.WallOfSouls.class)); + cards.add(new SetCardInfo("Wall of Tears", 50, Rarity.UNCOMMON, mage.cards.w.WallOfTears.class)); + cards.add(new SetCardInfo("Warrior Angel", 24, Rarity.RARE, mage.cards.w.WarriorAngel.class)); + cards.add(new SetCardInfo("Warrior en-Kor", 23, Rarity.UNCOMMON, mage.cards.w.WarriorEnKor.class)); + cards.add(new SetCardInfo("Youthful Knight", 25, Rarity.COMMON, mage.cards.y.YouthfulKnight.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Tempest.java b/Mage.Sets/src/mage/sets/Tempest.java index 5e2ab52b91d..67ddcc80a58 100644 --- a/Mage.Sets/src/mage/sets/Tempest.java +++ b/Mage.Sets/src/mage/sets/Tempest.java @@ -1,370 +1,370 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -public final class Tempest extends ExpansionSet { - - private static final Tempest instance = new Tempest(); - - public static Tempest getInstance() { - return instance; - } - - private Tempest() { - super("Tempest", "TMP", ExpansionSet.buildDate(1997, 10, 1), SetType.EXPANSION); - this.blockName = "Tempest"; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Abandon Hope", 107, Rarity.UNCOMMON, mage.cards.a.AbandonHope.class)); - cards.add(new SetCardInfo("Advance Scout", 1, Rarity.COMMON, mage.cards.a.AdvanceScout.class)); - cards.add(new SetCardInfo("Aftershock", 160, Rarity.COMMON, mage.cards.a.Aftershock.class)); - cards.add(new SetCardInfo("Altar of Dementia", 276, Rarity.RARE, mage.cards.a.AltarOfDementia.class)); - cards.add(new SetCardInfo("Aluren", 213, Rarity.RARE, mage.cards.a.Aluren.class)); - cards.add(new SetCardInfo("Ancient Runes", 161, Rarity.UNCOMMON, mage.cards.a.AncientRunes.class)); - cards.add(new SetCardInfo("Ancient Tomb", 315, Rarity.UNCOMMON, mage.cards.a.AncientTomb.class)); - cards.add(new SetCardInfo("Angelic Protector", 2, Rarity.UNCOMMON, mage.cards.a.AngelicProtector.class)); - cards.add(new SetCardInfo("Anoint", 3, Rarity.COMMON, mage.cards.a.Anoint.class)); - cards.add(new SetCardInfo("Apes of Rath", 214, Rarity.UNCOMMON, mage.cards.a.ApesOfRath.class)); - cards.add(new SetCardInfo("Apocalypse", 162, Rarity.RARE, mage.cards.a.Apocalypse.class)); - cards.add(new SetCardInfo("Armor Sliver", 4, Rarity.UNCOMMON, mage.cards.a.ArmorSliver.class)); - cards.add(new SetCardInfo("Armored Pegasus", 5, Rarity.COMMON, mage.cards.a.ArmoredPegasus.class)); - cards.add(new SetCardInfo("Auratog", 6, Rarity.RARE, mage.cards.a.Auratog.class)); - cards.add(new SetCardInfo("Avenging Angel", 7, Rarity.RARE, mage.cards.a.AvengingAngel.class)); - cards.add(new SetCardInfo("Barbed Sliver", 163, Rarity.UNCOMMON, mage.cards.b.BarbedSliver.class)); - cards.add(new SetCardInfo("Bayou Dragonfly", 215, Rarity.COMMON, mage.cards.b.BayouDragonfly.class)); - cards.add(new SetCardInfo("Bellowing Fiend", 108, Rarity.RARE, mage.cards.b.BellowingFiend.class)); - cards.add(new SetCardInfo("Benthic Behemoth", 54, Rarity.RARE, mage.cards.b.BenthicBehemoth.class)); - cards.add(new SetCardInfo("Blood Frenzy", 164, Rarity.COMMON, mage.cards.b.BloodFrenzy.class)); - cards.add(new SetCardInfo("Blood Pet", 109, Rarity.COMMON, mage.cards.b.BloodPet.class)); - cards.add(new SetCardInfo("Boil", 165, Rarity.UNCOMMON, mage.cards.b.Boil.class)); - cards.add(new SetCardInfo("Booby Trap", 277, Rarity.RARE, mage.cards.b.BoobyTrap.class)); - cards.add(new SetCardInfo("Bottle Gnomes", 278, Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); - cards.add(new SetCardInfo("Bounty Hunter", 110, Rarity.RARE, mage.cards.b.BountyHunter.class)); - cards.add(new SetCardInfo("Broken Fall", 216, Rarity.COMMON, mage.cards.b.BrokenFall.class)); - cards.add(new SetCardInfo("Caldera Lake", 316, Rarity.RARE, mage.cards.c.CalderaLake.class)); - cards.add(new SetCardInfo("Canopy Spider", 217, Rarity.COMMON, mage.cards.c.CanopySpider.class)); - cards.add(new SetCardInfo("Canyon Drake", 166, Rarity.RARE, mage.cards.c.CanyonDrake.class)); - cards.add(new SetCardInfo("Canyon Wildcat", 167, Rarity.COMMON, mage.cards.c.CanyonWildcat.class)); - cards.add(new SetCardInfo("Capsize", 55, Rarity.COMMON, mage.cards.c.Capsize.class)); - cards.add(new SetCardInfo("Carrionette", 111, Rarity.RARE, mage.cards.c.Carrionette.class)); - cards.add(new SetCardInfo("Chaotic Goo", 168, Rarity.RARE, mage.cards.c.ChaoticGoo.class)); - cards.add(new SetCardInfo("Charging Rhino", 218, Rarity.UNCOMMON, mage.cards.c.ChargingRhino.class)); - cards.add(new SetCardInfo("Chill", 56, Rarity.UNCOMMON, mage.cards.c.Chill.class)); - cards.add(new SetCardInfo("Choke", 219, Rarity.UNCOMMON, mage.cards.c.Choke.class)); - cards.add(new SetCardInfo("Cinder Marsh", 317, Rarity.UNCOMMON, mage.cards.c.CinderMarsh.class)); - cards.add(new SetCardInfo("Circle of Protection: Black", 8, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); - cards.add(new SetCardInfo("Circle of Protection: Blue", 9, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlue.class)); - cards.add(new SetCardInfo("Circle of Protection: Green", 10, Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class)); - cards.add(new SetCardInfo("Circle of Protection: Red", 11, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); - cards.add(new SetCardInfo("Circle of Protection: Shadow", 12, Rarity.COMMON, mage.cards.c.CircleOfProtectionShadow.class)); - cards.add(new SetCardInfo("Circle of Protection: White", 13, Rarity.COMMON, mage.cards.c.CircleOfProtectionWhite.class)); - cards.add(new SetCardInfo("Clergy en-Vec", 14, Rarity.COMMON, mage.cards.c.ClergyEnVec.class)); - cards.add(new SetCardInfo("Clot Sliver", 112, Rarity.COMMON, mage.cards.c.ClotSliver.class)); - cards.add(new SetCardInfo("Cloudchaser Eagle", 15, Rarity.COMMON, mage.cards.c.CloudchaserEagle.class)); - cards.add(new SetCardInfo("Coercion", 113, Rarity.COMMON, mage.cards.c.Coercion.class)); - cards.add(new SetCardInfo("Coffin Queen", 114, Rarity.RARE, mage.cards.c.CoffinQueen.class)); - cards.add(new SetCardInfo("Coiled Tinviper", 279, Rarity.COMMON, mage.cards.c.CoiledTinviper.class)); - cards.add(new SetCardInfo("Cold Storage", 280, Rarity.RARE, mage.cards.c.ColdStorage.class)); - cards.add(new SetCardInfo("Commander Greven il-Vec", 115, Rarity.RARE, mage.cards.c.CommanderGrevenIlVec.class)); - cards.add(new SetCardInfo("Corpse Dance", 116, Rarity.RARE, mage.cards.c.CorpseDance.class)); - cards.add(new SetCardInfo("Counterspell", 57, Rarity.COMMON, mage.cards.c.Counterspell.class)); - cards.add(new SetCardInfo("Crazed Armodon", 220, Rarity.RARE, mage.cards.c.CrazedArmodon.class)); - cards.add(new SetCardInfo("Crown of Flames", 169, Rarity.COMMON, mage.cards.c.CrownOfFlames.class)); - cards.add(new SetCardInfo("Cursed Scroll", 281, Rarity.RARE, mage.cards.c.CursedScroll.class)); - cards.add(new SetCardInfo("Dark Banishing", 117, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); - cards.add(new SetCardInfo("Dark Ritual", 118, Rarity.COMMON, mage.cards.d.DarkRitual.class)); - cards.add(new SetCardInfo("Darkling Stalker", 119, Rarity.COMMON, mage.cards.d.DarklingStalker.class)); - cards.add(new SetCardInfo("Dauthi Embrace", 120, Rarity.UNCOMMON, mage.cards.d.DauthiEmbrace.class)); - cards.add(new SetCardInfo("Dauthi Ghoul", 121, Rarity.UNCOMMON, mage.cards.d.DauthiGhoul.class)); - cards.add(new SetCardInfo("Dauthi Horror", 122, Rarity.COMMON, mage.cards.d.DauthiHorror.class)); - cards.add(new SetCardInfo("Dauthi Marauder", 123, Rarity.COMMON, mage.cards.d.DauthiMarauder.class)); - cards.add(new SetCardInfo("Dauthi Mercenary", 124, Rarity.UNCOMMON, mage.cards.d.DauthiMercenary.class)); - cards.add(new SetCardInfo("Dauthi Mindripper", 125, Rarity.UNCOMMON, mage.cards.d.DauthiMindripper.class)); - cards.add(new SetCardInfo("Dauthi Slayer", 126, Rarity.COMMON, mage.cards.d.DauthiSlayer.class)); - cards.add(new SetCardInfo("Deadshot", 170, Rarity.RARE, mage.cards.d.Deadshot.class)); - cards.add(new SetCardInfo("Death Pits of Rath", 127, Rarity.RARE, mage.cards.d.DeathPitsOfRath.class)); - cards.add(new SetCardInfo("Diabolic Edict", 128, Rarity.COMMON, mage.cards.d.DiabolicEdict.class)); - cards.add(new SetCardInfo("Dirtcowl Wurm", 221, Rarity.RARE, mage.cards.d.DirtcowlWurm.class)); - cards.add(new SetCardInfo("Disenchant", 16, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Dismiss", 58, Rarity.UNCOMMON, mage.cards.d.Dismiss.class)); - cards.add(new SetCardInfo("Disturbed Burial", 129, Rarity.COMMON, mage.cards.d.DisturbedBurial.class)); - cards.add(new SetCardInfo("Dracoplasm", 266, Rarity.RARE, mage.cards.d.Dracoplasm.class)); - cards.add(new SetCardInfo("Dread of Night", 130, Rarity.UNCOMMON, mage.cards.d.DreadOfNight.class)); - cards.add(new SetCardInfo("Dream Cache", 59, Rarity.COMMON, mage.cards.d.DreamCache.class)); - cards.add(new SetCardInfo("Dregs of Sorrow", 131, Rarity.RARE, mage.cards.d.DregsOfSorrow.class)); - cards.add(new SetCardInfo("Duplicity", 60, Rarity.RARE, mage.cards.d.Duplicity.class)); - cards.add(new SetCardInfo("Earthcraft", 222, Rarity.RARE, mage.cards.e.Earthcraft.class)); - cards.add(new SetCardInfo("Echo Chamber", 282, Rarity.RARE, mage.cards.e.EchoChamber.class)); - cards.add(new SetCardInfo("Eladamri's Vineyard", 223, Rarity.RARE, mage.cards.e.EladamrisVineyard.class)); - cards.add(new SetCardInfo("Eladamri, Lord of Leaves", 224, Rarity.RARE, mage.cards.e.EladamriLordOfLeaves.class)); - cards.add(new SetCardInfo("Elite Javelineer", 17, Rarity.COMMON, mage.cards.e.EliteJavelineer.class)); - cards.add(new SetCardInfo("Elven Warhounds", 225, Rarity.RARE, mage.cards.e.ElvenWarhounds.class)); - cards.add(new SetCardInfo("Elvish Fury", 226, Rarity.COMMON, mage.cards.e.ElvishFury.class)); - cards.add(new SetCardInfo("Emerald Medallion", 283, Rarity.RARE, mage.cards.e.EmeraldMedallion.class)); - cards.add(new SetCardInfo("Emmessi Tome", 284, Rarity.RARE, mage.cards.e.EmmessiTome.class)); - cards.add(new SetCardInfo("Endless Scream", 132, Rarity.COMMON, mage.cards.e.EndlessScream.class)); - cards.add(new SetCardInfo("Energizer", 285, Rarity.RARE, mage.cards.e.Energizer.class)); - cards.add(new SetCardInfo("Enfeeblement", 133, Rarity.COMMON, mage.cards.e.Enfeeblement.class)); - cards.add(new SetCardInfo("Enraging Licid", 171, Rarity.UNCOMMON, mage.cards.e.EnragingLicid.class)); +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +public final class Tempest extends ExpansionSet { + + private static final Tempest instance = new Tempest(); + + public static Tempest getInstance() { + return instance; + } + + private Tempest() { + super("Tempest", "TMP", ExpansionSet.buildDate(1997, 10, 1), SetType.EXPANSION); + this.blockName = "Tempest"; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Abandon Hope", 107, Rarity.UNCOMMON, mage.cards.a.AbandonHope.class)); + cards.add(new SetCardInfo("Advance Scout", 1, Rarity.COMMON, mage.cards.a.AdvanceScout.class)); + cards.add(new SetCardInfo("Aftershock", 160, Rarity.COMMON, mage.cards.a.Aftershock.class)); + cards.add(new SetCardInfo("Altar of Dementia", 276, Rarity.RARE, mage.cards.a.AltarOfDementia.class)); + cards.add(new SetCardInfo("Aluren", 213, Rarity.RARE, mage.cards.a.Aluren.class)); + cards.add(new SetCardInfo("Ancient Runes", 161, Rarity.UNCOMMON, mage.cards.a.AncientRunes.class)); + cards.add(new SetCardInfo("Ancient Tomb", 315, Rarity.UNCOMMON, mage.cards.a.AncientTomb.class)); + cards.add(new SetCardInfo("Angelic Protector", 2, Rarity.UNCOMMON, mage.cards.a.AngelicProtector.class)); + cards.add(new SetCardInfo("Anoint", 3, Rarity.COMMON, mage.cards.a.Anoint.class)); + cards.add(new SetCardInfo("Apes of Rath", 214, Rarity.UNCOMMON, mage.cards.a.ApesOfRath.class)); + cards.add(new SetCardInfo("Apocalypse", 162, Rarity.RARE, mage.cards.a.Apocalypse.class)); + cards.add(new SetCardInfo("Armor Sliver", 4, Rarity.UNCOMMON, mage.cards.a.ArmorSliver.class)); + cards.add(new SetCardInfo("Armored Pegasus", 5, Rarity.COMMON, mage.cards.a.ArmoredPegasus.class)); + cards.add(new SetCardInfo("Auratog", 6, Rarity.RARE, mage.cards.a.Auratog.class)); + cards.add(new SetCardInfo("Avenging Angel", 7, Rarity.RARE, mage.cards.a.AvengingAngel.class)); + cards.add(new SetCardInfo("Barbed Sliver", 163, Rarity.UNCOMMON, mage.cards.b.BarbedSliver.class)); + cards.add(new SetCardInfo("Bayou Dragonfly", 215, Rarity.COMMON, mage.cards.b.BayouDragonfly.class)); + cards.add(new SetCardInfo("Bellowing Fiend", 108, Rarity.RARE, mage.cards.b.BellowingFiend.class)); + cards.add(new SetCardInfo("Benthic Behemoth", 54, Rarity.RARE, mage.cards.b.BenthicBehemoth.class)); + cards.add(new SetCardInfo("Blood Frenzy", 164, Rarity.COMMON, mage.cards.b.BloodFrenzy.class)); + cards.add(new SetCardInfo("Blood Pet", 109, Rarity.COMMON, mage.cards.b.BloodPet.class)); + cards.add(new SetCardInfo("Boil", 165, Rarity.UNCOMMON, mage.cards.b.Boil.class)); + cards.add(new SetCardInfo("Booby Trap", 277, Rarity.RARE, mage.cards.b.BoobyTrap.class)); + cards.add(new SetCardInfo("Bottle Gnomes", 278, Rarity.UNCOMMON, mage.cards.b.BottleGnomes.class)); + cards.add(new SetCardInfo("Bounty Hunter", 110, Rarity.RARE, mage.cards.b.BountyHunter.class)); + cards.add(new SetCardInfo("Broken Fall", 216, Rarity.COMMON, mage.cards.b.BrokenFall.class)); + cards.add(new SetCardInfo("Caldera Lake", 316, Rarity.RARE, mage.cards.c.CalderaLake.class)); + cards.add(new SetCardInfo("Canopy Spider", 217, Rarity.COMMON, mage.cards.c.CanopySpider.class)); + cards.add(new SetCardInfo("Canyon Drake", 166, Rarity.RARE, mage.cards.c.CanyonDrake.class)); + cards.add(new SetCardInfo("Canyon Wildcat", 167, Rarity.COMMON, mage.cards.c.CanyonWildcat.class)); + cards.add(new SetCardInfo("Capsize", 55, Rarity.COMMON, mage.cards.c.Capsize.class)); + cards.add(new SetCardInfo("Carrionette", 111, Rarity.RARE, mage.cards.c.Carrionette.class)); + cards.add(new SetCardInfo("Chaotic Goo", 168, Rarity.RARE, mage.cards.c.ChaoticGoo.class)); + cards.add(new SetCardInfo("Charging Rhino", 218, Rarity.UNCOMMON, mage.cards.c.ChargingRhino.class)); + cards.add(new SetCardInfo("Chill", 56, Rarity.UNCOMMON, mage.cards.c.Chill.class)); + cards.add(new SetCardInfo("Choke", 219, Rarity.UNCOMMON, mage.cards.c.Choke.class)); + cards.add(new SetCardInfo("Cinder Marsh", 317, Rarity.UNCOMMON, mage.cards.c.CinderMarsh.class)); + cards.add(new SetCardInfo("Circle of Protection: Black", 8, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlack.class)); + cards.add(new SetCardInfo("Circle of Protection: Blue", 9, Rarity.COMMON, mage.cards.c.CircleOfProtectionBlue.class)); + cards.add(new SetCardInfo("Circle of Protection: Green", 10, Rarity.COMMON, mage.cards.c.CircleOfProtectionGreen.class)); + cards.add(new SetCardInfo("Circle of Protection: Red", 11, Rarity.COMMON, mage.cards.c.CircleOfProtectionRed.class)); + cards.add(new SetCardInfo("Circle of Protection: Shadow", 12, Rarity.COMMON, mage.cards.c.CircleOfProtectionShadow.class)); + cards.add(new SetCardInfo("Circle of Protection: White", 13, Rarity.COMMON, mage.cards.c.CircleOfProtectionWhite.class)); + cards.add(new SetCardInfo("Clergy en-Vec", 14, Rarity.COMMON, mage.cards.c.ClergyEnVec.class)); + cards.add(new SetCardInfo("Clot Sliver", 112, Rarity.COMMON, mage.cards.c.ClotSliver.class)); + cards.add(new SetCardInfo("Cloudchaser Eagle", 15, Rarity.COMMON, mage.cards.c.CloudchaserEagle.class)); + cards.add(new SetCardInfo("Coercion", 113, Rarity.COMMON, mage.cards.c.Coercion.class)); + cards.add(new SetCardInfo("Coffin Queen", 114, Rarity.RARE, mage.cards.c.CoffinQueen.class)); + cards.add(new SetCardInfo("Coiled Tinviper", 279, Rarity.COMMON, mage.cards.c.CoiledTinviper.class)); + cards.add(new SetCardInfo("Cold Storage", 280, Rarity.RARE, mage.cards.c.ColdStorage.class)); + cards.add(new SetCardInfo("Commander Greven il-Vec", 115, Rarity.RARE, mage.cards.c.CommanderGrevenIlVec.class)); + cards.add(new SetCardInfo("Corpse Dance", 116, Rarity.RARE, mage.cards.c.CorpseDance.class)); + cards.add(new SetCardInfo("Counterspell", 57, Rarity.COMMON, mage.cards.c.Counterspell.class)); + cards.add(new SetCardInfo("Crazed Armodon", 220, Rarity.RARE, mage.cards.c.CrazedArmodon.class)); + cards.add(new SetCardInfo("Crown of Flames", 169, Rarity.COMMON, mage.cards.c.CrownOfFlames.class)); + cards.add(new SetCardInfo("Cursed Scroll", 281, Rarity.RARE, mage.cards.c.CursedScroll.class)); + cards.add(new SetCardInfo("Dark Banishing", 117, Rarity.COMMON, mage.cards.d.DarkBanishing.class)); + cards.add(new SetCardInfo("Dark Ritual", 118, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Darkling Stalker", 119, Rarity.COMMON, mage.cards.d.DarklingStalker.class)); + cards.add(new SetCardInfo("Dauthi Embrace", 120, Rarity.UNCOMMON, mage.cards.d.DauthiEmbrace.class)); + cards.add(new SetCardInfo("Dauthi Ghoul", 121, Rarity.UNCOMMON, mage.cards.d.DauthiGhoul.class)); + cards.add(new SetCardInfo("Dauthi Horror", 122, Rarity.COMMON, mage.cards.d.DauthiHorror.class)); + cards.add(new SetCardInfo("Dauthi Marauder", 123, Rarity.COMMON, mage.cards.d.DauthiMarauder.class)); + cards.add(new SetCardInfo("Dauthi Mercenary", 124, Rarity.UNCOMMON, mage.cards.d.DauthiMercenary.class)); + cards.add(new SetCardInfo("Dauthi Mindripper", 125, Rarity.UNCOMMON, mage.cards.d.DauthiMindripper.class)); + cards.add(new SetCardInfo("Dauthi Slayer", 126, Rarity.COMMON, mage.cards.d.DauthiSlayer.class)); + cards.add(new SetCardInfo("Deadshot", 170, Rarity.RARE, mage.cards.d.Deadshot.class)); + cards.add(new SetCardInfo("Death Pits of Rath", 127, Rarity.RARE, mage.cards.d.DeathPitsOfRath.class)); + cards.add(new SetCardInfo("Diabolic Edict", 128, Rarity.COMMON, mage.cards.d.DiabolicEdict.class)); + cards.add(new SetCardInfo("Dirtcowl Wurm", 221, Rarity.RARE, mage.cards.d.DirtcowlWurm.class)); + cards.add(new SetCardInfo("Disenchant", 16, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Dismiss", 58, Rarity.UNCOMMON, mage.cards.d.Dismiss.class)); + cards.add(new SetCardInfo("Disturbed Burial", 129, Rarity.COMMON, mage.cards.d.DisturbedBurial.class)); + cards.add(new SetCardInfo("Dracoplasm", 266, Rarity.RARE, mage.cards.d.Dracoplasm.class)); + cards.add(new SetCardInfo("Dread of Night", 130, Rarity.UNCOMMON, mage.cards.d.DreadOfNight.class)); + cards.add(new SetCardInfo("Dream Cache", 59, Rarity.COMMON, mage.cards.d.DreamCache.class)); + cards.add(new SetCardInfo("Dregs of Sorrow", 131, Rarity.RARE, mage.cards.d.DregsOfSorrow.class)); + cards.add(new SetCardInfo("Duplicity", 60, Rarity.RARE, mage.cards.d.Duplicity.class)); + cards.add(new SetCardInfo("Earthcraft", 222, Rarity.RARE, mage.cards.e.Earthcraft.class)); + cards.add(new SetCardInfo("Echo Chamber", 282, Rarity.RARE, mage.cards.e.EchoChamber.class)); + cards.add(new SetCardInfo("Eladamri's Vineyard", 223, Rarity.RARE, mage.cards.e.EladamrisVineyard.class)); + cards.add(new SetCardInfo("Eladamri, Lord of Leaves", 224, Rarity.RARE, mage.cards.e.EladamriLordOfLeaves.class)); + cards.add(new SetCardInfo("Elite Javelineer", 17, Rarity.COMMON, mage.cards.e.EliteJavelineer.class)); + cards.add(new SetCardInfo("Elven Warhounds", 225, Rarity.RARE, mage.cards.e.ElvenWarhounds.class)); + cards.add(new SetCardInfo("Elvish Fury", 226, Rarity.COMMON, mage.cards.e.ElvishFury.class)); + cards.add(new SetCardInfo("Emerald Medallion", 283, Rarity.RARE, mage.cards.e.EmeraldMedallion.class)); + cards.add(new SetCardInfo("Emmessi Tome", 284, Rarity.RARE, mage.cards.e.EmmessiTome.class)); + cards.add(new SetCardInfo("Endless Scream", 132, Rarity.COMMON, mage.cards.e.EndlessScream.class)); + cards.add(new SetCardInfo("Energizer", 285, Rarity.RARE, mage.cards.e.Energizer.class)); + cards.add(new SetCardInfo("Enfeeblement", 133, Rarity.COMMON, mage.cards.e.Enfeeblement.class)); + cards.add(new SetCardInfo("Enraging Licid", 171, Rarity.UNCOMMON, mage.cards.e.EnragingLicid.class)); cards.add(new SetCardInfo("Escaped Shapeshifter", 62, Rarity.RARE, mage.cards.e.EscapedShapeshifter.class)); - cards.add(new SetCardInfo("Essence Bottle", 286, Rarity.UNCOMMON, mage.cards.e.EssenceBottle.class)); - cards.add(new SetCardInfo("Evincar's Justice", 134, Rarity.COMMON, mage.cards.e.EvincarsJustice.class)); - cards.add(new SetCardInfo("Excavator", 287, Rarity.UNCOMMON, mage.cards.e.Excavator.class)); - cards.add(new SetCardInfo("Extinction", 135, Rarity.RARE, mage.cards.e.Extinction.class)); - cards.add(new SetCardInfo("Fevered Convulsions", 136, Rarity.RARE, mage.cards.f.FeveredConvulsions.class)); - cards.add(new SetCardInfo("Field of Souls", 18, Rarity.RARE, mage.cards.f.FieldOfSouls.class)); - cards.add(new SetCardInfo("Fighting Drake", 63, Rarity.UNCOMMON, mage.cards.f.FightingDrake.class)); - cards.add(new SetCardInfo("Firefly", 172, Rarity.UNCOMMON, mage.cards.f.Firefly.class)); - cards.add(new SetCardInfo("Fireslinger", 173, Rarity.COMMON, mage.cards.f.Fireslinger.class)); - cards.add(new SetCardInfo("Flailing Drake", 227, Rarity.UNCOMMON, mage.cards.f.FlailingDrake.class)); - cards.add(new SetCardInfo("Flickering Ward", 19, Rarity.UNCOMMON, mage.cards.f.FlickeringWard.class)); - cards.add(new SetCardInfo("Flowstone Giant", 174, Rarity.COMMON, mage.cards.f.FlowstoneGiant.class)); - cards.add(new SetCardInfo("Flowstone Salamander", 175, Rarity.UNCOMMON, mage.cards.f.FlowstoneSalamander.class)); - cards.add(new SetCardInfo("Flowstone Sculpture", 288, Rarity.RARE, mage.cards.f.FlowstoneSculpture.class)); - cards.add(new SetCardInfo("Flowstone Wyvern", 176, Rarity.RARE, mage.cards.f.FlowstoneWyvern.class)); - cards.add(new SetCardInfo("Fool's Tome", 289, Rarity.RARE, mage.cards.f.FoolsTome.class)); - cards.add(new SetCardInfo("Forest", 347, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 348, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 349, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 350, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Frog Tongue", 228, Rarity.COMMON, mage.cards.f.FrogTongue.class)); - cards.add(new SetCardInfo("Fugitive Druid", 229, Rarity.RARE, mage.cards.f.FugitiveDruid.class)); - cards.add(new SetCardInfo("Furnace of Rath", 177, Rarity.RARE, mage.cards.f.FurnaceOfRath.class)); - cards.add(new SetCardInfo("Fylamarid", 64, Rarity.UNCOMMON, mage.cards.f.Fylamarid.class)); - cards.add(new SetCardInfo("Gallantry", 20, Rarity.UNCOMMON, mage.cards.g.Gallantry.class)); - cards.add(new SetCardInfo("Gaseous Form", 65, Rarity.COMMON, mage.cards.g.GaseousForm.class)); - cards.add(new SetCardInfo("Gerrard's Battle Cry", 21, Rarity.RARE, mage.cards.g.GerrardsBattleCry.class)); - cards.add(new SetCardInfo("Ghost Town", 318, Rarity.UNCOMMON, mage.cards.g.GhostTown.class)); - cards.add(new SetCardInfo("Giant Crab", 66, Rarity.COMMON, mage.cards.g.GiantCrab.class)); - cards.add(new SetCardInfo("Giant Strength", 178, Rarity.COMMON, mage.cards.g.GiantStrength.class)); - cards.add(new SetCardInfo("Goblin Bombardment", 179, Rarity.UNCOMMON, mage.cards.g.GoblinBombardment.class)); - cards.add(new SetCardInfo("Gravedigger", 137, Rarity.COMMON, mage.cards.g.Gravedigger.class)); - cards.add(new SetCardInfo("Grindstone", 290, Rarity.RARE, mage.cards.g.Grindstone.class)); - cards.add(new SetCardInfo("Hand to Hand", 180, Rarity.RARE, mage.cards.h.HandToHand.class)); - cards.add(new SetCardInfo("Hanna's Custody", 22, Rarity.RARE, mage.cards.h.HannasCustody.class)); - cards.add(new SetCardInfo("Harrow", 230, Rarity.UNCOMMON, mage.cards.h.Harrow.class)); - cards.add(new SetCardInfo("Havoc", 181, Rarity.UNCOMMON, mage.cards.h.Havoc.class)); - cards.add(new SetCardInfo("Heart Sliver", 182, Rarity.COMMON, mage.cards.h.HeartSliver.class)); - cards.add(new SetCardInfo("Heartwood Dryad", 231, Rarity.COMMON, mage.cards.h.HeartwoodDryad.class)); - cards.add(new SetCardInfo("Heartwood Giant", 232, Rarity.RARE, mage.cards.h.HeartwoodGiant.class)); - cards.add(new SetCardInfo("Heartwood Treefolk", 233, Rarity.UNCOMMON, mage.cards.h.HeartwoodTreefolk.class)); - cards.add(new SetCardInfo("Helm of Possession", 291, Rarity.RARE, mage.cards.h.HelmOfPossession.class)); - cards.add(new SetCardInfo("Hero's Resolve", 23, Rarity.COMMON, mage.cards.h.HerosResolve.class)); - cards.add(new SetCardInfo("Horned Sliver", 234, Rarity.UNCOMMON, mage.cards.h.HornedSliver.class)); - cards.add(new SetCardInfo("Horned Turtle", 67, Rarity.COMMON, mage.cards.h.HornedTurtle.class)); - cards.add(new SetCardInfo("Humility", 24, Rarity.RARE, mage.cards.h.Humility.class)); - cards.add(new SetCardInfo("Imps' Taunt", 138, Rarity.UNCOMMON, mage.cards.i.ImpsTaunt.class)); - cards.add(new SetCardInfo("Insight", 68, Rarity.UNCOMMON, mage.cards.i.Insight.class)); - cards.add(new SetCardInfo("Interdict", 69, Rarity.UNCOMMON, mage.cards.i.Interdict.class)); - cards.add(new SetCardInfo("Intuition", 70, Rarity.RARE, mage.cards.i.Intuition.class)); - cards.add(new SetCardInfo("Invulnerability", 25, Rarity.UNCOMMON, mage.cards.i.Invulnerability.class)); - cards.add(new SetCardInfo("Island", 335, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 336, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 337, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 338, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Jackal Pup", 183, Rarity.UNCOMMON, mage.cards.j.JackalPup.class)); - cards.add(new SetCardInfo("Jet Medallion", 292, Rarity.RARE, mage.cards.j.JetMedallion.class)); - cards.add(new SetCardInfo("Jinxed Idol", 293, Rarity.RARE, mage.cards.j.JinxedIdol.class)); - cards.add(new SetCardInfo("Kezzerdrix", 139, Rarity.RARE, mage.cards.k.Kezzerdrix.class)); - cards.add(new SetCardInfo("Kindle", 184, Rarity.COMMON, mage.cards.k.Kindle.class)); - cards.add(new SetCardInfo("Knight of Dawn", 26, Rarity.UNCOMMON, mage.cards.k.KnightOfDawn.class)); - cards.add(new SetCardInfo("Knight of Dusk", 140, Rarity.UNCOMMON, mage.cards.k.KnightOfDusk.class)); - cards.add(new SetCardInfo("Krakilin", 235, Rarity.UNCOMMON, mage.cards.k.Krakilin.class)); - cards.add(new SetCardInfo("Leeching Licid", 141, Rarity.UNCOMMON, mage.cards.l.LeechingLicid.class)); - cards.add(new SetCardInfo("Legacy's Allure", 71, Rarity.UNCOMMON, mage.cards.l.LegacysAllure.class)); - cards.add(new SetCardInfo("Legerdemain", 72, Rarity.UNCOMMON, mage.cards.l.Legerdemain.class)); - cards.add(new SetCardInfo("Light of Day", 27, Rarity.UNCOMMON, mage.cards.l.LightOfDay.class)); - cards.add(new SetCardInfo("Lightning Blast", 185, Rarity.COMMON, mage.cards.l.LightningBlast.class)); - cards.add(new SetCardInfo("Lightning Elemental", 186, Rarity.COMMON, mage.cards.l.LightningElemental.class)); - cards.add(new SetCardInfo("Living Death", 142, Rarity.RARE, mage.cards.l.LivingDeath.class)); - cards.add(new SetCardInfo("Lobotomy", 267, Rarity.UNCOMMON, mage.cards.l.Lobotomy.class)); - cards.add(new SetCardInfo("Lotus Petal", 294, Rarity.COMMON, mage.cards.l.LotusPetal.class)); - cards.add(new SetCardInfo("Lowland Giant", 187, Rarity.COMMON, mage.cards.l.LowlandGiant.class)); - cards.add(new SetCardInfo("Maddening Imp", 143, Rarity.RARE, mage.cards.m.MaddeningImp.class)); - cards.add(new SetCardInfo("Magmasaur", 188, Rarity.RARE, mage.cards.m.Magmasaur.class)); - cards.add(new SetCardInfo("Mana Severance", 73, Rarity.RARE, mage.cards.m.ManaSeverance.class)); - cards.add(new SetCardInfo("Manakin", 296, Rarity.COMMON, mage.cards.m.Manakin.class)); - cards.add(new SetCardInfo("Manta Riders", 74, Rarity.COMMON, mage.cards.m.MantaRiders.class)); - cards.add(new SetCardInfo("Marble Titan", 28, Rarity.RARE, mage.cards.m.MarbleTitan.class)); - cards.add(new SetCardInfo("Marsh Lurker", 144, Rarity.COMMON, mage.cards.m.MarshLurker.class)); - cards.add(new SetCardInfo("Master Decoy", 29, Rarity.COMMON, mage.cards.m.MasterDecoy.class)); - cards.add(new SetCardInfo("Mawcor", 75, Rarity.RARE, mage.cards.m.Mawcor.class)); - cards.add(new SetCardInfo("Maze of Shadows", 319, Rarity.UNCOMMON, mage.cards.m.MazeOfShadows.class)); - cards.add(new SetCardInfo("Meditate", 76, Rarity.RARE, mage.cards.m.Meditate.class)); - cards.add(new SetCardInfo("Metallic Sliver", 297, Rarity.COMMON, mage.cards.m.MetallicSliver.class)); - cards.add(new SetCardInfo("Mindwhip Sliver", 145, Rarity.UNCOMMON, mage.cards.m.MindwhipSliver.class)); - cards.add(new SetCardInfo("Minion of the Wastes", 146, Rarity.RARE, mage.cards.m.MinionOfTheWastes.class)); - cards.add(new SetCardInfo("Mirri's Guile", 236, Rarity.RARE, mage.cards.m.MirrisGuile.class)); - cards.add(new SetCardInfo("Mnemonic Sliver", 77, Rarity.UNCOMMON, mage.cards.m.MnemonicSliver.class)); - cards.add(new SetCardInfo("Mogg Cannon", 298, Rarity.UNCOMMON, mage.cards.m.MoggCannon.class)); - cards.add(new SetCardInfo("Mogg Conscripts", 189, Rarity.COMMON, mage.cards.m.MoggConscripts.class)); - cards.add(new SetCardInfo("Mogg Fanatic", 190, Rarity.COMMON, mage.cards.m.MoggFanatic.class)); - cards.add(new SetCardInfo("Mogg Hollows", 320, Rarity.UNCOMMON, mage.cards.m.MoggHollows.class)); - cards.add(new SetCardInfo("Mogg Raider", 191, Rarity.COMMON, mage.cards.m.MoggRaider.class)); - cards.add(new SetCardInfo("Mogg Squad", 192, Rarity.UNCOMMON, mage.cards.m.MoggSquad.class)); - cards.add(new SetCardInfo("Mongrel Pack", 237, Rarity.RARE, mage.cards.m.MongrelPack.class)); - cards.add(new SetCardInfo("Mountain", 343, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 344, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 345, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 346, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mounted Archers", 30, Rarity.COMMON, mage.cards.m.MountedArchers.class)); - cards.add(new SetCardInfo("Muscle Sliver", 238, Rarity.COMMON, mage.cards.m.MuscleSliver.class)); - cards.add(new SetCardInfo("Natural Spring", 239, Rarity.COMMON, mage.cards.n.NaturalSpring.class)); - cards.add(new SetCardInfo("Nature's Revolt", 240, Rarity.RARE, mage.cards.n.NaturesRevolt.class)); - cards.add(new SetCardInfo("Needle Storm", 241, Rarity.UNCOMMON, mage.cards.n.NeedleStorm.class)); - cards.add(new SetCardInfo("Nurturing Licid", 242, Rarity.UNCOMMON, mage.cards.n.NurturingLicid.class)); - cards.add(new SetCardInfo("Opportunist", 194, Rarity.UNCOMMON, mage.cards.o.Opportunist.class)); - cards.add(new SetCardInfo("Oracle en-Vec", 31, Rarity.RARE, mage.cards.o.OracleEnVec.class)); - cards.add(new SetCardInfo("Orim's Prayer", 32, Rarity.UNCOMMON, mage.cards.o.OrimsPrayer.class)); - cards.add(new SetCardInfo("Orim, Samite Healer", 33, Rarity.RARE, mage.cards.o.OrimSamiteHealer.class)); - cards.add(new SetCardInfo("Overrun", 243, Rarity.UNCOMMON, mage.cards.o.Overrun.class)); - cards.add(new SetCardInfo("Pacifism", 34, Rarity.COMMON, mage.cards.p.Pacifism.class)); - cards.add(new SetCardInfo("Pallimud", 195, Rarity.RARE, mage.cards.p.Pallimud.class)); - cards.add(new SetCardInfo("Patchwork Gnomes", 299, Rarity.UNCOMMON, mage.cards.p.PatchworkGnomes.class)); - cards.add(new SetCardInfo("Pearl Medallion", 300, Rarity.RARE, mage.cards.p.PearlMedallion.class)); - cards.add(new SetCardInfo("Pegasus Refuge", 35, Rarity.RARE, mage.cards.p.PegasusRefuge.class)); - cards.add(new SetCardInfo("Perish", 147, Rarity.UNCOMMON, mage.cards.p.Perish.class)); - cards.add(new SetCardInfo("Phyrexian Grimoire", 301, Rarity.RARE, mage.cards.p.PhyrexianGrimoire.class)); - cards.add(new SetCardInfo("Phyrexian Hulk", 302, Rarity.UNCOMMON, mage.cards.p.PhyrexianHulk.class)); - cards.add(new SetCardInfo("Pincher Beetles", 244, Rarity.COMMON, mage.cards.p.PincherBeetles.class)); - cards.add(new SetCardInfo("Pine Barrens", 321, Rarity.RARE, mage.cards.p.PineBarrens.class)); - cards.add(new SetCardInfo("Pit Imp", 148, Rarity.COMMON, mage.cards.p.PitImp.class)); - cards.add(new SetCardInfo("Plains", 331, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 332, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 333, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 334, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Power Sink", 78, Rarity.COMMON, mage.cards.p.PowerSink.class)); - cards.add(new SetCardInfo("Precognition", 79, Rarity.RARE, mage.cards.p.Precognition.class)); - cards.add(new SetCardInfo("Propaganda", 80, Rarity.UNCOMMON, mage.cards.p.Propaganda.class)); - cards.add(new SetCardInfo("Puppet Strings", 304, Rarity.UNCOMMON, mage.cards.p.PuppetStrings.class)); - cards.add(new SetCardInfo("Quickening Licid", 36, Rarity.UNCOMMON, mage.cards.q.QuickeningLicid.class)); - cards.add(new SetCardInfo("Rain of Tears", 149, Rarity.UNCOMMON, mage.cards.r.RainOfTears.class)); - cards.add(new SetCardInfo("Rampant Growth", 245, Rarity.COMMON, mage.cards.r.RampantGrowth.class)); - cards.add(new SetCardInfo("Ranger en-Vec", 268, Rarity.UNCOMMON, mage.cards.r.RangerEnVec.class)); - cards.add(new SetCardInfo("Rathi Dragon", 196, Rarity.RARE, mage.cards.r.RathiDragon.class)); - cards.add(new SetCardInfo("Rats of Rath", 150, Rarity.COMMON, mage.cards.r.RatsOfRath.class)); - cards.add(new SetCardInfo("Reality Anchor", 246, Rarity.COMMON, mage.cards.r.RealityAnchor.class)); - cards.add(new SetCardInfo("Reanimate", 151, Rarity.UNCOMMON, mage.cards.r.Reanimate.class)); - cards.add(new SetCardInfo("Reap", 247, Rarity.UNCOMMON, mage.cards.r.Reap.class)); - cards.add(new SetCardInfo("Reckless Spite", 152, Rarity.UNCOMMON, mage.cards.r.RecklessSpite.class)); - cards.add(new SetCardInfo("Recycle", 248, Rarity.RARE, mage.cards.r.Recycle.class)); - cards.add(new SetCardInfo("Reflecting Pool", 322, Rarity.RARE, mage.cards.r.ReflectingPool.class)); - cards.add(new SetCardInfo("Renegade Warlord", 197, Rarity.UNCOMMON, mage.cards.r.RenegadeWarlord.class)); - cards.add(new SetCardInfo("Repentance", 37, Rarity.UNCOMMON, mage.cards.r.Repentance.class)); - cards.add(new SetCardInfo("Respite", 249, Rarity.COMMON, mage.cards.r.Respite.class)); - cards.add(new SetCardInfo("Rolling Thunder", 198, Rarity.COMMON, mage.cards.r.RollingThunder.class)); - cards.add(new SetCardInfo("Root Maze", 250, Rarity.RARE, mage.cards.r.RootMaze.class)); - cards.add(new SetCardInfo("Rootbreaker Wurm", 251, Rarity.COMMON, mage.cards.r.RootbreakerWurm.class)); - cards.add(new SetCardInfo("Rootwalla", 252, Rarity.COMMON, mage.cards.r.Rootwalla.class)); - cards.add(new SetCardInfo("Rootwater Depths", 323, Rarity.UNCOMMON, mage.cards.r.RootwaterDepths.class)); - cards.add(new SetCardInfo("Rootwater Diver", 81, Rarity.UNCOMMON, mage.cards.r.RootwaterDiver.class)); - cards.add(new SetCardInfo("Rootwater Hunter", 82, Rarity.COMMON, mage.cards.r.RootwaterHunter.class)); - cards.add(new SetCardInfo("Rootwater Matriarch", 83, Rarity.RARE, mage.cards.r.RootwaterMatriarch.class)); - cards.add(new SetCardInfo("Rootwater Shaman", 84, Rarity.RARE, mage.cards.r.RootwaterShaman.class)); - cards.add(new SetCardInfo("Ruby Medallion", 305, Rarity.RARE, mage.cards.r.RubyMedallion.class)); - cards.add(new SetCardInfo("Sacred Guide", 38, Rarity.RARE, mage.cards.s.SacredGuide.class)); - cards.add(new SetCardInfo("Sadistic Glee", 153, Rarity.COMMON, mage.cards.s.SadisticGlee.class)); - cards.add(new SetCardInfo("Safeguard", 39, Rarity.RARE, mage.cards.s.Safeguard.class)); - cards.add(new SetCardInfo("Salt Flats", 324, Rarity.RARE, mage.cards.s.SaltFlats.class)); - cards.add(new SetCardInfo("Sandstone Warrior", 199, Rarity.COMMON, mage.cards.s.SandstoneWarrior.class)); - cards.add(new SetCardInfo("Sapphire Medallion", 306, Rarity.RARE, mage.cards.s.SapphireMedallion.class)); - cards.add(new SetCardInfo("Sarcomancy", 154, Rarity.RARE, mage.cards.s.Sarcomancy.class)); - cards.add(new SetCardInfo("Scabland", 325, Rarity.RARE, mage.cards.s.Scabland.class)); - cards.add(new SetCardInfo("Scalding Tongs", 307, Rarity.RARE, mage.cards.s.ScaldingTongs.class)); - cards.add(new SetCardInfo("Scorched Earth", 200, Rarity.RARE, mage.cards.s.ScorchedEarth.class)); - cards.add(new SetCardInfo("Scragnoth", 253, Rarity.UNCOMMON, mage.cards.s.Scragnoth.class)); - cards.add(new SetCardInfo("Screeching Harpy", 155, Rarity.UNCOMMON, mage.cards.s.ScreechingHarpy.class)); - cards.add(new SetCardInfo("Scroll Rack", 308, Rarity.RARE, mage.cards.s.ScrollRack.class)); - cards.add(new SetCardInfo("Sea Monster", 85, Rarity.COMMON, mage.cards.s.SeaMonster.class)); - cards.add(new SetCardInfo("Searing Touch", 201, Rarity.UNCOMMON, mage.cards.s.SearingTouch.class)); - cards.add(new SetCardInfo("Seeker of Skybreak", 254, Rarity.COMMON, mage.cards.s.SeekerOfSkybreak.class)); - cards.add(new SetCardInfo("Segmented Wurm", 269, Rarity.UNCOMMON, mage.cards.s.SegmentedWurm.class)); - cards.add(new SetCardInfo("Selenia, Dark Angel", 270, Rarity.RARE, mage.cards.s.SeleniaDarkAngel.class)); - cards.add(new SetCardInfo("Serene Offering", 40, Rarity.UNCOMMON, mage.cards.s.SereneOffering.class)); - cards.add(new SetCardInfo("Servant of Volrath", 156, Rarity.COMMON, mage.cards.s.ServantOfVolrath.class)); - cards.add(new SetCardInfo("Shadow Rift", 86, Rarity.COMMON, mage.cards.s.ShadowRift.class)); - cards.add(new SetCardInfo("Shadowstorm", 202, Rarity.UNCOMMON, mage.cards.s.Shadowstorm.class)); - cards.add(new SetCardInfo("Shatter", 203, Rarity.COMMON, mage.cards.s.Shatter.class)); - cards.add(new SetCardInfo("Shimmering Wings", 87, Rarity.COMMON, mage.cards.s.ShimmeringWings.class)); - cards.add(new SetCardInfo("Shocker", 204, Rarity.RARE, mage.cards.s.Shocker.class)); - cards.add(new SetCardInfo("Sky Spirit", 271, Rarity.UNCOMMON, mage.cards.s.SkySpirit.class)); - cards.add(new SetCardInfo("Skyshroud Condor", 88, Rarity.UNCOMMON, mage.cards.s.SkyshroudCondor.class)); - cards.add(new SetCardInfo("Skyshroud Elf", 255, Rarity.COMMON, mage.cards.s.SkyshroudElf.class)); - cards.add(new SetCardInfo("Skyshroud Forest", 326, Rarity.RARE, mage.cards.s.SkyshroudForest.class)); - cards.add(new SetCardInfo("Skyshroud Ranger", 256, Rarity.COMMON, mage.cards.s.SkyshroudRanger.class)); - cards.add(new SetCardInfo("Skyshroud Troll", 257, Rarity.COMMON, mage.cards.s.SkyshroudTroll.class)); - cards.add(new SetCardInfo("Skyshroud Vampire", 157, Rarity.UNCOMMON, mage.cards.s.SkyshroudVampire.class)); - cards.add(new SetCardInfo("Soltari Crusader", 41, Rarity.UNCOMMON, mage.cards.s.SoltariCrusader.class)); - cards.add(new SetCardInfo("Soltari Emissary", 42, Rarity.RARE, mage.cards.s.SoltariEmissary.class)); - cards.add(new SetCardInfo("Soltari Foot Soldier", 43, Rarity.COMMON, mage.cards.s.SoltariFootSoldier.class)); - cards.add(new SetCardInfo("Soltari Guerrillas", 272, Rarity.RARE, mage.cards.s.SoltariGuerrillas.class)); - cards.add(new SetCardInfo("Soltari Lancer", 44, Rarity.COMMON, mage.cards.s.SoltariLancer.class)); - cards.add(new SetCardInfo("Soltari Monk", 45, Rarity.UNCOMMON, mage.cards.s.SoltariMonk.class)); - cards.add(new SetCardInfo("Soltari Priest", 46, Rarity.UNCOMMON, mage.cards.s.SoltariPriest.class)); - cards.add(new SetCardInfo("Soltari Trooper", 47, Rarity.COMMON, mage.cards.s.SoltariTrooper.class)); - cards.add(new SetCardInfo("Souldrinker", 158, Rarity.UNCOMMON, mage.cards.s.Souldrinker.class)); - cards.add(new SetCardInfo("Spell Blast", 89, Rarity.COMMON, mage.cards.s.SpellBlast.class)); - cards.add(new SetCardInfo("Spike Drone", 258, Rarity.COMMON, mage.cards.s.SpikeDrone.class)); - cards.add(new SetCardInfo("Spinal Graft", 159, Rarity.COMMON, mage.cards.s.SpinalGraft.class)); - cards.add(new SetCardInfo("Spirit Mirror", 48, Rarity.RARE, mage.cards.s.SpiritMirror.class)); - cards.add(new SetCardInfo("Spontaneous Combustion", 273, Rarity.UNCOMMON, mage.cards.s.SpontaneousCombustion.class)); - cards.add(new SetCardInfo("Squee's Toy", 309, Rarity.COMMON, mage.cards.s.SqueesToy.class)); - cards.add(new SetCardInfo("Stalking Stones", 327, Rarity.UNCOMMON, mage.cards.s.StalkingStones.class)); - cards.add(new SetCardInfo("Starke of Rath", 205, Rarity.RARE, mage.cards.s.StarkeOfRath.class)); - cards.add(new SetCardInfo("Static Orb", 310, Rarity.RARE, mage.cards.s.StaticOrb.class)); - cards.add(new SetCardInfo("Staunch Defenders", 49, Rarity.UNCOMMON, mage.cards.s.StaunchDefenders.class)); - cards.add(new SetCardInfo("Steal Enchantment", 90, Rarity.UNCOMMON, mage.cards.s.StealEnchantment.class)); - cards.add(new SetCardInfo("Stinging Licid", 91, Rarity.UNCOMMON, mage.cards.s.StingingLicid.class)); - cards.add(new SetCardInfo("Stone Rain", 206, Rarity.COMMON, mage.cards.s.StoneRain.class)); - cards.add(new SetCardInfo("Storm Front", 259, Rarity.UNCOMMON, mage.cards.s.StormFront.class)); - cards.add(new SetCardInfo("Stun", 207, Rarity.COMMON, mage.cards.s.Stun.class)); - cards.add(new SetCardInfo("Sudden Impact", 208, Rarity.UNCOMMON, mage.cards.s.SuddenImpact.class)); - cards.add(new SetCardInfo("Swamp", 339, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 340, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 341, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 342, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Tahngarth's Rage", 209, Rarity.UNCOMMON, mage.cards.t.TahngarthsRage.class)); - cards.add(new SetCardInfo("Talon Sliver", 50, Rarity.COMMON, mage.cards.t.TalonSliver.class)); - cards.add(new SetCardInfo("Telethopter", 311, Rarity.UNCOMMON, mage.cards.t.Telethopter.class)); - cards.add(new SetCardInfo("Thalakos Dreamsower", 92, Rarity.UNCOMMON, mage.cards.t.ThalakosDreamsower.class)); - cards.add(new SetCardInfo("Thalakos Lowlands", 328, Rarity.UNCOMMON, mage.cards.t.ThalakosLowlands.class)); - cards.add(new SetCardInfo("Thalakos Mistfolk", 93, Rarity.COMMON, mage.cards.t.ThalakosMistfolk.class)); - cards.add(new SetCardInfo("Thalakos Seer", 94, Rarity.COMMON, mage.cards.t.ThalakosSeer.class)); - cards.add(new SetCardInfo("Thalakos Sentry", 95, Rarity.COMMON, mage.cards.t.ThalakosSentry.class)); - cards.add(new SetCardInfo("Thumbscrews", 312, Rarity.RARE, mage.cards.t.Thumbscrews.class)); - cards.add(new SetCardInfo("Time Ebb", 96, Rarity.COMMON, mage.cards.t.TimeEbb.class)); - cards.add(new SetCardInfo("Time Warp", 97, Rarity.RARE, mage.cards.t.TimeWarp.class)); - cards.add(new SetCardInfo("Tooth and Claw", 210, Rarity.RARE, mage.cards.t.ToothAndClaw.class)); - cards.add(new SetCardInfo("Torture Chamber", 313, Rarity.RARE, mage.cards.t.TortureChamber.class)); - cards.add(new SetCardInfo("Tradewind Rider", 98, Rarity.RARE, mage.cards.t.TradewindRider.class)); - cards.add(new SetCardInfo("Trained Armodon", 260, Rarity.COMMON, mage.cards.t.TrainedArmodon.class)); - cards.add(new SetCardInfo("Tranquility", 261, Rarity.COMMON, mage.cards.t.Tranquility.class)); - cards.add(new SetCardInfo("Trumpeting Armodon", 262, Rarity.UNCOMMON, mage.cards.t.TrumpetingArmodon.class)); - cards.add(new SetCardInfo("Twitch", 99, Rarity.COMMON, mage.cards.t.Twitch.class)); - cards.add(new SetCardInfo("Unstable Shapeshifter", 100, Rarity.RARE, mage.cards.u.UnstableShapeshifter.class)); - cards.add(new SetCardInfo("Vec Townships", 329, Rarity.UNCOMMON, mage.cards.v.VecTownships.class)); - cards.add(new SetCardInfo("Verdant Force", 263, Rarity.RARE, mage.cards.v.VerdantForce.class)); - cards.add(new SetCardInfo("Verdigris", 264, Rarity.UNCOMMON, mage.cards.v.Verdigris.class)); - cards.add(new SetCardInfo("Vhati il-Dal", 274, Rarity.RARE, mage.cards.v.VhatiIlDal.class)); - cards.add(new SetCardInfo("Volrath's Curse", 101, Rarity.COMMON, mage.cards.v.VolrathsCurse.class)); - cards.add(new SetCardInfo("Wall of Diffusion", 211, Rarity.COMMON, mage.cards.w.WallOfDiffusion.class)); - cards.add(new SetCardInfo("Warmth", 51, Rarity.UNCOMMON, mage.cards.w.Warmth.class)); - cards.add(new SetCardInfo("Wasteland", 330, Rarity.UNCOMMON, mage.cards.w.Wasteland.class)); - cards.add(new SetCardInfo("Watchdog", 314, Rarity.UNCOMMON, mage.cards.w.Watchdog.class)); - cards.add(new SetCardInfo("Whispers of the Muse", 103, Rarity.UNCOMMON, mage.cards.w.WhispersOfTheMuse.class)); - cards.add(new SetCardInfo("Wild Wurm", 212, Rarity.UNCOMMON, mage.cards.w.WildWurm.class)); - cards.add(new SetCardInfo("Wind Dancer", 104, Rarity.UNCOMMON, mage.cards.w.WindDancer.class)); - cards.add(new SetCardInfo("Wind Drake", 105, Rarity.COMMON, mage.cards.w.WindDrake.class)); - cards.add(new SetCardInfo("Winds of Rath", 52, Rarity.RARE, mage.cards.w.WindsOfRath.class)); - cards.add(new SetCardInfo("Winged Sliver", 106, Rarity.COMMON, mage.cards.w.WingedSliver.class)); - cards.add(new SetCardInfo("Winter's Grasp", 265, Rarity.UNCOMMON, mage.cards.w.WintersGrasp.class)); - cards.add(new SetCardInfo("Wood Sage", 275, Rarity.RARE, mage.cards.w.WoodSage.class)); - cards.add(new SetCardInfo("Worthy Cause", 53, Rarity.UNCOMMON, mage.cards.w.WorthyCause.class)); - } -} + cards.add(new SetCardInfo("Essence Bottle", 286, Rarity.UNCOMMON, mage.cards.e.EssenceBottle.class)); + cards.add(new SetCardInfo("Evincar's Justice", 134, Rarity.COMMON, mage.cards.e.EvincarsJustice.class)); + cards.add(new SetCardInfo("Excavator", 287, Rarity.UNCOMMON, mage.cards.e.Excavator.class)); + cards.add(new SetCardInfo("Extinction", 135, Rarity.RARE, mage.cards.e.Extinction.class)); + cards.add(new SetCardInfo("Fevered Convulsions", 136, Rarity.RARE, mage.cards.f.FeveredConvulsions.class)); + cards.add(new SetCardInfo("Field of Souls", 18, Rarity.RARE, mage.cards.f.FieldOfSouls.class)); + cards.add(new SetCardInfo("Fighting Drake", 63, Rarity.UNCOMMON, mage.cards.f.FightingDrake.class)); + cards.add(new SetCardInfo("Firefly", 172, Rarity.UNCOMMON, mage.cards.f.Firefly.class)); + cards.add(new SetCardInfo("Fireslinger", 173, Rarity.COMMON, mage.cards.f.Fireslinger.class)); + cards.add(new SetCardInfo("Flailing Drake", 227, Rarity.UNCOMMON, mage.cards.f.FlailingDrake.class)); + cards.add(new SetCardInfo("Flickering Ward", 19, Rarity.UNCOMMON, mage.cards.f.FlickeringWard.class)); + cards.add(new SetCardInfo("Flowstone Giant", 174, Rarity.COMMON, mage.cards.f.FlowstoneGiant.class)); + cards.add(new SetCardInfo("Flowstone Salamander", 175, Rarity.UNCOMMON, mage.cards.f.FlowstoneSalamander.class)); + cards.add(new SetCardInfo("Flowstone Sculpture", 288, Rarity.RARE, mage.cards.f.FlowstoneSculpture.class)); + cards.add(new SetCardInfo("Flowstone Wyvern", 176, Rarity.RARE, mage.cards.f.FlowstoneWyvern.class)); + cards.add(new SetCardInfo("Fool's Tome", 289, Rarity.RARE, mage.cards.f.FoolsTome.class)); + cards.add(new SetCardInfo("Forest", 347, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 348, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 349, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 350, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Frog Tongue", 228, Rarity.COMMON, mage.cards.f.FrogTongue.class)); + cards.add(new SetCardInfo("Fugitive Druid", 229, Rarity.RARE, mage.cards.f.FugitiveDruid.class)); + cards.add(new SetCardInfo("Furnace of Rath", 177, Rarity.RARE, mage.cards.f.FurnaceOfRath.class)); + cards.add(new SetCardInfo("Fylamarid", 64, Rarity.UNCOMMON, mage.cards.f.Fylamarid.class)); + cards.add(new SetCardInfo("Gallantry", 20, Rarity.UNCOMMON, mage.cards.g.Gallantry.class)); + cards.add(new SetCardInfo("Gaseous Form", 65, Rarity.COMMON, mage.cards.g.GaseousForm.class)); + cards.add(new SetCardInfo("Gerrard's Battle Cry", 21, Rarity.RARE, mage.cards.g.GerrardsBattleCry.class)); + cards.add(new SetCardInfo("Ghost Town", 318, Rarity.UNCOMMON, mage.cards.g.GhostTown.class)); + cards.add(new SetCardInfo("Giant Crab", 66, Rarity.COMMON, mage.cards.g.GiantCrab.class)); + cards.add(new SetCardInfo("Giant Strength", 178, Rarity.COMMON, mage.cards.g.GiantStrength.class)); + cards.add(new SetCardInfo("Goblin Bombardment", 179, Rarity.UNCOMMON, mage.cards.g.GoblinBombardment.class)); + cards.add(new SetCardInfo("Gravedigger", 137, Rarity.COMMON, mage.cards.g.Gravedigger.class)); + cards.add(new SetCardInfo("Grindstone", 290, Rarity.RARE, mage.cards.g.Grindstone.class)); + cards.add(new SetCardInfo("Hand to Hand", 180, Rarity.RARE, mage.cards.h.HandToHand.class)); + cards.add(new SetCardInfo("Hanna's Custody", 22, Rarity.RARE, mage.cards.h.HannasCustody.class)); + cards.add(new SetCardInfo("Harrow", 230, Rarity.UNCOMMON, mage.cards.h.Harrow.class)); + cards.add(new SetCardInfo("Havoc", 181, Rarity.UNCOMMON, mage.cards.h.Havoc.class)); + cards.add(new SetCardInfo("Heart Sliver", 182, Rarity.COMMON, mage.cards.h.HeartSliver.class)); + cards.add(new SetCardInfo("Heartwood Dryad", 231, Rarity.COMMON, mage.cards.h.HeartwoodDryad.class)); + cards.add(new SetCardInfo("Heartwood Giant", 232, Rarity.RARE, mage.cards.h.HeartwoodGiant.class)); + cards.add(new SetCardInfo("Heartwood Treefolk", 233, Rarity.UNCOMMON, mage.cards.h.HeartwoodTreefolk.class)); + cards.add(new SetCardInfo("Helm of Possession", 291, Rarity.RARE, mage.cards.h.HelmOfPossession.class)); + cards.add(new SetCardInfo("Hero's Resolve", 23, Rarity.COMMON, mage.cards.h.HerosResolve.class)); + cards.add(new SetCardInfo("Horned Sliver", 234, Rarity.UNCOMMON, mage.cards.h.HornedSliver.class)); + cards.add(new SetCardInfo("Horned Turtle", 67, Rarity.COMMON, mage.cards.h.HornedTurtle.class)); + cards.add(new SetCardInfo("Humility", 24, Rarity.RARE, mage.cards.h.Humility.class)); + cards.add(new SetCardInfo("Imps' Taunt", 138, Rarity.UNCOMMON, mage.cards.i.ImpsTaunt.class)); + cards.add(new SetCardInfo("Insight", 68, Rarity.UNCOMMON, mage.cards.i.Insight.class)); + cards.add(new SetCardInfo("Interdict", 69, Rarity.UNCOMMON, mage.cards.i.Interdict.class)); + cards.add(new SetCardInfo("Intuition", 70, Rarity.RARE, mage.cards.i.Intuition.class)); + cards.add(new SetCardInfo("Invulnerability", 25, Rarity.UNCOMMON, mage.cards.i.Invulnerability.class)); + cards.add(new SetCardInfo("Island", 335, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 336, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 337, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 338, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jackal Pup", 183, Rarity.UNCOMMON, mage.cards.j.JackalPup.class)); + cards.add(new SetCardInfo("Jet Medallion", 292, Rarity.RARE, mage.cards.j.JetMedallion.class)); + cards.add(new SetCardInfo("Jinxed Idol", 293, Rarity.RARE, mage.cards.j.JinxedIdol.class)); + cards.add(new SetCardInfo("Kezzerdrix", 139, Rarity.RARE, mage.cards.k.Kezzerdrix.class)); + cards.add(new SetCardInfo("Kindle", 184, Rarity.COMMON, mage.cards.k.Kindle.class)); + cards.add(new SetCardInfo("Knight of Dawn", 26, Rarity.UNCOMMON, mage.cards.k.KnightOfDawn.class)); + cards.add(new SetCardInfo("Knight of Dusk", 140, Rarity.UNCOMMON, mage.cards.k.KnightOfDusk.class)); + cards.add(new SetCardInfo("Krakilin", 235, Rarity.UNCOMMON, mage.cards.k.Krakilin.class)); + cards.add(new SetCardInfo("Leeching Licid", 141, Rarity.UNCOMMON, mage.cards.l.LeechingLicid.class)); + cards.add(new SetCardInfo("Legacy's Allure", 71, Rarity.UNCOMMON, mage.cards.l.LegacysAllure.class)); + cards.add(new SetCardInfo("Legerdemain", 72, Rarity.UNCOMMON, mage.cards.l.Legerdemain.class)); + cards.add(new SetCardInfo("Light of Day", 27, Rarity.UNCOMMON, mage.cards.l.LightOfDay.class)); + cards.add(new SetCardInfo("Lightning Blast", 185, Rarity.COMMON, mage.cards.l.LightningBlast.class)); + cards.add(new SetCardInfo("Lightning Elemental", 186, Rarity.COMMON, mage.cards.l.LightningElemental.class)); + cards.add(new SetCardInfo("Living Death", 142, Rarity.RARE, mage.cards.l.LivingDeath.class)); + cards.add(new SetCardInfo("Lobotomy", 267, Rarity.UNCOMMON, mage.cards.l.Lobotomy.class)); + cards.add(new SetCardInfo("Lotus Petal", 294, Rarity.COMMON, mage.cards.l.LotusPetal.class)); + cards.add(new SetCardInfo("Lowland Giant", 187, Rarity.COMMON, mage.cards.l.LowlandGiant.class)); + cards.add(new SetCardInfo("Maddening Imp", 143, Rarity.RARE, mage.cards.m.MaddeningImp.class)); + cards.add(new SetCardInfo("Magmasaur", 188, Rarity.RARE, mage.cards.m.Magmasaur.class)); + cards.add(new SetCardInfo("Mana Severance", 73, Rarity.RARE, mage.cards.m.ManaSeverance.class)); + cards.add(new SetCardInfo("Manakin", 296, Rarity.COMMON, mage.cards.m.Manakin.class)); + cards.add(new SetCardInfo("Manta Riders", 74, Rarity.COMMON, mage.cards.m.MantaRiders.class)); + cards.add(new SetCardInfo("Marble Titan", 28, Rarity.RARE, mage.cards.m.MarbleTitan.class)); + cards.add(new SetCardInfo("Marsh Lurker", 144, Rarity.COMMON, mage.cards.m.MarshLurker.class)); + cards.add(new SetCardInfo("Master Decoy", 29, Rarity.COMMON, mage.cards.m.MasterDecoy.class)); + cards.add(new SetCardInfo("Mawcor", 75, Rarity.RARE, mage.cards.m.Mawcor.class)); + cards.add(new SetCardInfo("Maze of Shadows", 319, Rarity.UNCOMMON, mage.cards.m.MazeOfShadows.class)); + cards.add(new SetCardInfo("Meditate", 76, Rarity.RARE, mage.cards.m.Meditate.class)); + cards.add(new SetCardInfo("Metallic Sliver", 297, Rarity.COMMON, mage.cards.m.MetallicSliver.class)); + cards.add(new SetCardInfo("Mindwhip Sliver", 145, Rarity.UNCOMMON, mage.cards.m.MindwhipSliver.class)); + cards.add(new SetCardInfo("Minion of the Wastes", 146, Rarity.RARE, mage.cards.m.MinionOfTheWastes.class)); + cards.add(new SetCardInfo("Mirri's Guile", 236, Rarity.RARE, mage.cards.m.MirrisGuile.class)); + cards.add(new SetCardInfo("Mnemonic Sliver", 77, Rarity.UNCOMMON, mage.cards.m.MnemonicSliver.class)); + cards.add(new SetCardInfo("Mogg Cannon", 298, Rarity.UNCOMMON, mage.cards.m.MoggCannon.class)); + cards.add(new SetCardInfo("Mogg Conscripts", 189, Rarity.COMMON, mage.cards.m.MoggConscripts.class)); + cards.add(new SetCardInfo("Mogg Fanatic", 190, Rarity.COMMON, mage.cards.m.MoggFanatic.class)); + cards.add(new SetCardInfo("Mogg Hollows", 320, Rarity.UNCOMMON, mage.cards.m.MoggHollows.class)); + cards.add(new SetCardInfo("Mogg Raider", 191, Rarity.COMMON, mage.cards.m.MoggRaider.class)); + cards.add(new SetCardInfo("Mogg Squad", 192, Rarity.UNCOMMON, mage.cards.m.MoggSquad.class)); + cards.add(new SetCardInfo("Mongrel Pack", 237, Rarity.RARE, mage.cards.m.MongrelPack.class)); + cards.add(new SetCardInfo("Mountain", 343, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 344, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 345, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 346, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mounted Archers", 30, Rarity.COMMON, mage.cards.m.MountedArchers.class)); + cards.add(new SetCardInfo("Muscle Sliver", 238, Rarity.COMMON, mage.cards.m.MuscleSliver.class)); + cards.add(new SetCardInfo("Natural Spring", 239, Rarity.COMMON, mage.cards.n.NaturalSpring.class)); + cards.add(new SetCardInfo("Nature's Revolt", 240, Rarity.RARE, mage.cards.n.NaturesRevolt.class)); + cards.add(new SetCardInfo("Needle Storm", 241, Rarity.UNCOMMON, mage.cards.n.NeedleStorm.class)); + cards.add(new SetCardInfo("Nurturing Licid", 242, Rarity.UNCOMMON, mage.cards.n.NurturingLicid.class)); + cards.add(new SetCardInfo("Opportunist", 194, Rarity.UNCOMMON, mage.cards.o.Opportunist.class)); + cards.add(new SetCardInfo("Oracle en-Vec", 31, Rarity.RARE, mage.cards.o.OracleEnVec.class)); + cards.add(new SetCardInfo("Orim's Prayer", 32, Rarity.UNCOMMON, mage.cards.o.OrimsPrayer.class)); + cards.add(new SetCardInfo("Orim, Samite Healer", 33, Rarity.RARE, mage.cards.o.OrimSamiteHealer.class)); + cards.add(new SetCardInfo("Overrun", 243, Rarity.UNCOMMON, mage.cards.o.Overrun.class)); + cards.add(new SetCardInfo("Pacifism", 34, Rarity.COMMON, mage.cards.p.Pacifism.class)); + cards.add(new SetCardInfo("Pallimud", 195, Rarity.RARE, mage.cards.p.Pallimud.class)); + cards.add(new SetCardInfo("Patchwork Gnomes", 299, Rarity.UNCOMMON, mage.cards.p.PatchworkGnomes.class)); + cards.add(new SetCardInfo("Pearl Medallion", 300, Rarity.RARE, mage.cards.p.PearlMedallion.class)); + cards.add(new SetCardInfo("Pegasus Refuge", 35, Rarity.RARE, mage.cards.p.PegasusRefuge.class)); + cards.add(new SetCardInfo("Perish", 147, Rarity.UNCOMMON, mage.cards.p.Perish.class)); + cards.add(new SetCardInfo("Phyrexian Grimoire", 301, Rarity.RARE, mage.cards.p.PhyrexianGrimoire.class)); + cards.add(new SetCardInfo("Phyrexian Hulk", 302, Rarity.UNCOMMON, mage.cards.p.PhyrexianHulk.class)); + cards.add(new SetCardInfo("Pincher Beetles", 244, Rarity.COMMON, mage.cards.p.PincherBeetles.class)); + cards.add(new SetCardInfo("Pine Barrens", 321, Rarity.RARE, mage.cards.p.PineBarrens.class)); + cards.add(new SetCardInfo("Pit Imp", 148, Rarity.COMMON, mage.cards.p.PitImp.class)); + cards.add(new SetCardInfo("Plains", 331, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 332, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 333, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 334, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Power Sink", 78, Rarity.COMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Precognition", 79, Rarity.RARE, mage.cards.p.Precognition.class)); + cards.add(new SetCardInfo("Propaganda", 80, Rarity.UNCOMMON, mage.cards.p.Propaganda.class)); + cards.add(new SetCardInfo("Puppet Strings", 304, Rarity.UNCOMMON, mage.cards.p.PuppetStrings.class)); + cards.add(new SetCardInfo("Quickening Licid", 36, Rarity.UNCOMMON, mage.cards.q.QuickeningLicid.class)); + cards.add(new SetCardInfo("Rain of Tears", 149, Rarity.UNCOMMON, mage.cards.r.RainOfTears.class)); + cards.add(new SetCardInfo("Rampant Growth", 245, Rarity.COMMON, mage.cards.r.RampantGrowth.class)); + cards.add(new SetCardInfo("Ranger en-Vec", 268, Rarity.UNCOMMON, mage.cards.r.RangerEnVec.class)); + cards.add(new SetCardInfo("Rathi Dragon", 196, Rarity.RARE, mage.cards.r.RathiDragon.class)); + cards.add(new SetCardInfo("Rats of Rath", 150, Rarity.COMMON, mage.cards.r.RatsOfRath.class)); + cards.add(new SetCardInfo("Reality Anchor", 246, Rarity.COMMON, mage.cards.r.RealityAnchor.class)); + cards.add(new SetCardInfo("Reanimate", 151, Rarity.UNCOMMON, mage.cards.r.Reanimate.class)); + cards.add(new SetCardInfo("Reap", 247, Rarity.UNCOMMON, mage.cards.r.Reap.class)); + cards.add(new SetCardInfo("Reckless Spite", 152, Rarity.UNCOMMON, mage.cards.r.RecklessSpite.class)); + cards.add(new SetCardInfo("Recycle", 248, Rarity.RARE, mage.cards.r.Recycle.class)); + cards.add(new SetCardInfo("Reflecting Pool", 322, Rarity.RARE, mage.cards.r.ReflectingPool.class)); + cards.add(new SetCardInfo("Renegade Warlord", 197, Rarity.UNCOMMON, mage.cards.r.RenegadeWarlord.class)); + cards.add(new SetCardInfo("Repentance", 37, Rarity.UNCOMMON, mage.cards.r.Repentance.class)); + cards.add(new SetCardInfo("Respite", 249, Rarity.COMMON, mage.cards.r.Respite.class)); + cards.add(new SetCardInfo("Rolling Thunder", 198, Rarity.COMMON, mage.cards.r.RollingThunder.class)); + cards.add(new SetCardInfo("Root Maze", 250, Rarity.RARE, mage.cards.r.RootMaze.class)); + cards.add(new SetCardInfo("Rootbreaker Wurm", 251, Rarity.COMMON, mage.cards.r.RootbreakerWurm.class)); + cards.add(new SetCardInfo("Rootwalla", 252, Rarity.COMMON, mage.cards.r.Rootwalla.class)); + cards.add(new SetCardInfo("Rootwater Depths", 323, Rarity.UNCOMMON, mage.cards.r.RootwaterDepths.class)); + cards.add(new SetCardInfo("Rootwater Diver", 81, Rarity.UNCOMMON, mage.cards.r.RootwaterDiver.class)); + cards.add(new SetCardInfo("Rootwater Hunter", 82, Rarity.COMMON, mage.cards.r.RootwaterHunter.class)); + cards.add(new SetCardInfo("Rootwater Matriarch", 83, Rarity.RARE, mage.cards.r.RootwaterMatriarch.class)); + cards.add(new SetCardInfo("Rootwater Shaman", 84, Rarity.RARE, mage.cards.r.RootwaterShaman.class)); + cards.add(new SetCardInfo("Ruby Medallion", 305, Rarity.RARE, mage.cards.r.RubyMedallion.class)); + cards.add(new SetCardInfo("Sacred Guide", 38, Rarity.RARE, mage.cards.s.SacredGuide.class)); + cards.add(new SetCardInfo("Sadistic Glee", 153, Rarity.COMMON, mage.cards.s.SadisticGlee.class)); + cards.add(new SetCardInfo("Safeguard", 39, Rarity.RARE, mage.cards.s.Safeguard.class)); + cards.add(new SetCardInfo("Salt Flats", 324, Rarity.RARE, mage.cards.s.SaltFlats.class)); + cards.add(new SetCardInfo("Sandstone Warrior", 199, Rarity.COMMON, mage.cards.s.SandstoneWarrior.class)); + cards.add(new SetCardInfo("Sapphire Medallion", 306, Rarity.RARE, mage.cards.s.SapphireMedallion.class)); + cards.add(new SetCardInfo("Sarcomancy", 154, Rarity.RARE, mage.cards.s.Sarcomancy.class)); + cards.add(new SetCardInfo("Scabland", 325, Rarity.RARE, mage.cards.s.Scabland.class)); + cards.add(new SetCardInfo("Scalding Tongs", 307, Rarity.RARE, mage.cards.s.ScaldingTongs.class)); + cards.add(new SetCardInfo("Scorched Earth", 200, Rarity.RARE, mage.cards.s.ScorchedEarth.class)); + cards.add(new SetCardInfo("Scragnoth", 253, Rarity.UNCOMMON, mage.cards.s.Scragnoth.class)); + cards.add(new SetCardInfo("Screeching Harpy", 155, Rarity.UNCOMMON, mage.cards.s.ScreechingHarpy.class)); + cards.add(new SetCardInfo("Scroll Rack", 308, Rarity.RARE, mage.cards.s.ScrollRack.class)); + cards.add(new SetCardInfo("Sea Monster", 85, Rarity.COMMON, mage.cards.s.SeaMonster.class)); + cards.add(new SetCardInfo("Searing Touch", 201, Rarity.UNCOMMON, mage.cards.s.SearingTouch.class)); + cards.add(new SetCardInfo("Seeker of Skybreak", 254, Rarity.COMMON, mage.cards.s.SeekerOfSkybreak.class)); + cards.add(new SetCardInfo("Segmented Wurm", 269, Rarity.UNCOMMON, mage.cards.s.SegmentedWurm.class)); + cards.add(new SetCardInfo("Selenia, Dark Angel", 270, Rarity.RARE, mage.cards.s.SeleniaDarkAngel.class)); + cards.add(new SetCardInfo("Serene Offering", 40, Rarity.UNCOMMON, mage.cards.s.SereneOffering.class)); + cards.add(new SetCardInfo("Servant of Volrath", 156, Rarity.COMMON, mage.cards.s.ServantOfVolrath.class)); + cards.add(new SetCardInfo("Shadow Rift", 86, Rarity.COMMON, mage.cards.s.ShadowRift.class)); + cards.add(new SetCardInfo("Shadowstorm", 202, Rarity.UNCOMMON, mage.cards.s.Shadowstorm.class)); + cards.add(new SetCardInfo("Shatter", 203, Rarity.COMMON, mage.cards.s.Shatter.class)); + cards.add(new SetCardInfo("Shimmering Wings", 87, Rarity.COMMON, mage.cards.s.ShimmeringWings.class)); + cards.add(new SetCardInfo("Shocker", 204, Rarity.RARE, mage.cards.s.Shocker.class)); + cards.add(new SetCardInfo("Sky Spirit", 271, Rarity.UNCOMMON, mage.cards.s.SkySpirit.class)); + cards.add(new SetCardInfo("Skyshroud Condor", 88, Rarity.UNCOMMON, mage.cards.s.SkyshroudCondor.class)); + cards.add(new SetCardInfo("Skyshroud Elf", 255, Rarity.COMMON, mage.cards.s.SkyshroudElf.class)); + cards.add(new SetCardInfo("Skyshroud Forest", 326, Rarity.RARE, mage.cards.s.SkyshroudForest.class)); + cards.add(new SetCardInfo("Skyshroud Ranger", 256, Rarity.COMMON, mage.cards.s.SkyshroudRanger.class)); + cards.add(new SetCardInfo("Skyshroud Troll", 257, Rarity.COMMON, mage.cards.s.SkyshroudTroll.class)); + cards.add(new SetCardInfo("Skyshroud Vampire", 157, Rarity.UNCOMMON, mage.cards.s.SkyshroudVampire.class)); + cards.add(new SetCardInfo("Soltari Crusader", 41, Rarity.UNCOMMON, mage.cards.s.SoltariCrusader.class)); + cards.add(new SetCardInfo("Soltari Emissary", 42, Rarity.RARE, mage.cards.s.SoltariEmissary.class)); + cards.add(new SetCardInfo("Soltari Foot Soldier", 43, Rarity.COMMON, mage.cards.s.SoltariFootSoldier.class)); + cards.add(new SetCardInfo("Soltari Guerrillas", 272, Rarity.RARE, mage.cards.s.SoltariGuerrillas.class)); + cards.add(new SetCardInfo("Soltari Lancer", 44, Rarity.COMMON, mage.cards.s.SoltariLancer.class)); + cards.add(new SetCardInfo("Soltari Monk", 45, Rarity.UNCOMMON, mage.cards.s.SoltariMonk.class)); + cards.add(new SetCardInfo("Soltari Priest", 46, Rarity.UNCOMMON, mage.cards.s.SoltariPriest.class)); + cards.add(new SetCardInfo("Soltari Trooper", 47, Rarity.COMMON, mage.cards.s.SoltariTrooper.class)); + cards.add(new SetCardInfo("Souldrinker", 158, Rarity.UNCOMMON, mage.cards.s.Souldrinker.class)); + cards.add(new SetCardInfo("Spell Blast", 89, Rarity.COMMON, mage.cards.s.SpellBlast.class)); + cards.add(new SetCardInfo("Spike Drone", 258, Rarity.COMMON, mage.cards.s.SpikeDrone.class)); + cards.add(new SetCardInfo("Spinal Graft", 159, Rarity.COMMON, mage.cards.s.SpinalGraft.class)); + cards.add(new SetCardInfo("Spirit Mirror", 48, Rarity.RARE, mage.cards.s.SpiritMirror.class)); + cards.add(new SetCardInfo("Spontaneous Combustion", 273, Rarity.UNCOMMON, mage.cards.s.SpontaneousCombustion.class)); + cards.add(new SetCardInfo("Squee's Toy", 309, Rarity.COMMON, mage.cards.s.SqueesToy.class)); + cards.add(new SetCardInfo("Stalking Stones", 327, Rarity.UNCOMMON, mage.cards.s.StalkingStones.class)); + cards.add(new SetCardInfo("Starke of Rath", 205, Rarity.RARE, mage.cards.s.StarkeOfRath.class)); + cards.add(new SetCardInfo("Static Orb", 310, Rarity.RARE, mage.cards.s.StaticOrb.class)); + cards.add(new SetCardInfo("Staunch Defenders", 49, Rarity.UNCOMMON, mage.cards.s.StaunchDefenders.class)); + cards.add(new SetCardInfo("Steal Enchantment", 90, Rarity.UNCOMMON, mage.cards.s.StealEnchantment.class)); + cards.add(new SetCardInfo("Stinging Licid", 91, Rarity.UNCOMMON, mage.cards.s.StingingLicid.class)); + cards.add(new SetCardInfo("Stone Rain", 206, Rarity.COMMON, mage.cards.s.StoneRain.class)); + cards.add(new SetCardInfo("Storm Front", 259, Rarity.UNCOMMON, mage.cards.s.StormFront.class)); + cards.add(new SetCardInfo("Stun", 207, Rarity.COMMON, mage.cards.s.Stun.class)); + cards.add(new SetCardInfo("Sudden Impact", 208, Rarity.UNCOMMON, mage.cards.s.SuddenImpact.class)); + cards.add(new SetCardInfo("Swamp", 339, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 340, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 341, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 342, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Tahngarth's Rage", 209, Rarity.UNCOMMON, mage.cards.t.TahngarthsRage.class)); + cards.add(new SetCardInfo("Talon Sliver", 50, Rarity.COMMON, mage.cards.t.TalonSliver.class)); + cards.add(new SetCardInfo("Telethopter", 311, Rarity.UNCOMMON, mage.cards.t.Telethopter.class)); + cards.add(new SetCardInfo("Thalakos Dreamsower", 92, Rarity.UNCOMMON, mage.cards.t.ThalakosDreamsower.class)); + cards.add(new SetCardInfo("Thalakos Lowlands", 328, Rarity.UNCOMMON, mage.cards.t.ThalakosLowlands.class)); + cards.add(new SetCardInfo("Thalakos Mistfolk", 93, Rarity.COMMON, mage.cards.t.ThalakosMistfolk.class)); + cards.add(new SetCardInfo("Thalakos Seer", 94, Rarity.COMMON, mage.cards.t.ThalakosSeer.class)); + cards.add(new SetCardInfo("Thalakos Sentry", 95, Rarity.COMMON, mage.cards.t.ThalakosSentry.class)); + cards.add(new SetCardInfo("Thumbscrews", 312, Rarity.RARE, mage.cards.t.Thumbscrews.class)); + cards.add(new SetCardInfo("Time Ebb", 96, Rarity.COMMON, mage.cards.t.TimeEbb.class)); + cards.add(new SetCardInfo("Time Warp", 97, Rarity.RARE, mage.cards.t.TimeWarp.class)); + cards.add(new SetCardInfo("Tooth and Claw", 210, Rarity.RARE, mage.cards.t.ToothAndClaw.class)); + cards.add(new SetCardInfo("Torture Chamber", 313, Rarity.RARE, mage.cards.t.TortureChamber.class)); + cards.add(new SetCardInfo("Tradewind Rider", 98, Rarity.RARE, mage.cards.t.TradewindRider.class)); + cards.add(new SetCardInfo("Trained Armodon", 260, Rarity.COMMON, mage.cards.t.TrainedArmodon.class)); + cards.add(new SetCardInfo("Tranquility", 261, Rarity.COMMON, mage.cards.t.Tranquility.class)); + cards.add(new SetCardInfo("Trumpeting Armodon", 262, Rarity.UNCOMMON, mage.cards.t.TrumpetingArmodon.class)); + cards.add(new SetCardInfo("Twitch", 99, Rarity.COMMON, mage.cards.t.Twitch.class)); + cards.add(new SetCardInfo("Unstable Shapeshifter", 100, Rarity.RARE, mage.cards.u.UnstableShapeshifter.class)); + cards.add(new SetCardInfo("Vec Townships", 329, Rarity.UNCOMMON, mage.cards.v.VecTownships.class)); + cards.add(new SetCardInfo("Verdant Force", 263, Rarity.RARE, mage.cards.v.VerdantForce.class)); + cards.add(new SetCardInfo("Verdigris", 264, Rarity.UNCOMMON, mage.cards.v.Verdigris.class)); + cards.add(new SetCardInfo("Vhati il-Dal", 274, Rarity.RARE, mage.cards.v.VhatiIlDal.class)); + cards.add(new SetCardInfo("Volrath's Curse", 101, Rarity.COMMON, mage.cards.v.VolrathsCurse.class)); + cards.add(new SetCardInfo("Wall of Diffusion", 211, Rarity.COMMON, mage.cards.w.WallOfDiffusion.class)); + cards.add(new SetCardInfo("Warmth", 51, Rarity.UNCOMMON, mage.cards.w.Warmth.class)); + cards.add(new SetCardInfo("Wasteland", 330, Rarity.UNCOMMON, mage.cards.w.Wasteland.class)); + cards.add(new SetCardInfo("Watchdog", 314, Rarity.UNCOMMON, mage.cards.w.Watchdog.class)); + cards.add(new SetCardInfo("Whispers of the Muse", 103, Rarity.UNCOMMON, mage.cards.w.WhispersOfTheMuse.class)); + cards.add(new SetCardInfo("Wild Wurm", 212, Rarity.UNCOMMON, mage.cards.w.WildWurm.class)); + cards.add(new SetCardInfo("Wind Dancer", 104, Rarity.UNCOMMON, mage.cards.w.WindDancer.class)); + cards.add(new SetCardInfo("Wind Drake", 105, Rarity.COMMON, mage.cards.w.WindDrake.class)); + cards.add(new SetCardInfo("Winds of Rath", 52, Rarity.RARE, mage.cards.w.WindsOfRath.class)); + cards.add(new SetCardInfo("Winged Sliver", 106, Rarity.COMMON, mage.cards.w.WingedSliver.class)); + cards.add(new SetCardInfo("Winter's Grasp", 265, Rarity.UNCOMMON, mage.cards.w.WintersGrasp.class)); + cards.add(new SetCardInfo("Wood Sage", 275, Rarity.RARE, mage.cards.w.WoodSage.class)); + cards.add(new SetCardInfo("Worthy Cause", 53, Rarity.UNCOMMON, mage.cards.w.WorthyCause.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Torment.java b/Mage.Sets/src/mage/sets/Torment.java index 2680b1ba0c5..6ede6aff0a3 100644 --- a/Mage.Sets/src/mage/sets/Torment.java +++ b/Mage.Sets/src/mage/sets/Torment.java @@ -1,170 +1,170 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author North - */ -public final class Torment extends ExpansionSet { - - private static final Torment instance = new Torment(); - - public static Torment getInstance() { - return instance; - } - - private Torment() { - super("Torment", "TOR", ExpansionSet.buildDate(2002, 1, 26), SetType.EXPANSION); - this.blockName = "Odyssey"; - this.parentSet = Odyssey.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Accelerate", 90, Rarity.COMMON, mage.cards.a.Accelerate.class)); - cards.add(new SetCardInfo("Acorn Harvest", 118, Rarity.COMMON, mage.cards.a.AcornHarvest.class)); - cards.add(new SetCardInfo("Ambassador Laquatus", 23, Rarity.RARE, mage.cards.a.AmbassadorLaquatus.class)); - cards.add(new SetCardInfo("Angel of Retribution", 1, Rarity.RARE, mage.cards.a.AngelOfRetribution.class)); - cards.add(new SetCardInfo("Anurid Scavenger", 119, Rarity.UNCOMMON, mage.cards.a.AnuridScavenger.class)); - cards.add(new SetCardInfo("Aquamoeba", 24, Rarity.COMMON, mage.cards.a.Aquamoeba.class)); - cards.add(new SetCardInfo("Arrogant Wurm", 120, Rarity.UNCOMMON, mage.cards.a.ArrogantWurm.class)); - cards.add(new SetCardInfo("Aven Trooper", 2, Rarity.COMMON, mage.cards.a.AvenTrooper.class)); - cards.add(new SetCardInfo("Balshan Collaborator", 25, Rarity.UNCOMMON, mage.cards.b.BalshanCollaborator.class)); - cards.add(new SetCardInfo("Balthor the Stout", 91, Rarity.RARE, mage.cards.b.BalthorTheStout.class)); - cards.add(new SetCardInfo("Barbarian Outcast", 92, Rarity.COMMON, mage.cards.b.BarbarianOutcast.class)); - cards.add(new SetCardInfo("Basking Rootwalla", 121, Rarity.COMMON, mage.cards.b.BaskingRootwalla.class)); - cards.add(new SetCardInfo("Boneshard Slasher", 50, Rarity.UNCOMMON, mage.cards.b.BoneshardSlasher.class)); - cards.add(new SetCardInfo("Breakthrough", 26, Rarity.UNCOMMON, mage.cards.b.Breakthrough.class)); - cards.add(new SetCardInfo("Cabal Coffers", 139, Rarity.UNCOMMON, mage.cards.c.CabalCoffers.class)); - cards.add(new SetCardInfo("Cabal Ritual", 51, Rarity.COMMON, mage.cards.c.CabalRitual.class)); - cards.add(new SetCardInfo("Cabal Surgeon", 52, Rarity.COMMON, mage.cards.c.CabalSurgeon.class)); - cards.add(new SetCardInfo("Cabal Torturer", 53, Rarity.COMMON, mage.cards.c.CabalTorturer.class)); - cards.add(new SetCardInfo("Centaur Chieftain", 122, Rarity.UNCOMMON, mage.cards.c.CentaurChieftain.class)); - cards.add(new SetCardInfo("Centaur Veteran", 123, Rarity.COMMON, mage.cards.c.CentaurVeteran.class)); - cards.add(new SetCardInfo("Cephalid Aristocrat", 27, Rarity.COMMON, mage.cards.c.CephalidAristocrat.class)); - cards.add(new SetCardInfo("Cephalid Illusionist", 28, Rarity.UNCOMMON, mage.cards.c.CephalidIllusionist.class)); - cards.add(new SetCardInfo("Cephalid Sage", 29, Rarity.UNCOMMON, mage.cards.c.CephalidSage.class)); - cards.add(new SetCardInfo("Cephalid Snitch", 30, Rarity.COMMON, mage.cards.c.CephalidSnitch.class)); - cards.add(new SetCardInfo("Cephalid Vandal", 31, Rarity.RARE, mage.cards.c.CephalidVandal.class)); - cards.add(new SetCardInfo("Chainer, Dementia Master", 56, Rarity.RARE, mage.cards.c.ChainerDementiaMaster.class)); - cards.add(new SetCardInfo("Chainer's Edict", 57, Rarity.UNCOMMON, mage.cards.c.ChainersEdict.class)); - cards.add(new SetCardInfo("Churning Eddy", 32, Rarity.COMMON, mage.cards.c.ChurningEddy.class)); - cards.add(new SetCardInfo("Circular Logic", 33, Rarity.UNCOMMON, mage.cards.c.CircularLogic.class)); - cards.add(new SetCardInfo("Cleansing Meditation", 3, Rarity.UNCOMMON, mage.cards.c.CleansingMeditation.class)); - cards.add(new SetCardInfo("Compulsion", 34, Rarity.UNCOMMON, mage.cards.c.Compulsion.class)); - cards.add(new SetCardInfo("Coral Net", 35, Rarity.COMMON, mage.cards.c.CoralNet.class)); - cards.add(new SetCardInfo("Crackling Club", 93, Rarity.COMMON, mage.cards.c.CracklingClub.class)); - cards.add(new SetCardInfo("Crazed Firecat", 94, Rarity.UNCOMMON, mage.cards.c.CrazedFirecat.class)); - cards.add(new SetCardInfo("Crippling Fatigue", 58, Rarity.COMMON, mage.cards.c.CripplingFatigue.class)); - cards.add(new SetCardInfo("Dawn of the Dead", 59, Rarity.RARE, mage.cards.d.DawnOfTheDead.class)); - cards.add(new SetCardInfo("Deep Analysis", 36, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); - cards.add(new SetCardInfo("Devastating Dreams", 95, Rarity.RARE, mage.cards.d.DevastatingDreams.class)); - cards.add(new SetCardInfo("Dwell on the Past", 124, Rarity.UNCOMMON, mage.cards.d.DwellOnThePast.class)); - cards.add(new SetCardInfo("Enslaved Dwarf", 96, Rarity.COMMON, mage.cards.e.EnslavedDwarf.class)); - cards.add(new SetCardInfo("Equal Treatment", 4, Rarity.UNCOMMON, mage.cards.e.EqualTreatment.class)); - cards.add(new SetCardInfo("Faceless Butcher", 60, Rarity.COMMON, mage.cards.f.FacelessButcher.class)); - cards.add(new SetCardInfo("False Memories", 37, Rarity.RARE, mage.cards.f.FalseMemories.class)); - cards.add(new SetCardInfo("Far Wanderings", 125, Rarity.COMMON, mage.cards.f.FarWanderings.class)); - cards.add(new SetCardInfo("Fiery Temper", 97, Rarity.COMMON, mage.cards.f.FieryTemper.class)); - cards.add(new SetCardInfo("Flash of Defiance", 99, Rarity.COMMON, mage.cards.f.FlashOfDefiance.class)); - cards.add(new SetCardInfo("Frantic Purification", 6, Rarity.COMMON, mage.cards.f.FranticPurification.class)); - cards.add(new SetCardInfo("Ghostly Wings", 38, Rarity.COMMON, mage.cards.g.GhostlyWings.class)); - cards.add(new SetCardInfo("Gloomdrifter", 61, Rarity.UNCOMMON, mage.cards.g.Gloomdrifter.class)); - cards.add(new SetCardInfo("Gravegouger", 62, Rarity.COMMON, mage.cards.g.Gravegouger.class)); - cards.add(new SetCardInfo("Grim Lavamancer", 100, Rarity.RARE, mage.cards.g.GrimLavamancer.class)); - cards.add(new SetCardInfo("Grotesque Hybrid", 63, Rarity.UNCOMMON, mage.cards.g.GrotesqueHybrid.class)); - cards.add(new SetCardInfo("Gurzigost", 126, Rarity.RARE, mage.cards.g.Gurzigost.class)); - cards.add(new SetCardInfo("Hell-Bent Raider", 101, Rarity.RARE, mage.cards.h.HellBentRaider.class)); - cards.add(new SetCardInfo("Hydromorph Guardian", 39, Rarity.COMMON, mage.cards.h.HydromorphGuardian.class)); - cards.add(new SetCardInfo("Hydromorph Gull", 40, Rarity.UNCOMMON, mage.cards.h.HydromorphGull.class)); - cards.add(new SetCardInfo("Hypochondria", 7, Rarity.UNCOMMON, mage.cards.h.Hypochondria.class)); - cards.add(new SetCardInfo("Hypnox", 64, Rarity.RARE, mage.cards.h.Hypnox.class)); - cards.add(new SetCardInfo("Ichorid", 65, Rarity.RARE, mage.cards.i.Ichorid.class)); - cards.add(new SetCardInfo("Insidious Dreams", 66, Rarity.RARE, mage.cards.i.InsidiousDreams.class)); - cards.add(new SetCardInfo("Insist", 127, Rarity.RARE, mage.cards.i.Insist.class)); - cards.add(new SetCardInfo("Invigorating Falls", 128, Rarity.COMMON, mage.cards.i.InvigoratingFalls.class)); - cards.add(new SetCardInfo("Kamahl's Sledge", 102, Rarity.COMMON, mage.cards.k.KamahlsSledge.class)); - cards.add(new SetCardInfo("Krosan Constrictor", 129, Rarity.COMMON, mage.cards.k.KrosanConstrictor.class)); - cards.add(new SetCardInfo("Krosan Restorer", 130, Rarity.COMMON, mage.cards.k.KrosanRestorer.class)); - cards.add(new SetCardInfo("Laquatus's Champion", 67, Rarity.RARE, mage.cards.l.LaquatussChampion.class)); - cards.add(new SetCardInfo("Last Laugh", 68, Rarity.RARE, mage.cards.l.LastLaugh.class)); - cards.add(new SetCardInfo("Liquify", 41, Rarity.COMMON, mage.cards.l.Liquify.class)); - cards.add(new SetCardInfo("Llawan, Cephalid Empress", 42, Rarity.RARE, mage.cards.l.LlawanCephalidEmpress.class)); - cards.add(new SetCardInfo("Longhorn Firebeast", 103, Rarity.COMMON, mage.cards.l.LonghornFirebeast.class)); - cards.add(new SetCardInfo("Major Teroh", 8, Rarity.RARE, mage.cards.m.MajorTeroh.class)); - cards.add(new SetCardInfo("Mesmeric Fiend", 69, Rarity.COMMON, mage.cards.m.MesmericFiend.class)); - cards.add(new SetCardInfo("Militant Monk", 9, Rarity.COMMON, mage.cards.m.MilitantMonk.class)); - cards.add(new SetCardInfo("Mind Sludge", 70, Rarity.UNCOMMON, mage.cards.m.MindSludge.class)); - cards.add(new SetCardInfo("Morningtide", 10, Rarity.RARE, mage.cards.m.Morningtide.class)); - cards.add(new SetCardInfo("Mortal Combat", 71, Rarity.RARE, mage.cards.m.MortalCombat.class)); - cards.add(new SetCardInfo("Mortiphobia", 72, Rarity.UNCOMMON, mage.cards.m.Mortiphobia.class)); - cards.add(new SetCardInfo("Mutilate", 73, Rarity.RARE, mage.cards.m.Mutilate.class)); - cards.add(new SetCardInfo("Mystic Familiar", 11, Rarity.COMMON, mage.cards.m.MysticFamiliar.class)); - cards.add(new SetCardInfo("Nantuko Blightcutter", 131, Rarity.RARE, mage.cards.n.NantukoBlightcutter.class)); - cards.add(new SetCardInfo("Nantuko Calmer", 132, Rarity.COMMON, mage.cards.n.NantukoCalmer.class)); - cards.add(new SetCardInfo("Nantuko Cultivator", 133, Rarity.RARE, mage.cards.n.NantukoCultivator.class)); - cards.add(new SetCardInfo("Nantuko Shade", 74, Rarity.RARE, mage.cards.n.NantukoShade.class)); - cards.add(new SetCardInfo("Narcissism", 134, Rarity.UNCOMMON, mage.cards.n.Narcissism.class)); - cards.add(new SetCardInfo("Nostalgic Dreams", 135, Rarity.RARE, mage.cards.n.NostalgicDreams.class)); - cards.add(new SetCardInfo("Obsessive Search", 43, Rarity.COMMON, mage.cards.o.ObsessiveSearch.class)); - cards.add(new SetCardInfo("Organ Grinder", 75, Rarity.COMMON, mage.cards.o.OrganGrinder.class)); - cards.add(new SetCardInfo("Overmaster", 104, Rarity.RARE, mage.cards.o.Overmaster.class)); - cards.add(new SetCardInfo("Parallel Evolution", 136, Rarity.RARE, mage.cards.p.ParallelEvolution.class)); - cards.add(new SetCardInfo("Pardic Arsonist", 105, Rarity.UNCOMMON, mage.cards.p.PardicArsonist.class)); - cards.add(new SetCardInfo("Pardic Collaborator", 106, Rarity.UNCOMMON, mage.cards.p.PardicCollaborator.class)); - cards.add(new SetCardInfo("Pardic Lancer", 107, Rarity.COMMON, mage.cards.p.PardicLancer.class)); - cards.add(new SetCardInfo("Pay No Heed", 12, Rarity.COMMON, mage.cards.p.PayNoHeed.class)); - cards.add(new SetCardInfo("Petradon", 108, Rarity.RARE, mage.cards.p.Petradon.class)); - cards.add(new SetCardInfo("Petravark", 109, Rarity.COMMON, mage.cards.p.Petravark.class)); - cards.add(new SetCardInfo("Pitchstone Wall", 110, Rarity.UNCOMMON, mage.cards.p.PitchstoneWall.class)); - cards.add(new SetCardInfo("Plagiarize", 44, Rarity.RARE, mage.cards.p.Plagiarize.class)); - cards.add(new SetCardInfo("Possessed Aven", 45, Rarity.RARE, mage.cards.p.PossessedAven.class)); - cards.add(new SetCardInfo("Possessed Barbarian", 111, Rarity.RARE, mage.cards.p.PossessedBarbarian.class)); - cards.add(new SetCardInfo("Possessed Centaur", 137, Rarity.RARE, mage.cards.p.PossessedCentaur.class)); - cards.add(new SetCardInfo("Possessed Nomad", 13, Rarity.RARE, mage.cards.p.PossessedNomad.class)); - cards.add(new SetCardInfo("Psychotic Haze", 76, Rarity.COMMON, mage.cards.p.PsychoticHaze.class)); - cards.add(new SetCardInfo("Putrid Imp", 77, Rarity.COMMON, mage.cards.p.PutridImp.class)); - cards.add(new SetCardInfo("Pyromania", 112, Rarity.UNCOMMON, mage.cards.p.Pyromania.class)); - cards.add(new SetCardInfo("Radiate", 113, Rarity.RARE, mage.cards.r.Radiate.class)); - cards.add(new SetCardInfo("Rancid Earth", 78, Rarity.COMMON, mage.cards.r.RancidEarth.class)); - cards.add(new SetCardInfo("Reborn Hero", 14, Rarity.RARE, mage.cards.r.RebornHero.class)); - cards.add(new SetCardInfo("Restless Dreams", 79, Rarity.COMMON, mage.cards.r.RestlessDreams.class)); - cards.add(new SetCardInfo("Retraced Image", 46, Rarity.RARE, mage.cards.r.RetracedImage.class)); - cards.add(new SetCardInfo("Sengir Vampire", 80, Rarity.RARE, mage.cards.s.SengirVampire.class)); - cards.add(new SetCardInfo("Seton's Scout", 138, Rarity.UNCOMMON, mage.cards.s.SetonsScout.class)); - cards.add(new SetCardInfo("Shade's Form", 81, Rarity.COMMON, mage.cards.s.ShadesForm.class)); - cards.add(new SetCardInfo("Shambling Swarm", 82, Rarity.RARE, mage.cards.s.ShamblingSwarm.class)); - cards.add(new SetCardInfo("Sickening Dreams", 83, Rarity.UNCOMMON, mage.cards.s.SickeningDreams.class)); - cards.add(new SetCardInfo("Skullscorch", 114, Rarity.RARE, mage.cards.s.Skullscorch.class)); - cards.add(new SetCardInfo("Skywing Aven", 47, Rarity.COMMON, mage.cards.s.SkywingAven.class)); - cards.add(new SetCardInfo("Slithery Stalker", 84, Rarity.UNCOMMON, mage.cards.s.SlitheryStalker.class)); - cards.add(new SetCardInfo("Sonic Seizure", 115, Rarity.COMMON, mage.cards.s.SonicSeizure.class)); - cards.add(new SetCardInfo("Soul Scourge", 85, Rarity.COMMON, mage.cards.s.SoulScourge.class)); + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author North + */ +public final class Torment extends ExpansionSet { + + private static final Torment instance = new Torment(); + + public static Torment getInstance() { + return instance; + } + + private Torment() { + super("Torment", "TOR", ExpansionSet.buildDate(2002, 1, 26), SetType.EXPANSION); + this.blockName = "Odyssey"; + this.parentSet = Odyssey.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Accelerate", 90, Rarity.COMMON, mage.cards.a.Accelerate.class)); + cards.add(new SetCardInfo("Acorn Harvest", 118, Rarity.COMMON, mage.cards.a.AcornHarvest.class)); + cards.add(new SetCardInfo("Ambassador Laquatus", 23, Rarity.RARE, mage.cards.a.AmbassadorLaquatus.class)); + cards.add(new SetCardInfo("Angel of Retribution", 1, Rarity.RARE, mage.cards.a.AngelOfRetribution.class)); + cards.add(new SetCardInfo("Anurid Scavenger", 119, Rarity.UNCOMMON, mage.cards.a.AnuridScavenger.class)); + cards.add(new SetCardInfo("Aquamoeba", 24, Rarity.COMMON, mage.cards.a.Aquamoeba.class)); + cards.add(new SetCardInfo("Arrogant Wurm", 120, Rarity.UNCOMMON, mage.cards.a.ArrogantWurm.class)); + cards.add(new SetCardInfo("Aven Trooper", 2, Rarity.COMMON, mage.cards.a.AvenTrooper.class)); + cards.add(new SetCardInfo("Balshan Collaborator", 25, Rarity.UNCOMMON, mage.cards.b.BalshanCollaborator.class)); + cards.add(new SetCardInfo("Balthor the Stout", 91, Rarity.RARE, mage.cards.b.BalthorTheStout.class)); + cards.add(new SetCardInfo("Barbarian Outcast", 92, Rarity.COMMON, mage.cards.b.BarbarianOutcast.class)); + cards.add(new SetCardInfo("Basking Rootwalla", 121, Rarity.COMMON, mage.cards.b.BaskingRootwalla.class)); + cards.add(new SetCardInfo("Boneshard Slasher", 50, Rarity.UNCOMMON, mage.cards.b.BoneshardSlasher.class)); + cards.add(new SetCardInfo("Breakthrough", 26, Rarity.UNCOMMON, mage.cards.b.Breakthrough.class)); + cards.add(new SetCardInfo("Cabal Coffers", 139, Rarity.UNCOMMON, mage.cards.c.CabalCoffers.class)); + cards.add(new SetCardInfo("Cabal Ritual", 51, Rarity.COMMON, mage.cards.c.CabalRitual.class)); + cards.add(new SetCardInfo("Cabal Surgeon", 52, Rarity.COMMON, mage.cards.c.CabalSurgeon.class)); + cards.add(new SetCardInfo("Cabal Torturer", 53, Rarity.COMMON, mage.cards.c.CabalTorturer.class)); + cards.add(new SetCardInfo("Centaur Chieftain", 122, Rarity.UNCOMMON, mage.cards.c.CentaurChieftain.class)); + cards.add(new SetCardInfo("Centaur Veteran", 123, Rarity.COMMON, mage.cards.c.CentaurVeteran.class)); + cards.add(new SetCardInfo("Cephalid Aristocrat", 27, Rarity.COMMON, mage.cards.c.CephalidAristocrat.class)); + cards.add(new SetCardInfo("Cephalid Illusionist", 28, Rarity.UNCOMMON, mage.cards.c.CephalidIllusionist.class)); + cards.add(new SetCardInfo("Cephalid Sage", 29, Rarity.UNCOMMON, mage.cards.c.CephalidSage.class)); + cards.add(new SetCardInfo("Cephalid Snitch", 30, Rarity.COMMON, mage.cards.c.CephalidSnitch.class)); + cards.add(new SetCardInfo("Cephalid Vandal", 31, Rarity.RARE, mage.cards.c.CephalidVandal.class)); + cards.add(new SetCardInfo("Chainer, Dementia Master", 56, Rarity.RARE, mage.cards.c.ChainerDementiaMaster.class)); + cards.add(new SetCardInfo("Chainer's Edict", 57, Rarity.UNCOMMON, mage.cards.c.ChainersEdict.class)); + cards.add(new SetCardInfo("Churning Eddy", 32, Rarity.COMMON, mage.cards.c.ChurningEddy.class)); + cards.add(new SetCardInfo("Circular Logic", 33, Rarity.UNCOMMON, mage.cards.c.CircularLogic.class)); + cards.add(new SetCardInfo("Cleansing Meditation", 3, Rarity.UNCOMMON, mage.cards.c.CleansingMeditation.class)); + cards.add(new SetCardInfo("Compulsion", 34, Rarity.UNCOMMON, mage.cards.c.Compulsion.class)); + cards.add(new SetCardInfo("Coral Net", 35, Rarity.COMMON, mage.cards.c.CoralNet.class)); + cards.add(new SetCardInfo("Crackling Club", 93, Rarity.COMMON, mage.cards.c.CracklingClub.class)); + cards.add(new SetCardInfo("Crazed Firecat", 94, Rarity.UNCOMMON, mage.cards.c.CrazedFirecat.class)); + cards.add(new SetCardInfo("Crippling Fatigue", 58, Rarity.COMMON, mage.cards.c.CripplingFatigue.class)); + cards.add(new SetCardInfo("Dawn of the Dead", 59, Rarity.RARE, mage.cards.d.DawnOfTheDead.class)); + cards.add(new SetCardInfo("Deep Analysis", 36, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); + cards.add(new SetCardInfo("Devastating Dreams", 95, Rarity.RARE, mage.cards.d.DevastatingDreams.class)); + cards.add(new SetCardInfo("Dwell on the Past", 124, Rarity.UNCOMMON, mage.cards.d.DwellOnThePast.class)); + cards.add(new SetCardInfo("Enslaved Dwarf", 96, Rarity.COMMON, mage.cards.e.EnslavedDwarf.class)); + cards.add(new SetCardInfo("Equal Treatment", 4, Rarity.UNCOMMON, mage.cards.e.EqualTreatment.class)); + cards.add(new SetCardInfo("Faceless Butcher", 60, Rarity.COMMON, mage.cards.f.FacelessButcher.class)); + cards.add(new SetCardInfo("False Memories", 37, Rarity.RARE, mage.cards.f.FalseMemories.class)); + cards.add(new SetCardInfo("Far Wanderings", 125, Rarity.COMMON, mage.cards.f.FarWanderings.class)); + cards.add(new SetCardInfo("Fiery Temper", 97, Rarity.COMMON, mage.cards.f.FieryTemper.class)); + cards.add(new SetCardInfo("Flash of Defiance", 99, Rarity.COMMON, mage.cards.f.FlashOfDefiance.class)); + cards.add(new SetCardInfo("Frantic Purification", 6, Rarity.COMMON, mage.cards.f.FranticPurification.class)); + cards.add(new SetCardInfo("Ghostly Wings", 38, Rarity.COMMON, mage.cards.g.GhostlyWings.class)); + cards.add(new SetCardInfo("Gloomdrifter", 61, Rarity.UNCOMMON, mage.cards.g.Gloomdrifter.class)); + cards.add(new SetCardInfo("Gravegouger", 62, Rarity.COMMON, mage.cards.g.Gravegouger.class)); + cards.add(new SetCardInfo("Grim Lavamancer", 100, Rarity.RARE, mage.cards.g.GrimLavamancer.class)); + cards.add(new SetCardInfo("Grotesque Hybrid", 63, Rarity.UNCOMMON, mage.cards.g.GrotesqueHybrid.class)); + cards.add(new SetCardInfo("Gurzigost", 126, Rarity.RARE, mage.cards.g.Gurzigost.class)); + cards.add(new SetCardInfo("Hell-Bent Raider", 101, Rarity.RARE, mage.cards.h.HellBentRaider.class)); + cards.add(new SetCardInfo("Hydromorph Guardian", 39, Rarity.COMMON, mage.cards.h.HydromorphGuardian.class)); + cards.add(new SetCardInfo("Hydromorph Gull", 40, Rarity.UNCOMMON, mage.cards.h.HydromorphGull.class)); + cards.add(new SetCardInfo("Hypochondria", 7, Rarity.UNCOMMON, mage.cards.h.Hypochondria.class)); + cards.add(new SetCardInfo("Hypnox", 64, Rarity.RARE, mage.cards.h.Hypnox.class)); + cards.add(new SetCardInfo("Ichorid", 65, Rarity.RARE, mage.cards.i.Ichorid.class)); + cards.add(new SetCardInfo("Insidious Dreams", 66, Rarity.RARE, mage.cards.i.InsidiousDreams.class)); + cards.add(new SetCardInfo("Insist", 127, Rarity.RARE, mage.cards.i.Insist.class)); + cards.add(new SetCardInfo("Invigorating Falls", 128, Rarity.COMMON, mage.cards.i.InvigoratingFalls.class)); + cards.add(new SetCardInfo("Kamahl's Sledge", 102, Rarity.COMMON, mage.cards.k.KamahlsSledge.class)); + cards.add(new SetCardInfo("Krosan Constrictor", 129, Rarity.COMMON, mage.cards.k.KrosanConstrictor.class)); + cards.add(new SetCardInfo("Krosan Restorer", 130, Rarity.COMMON, mage.cards.k.KrosanRestorer.class)); + cards.add(new SetCardInfo("Laquatus's Champion", 67, Rarity.RARE, mage.cards.l.LaquatussChampion.class)); + cards.add(new SetCardInfo("Last Laugh", 68, Rarity.RARE, mage.cards.l.LastLaugh.class)); + cards.add(new SetCardInfo("Liquify", 41, Rarity.COMMON, mage.cards.l.Liquify.class)); + cards.add(new SetCardInfo("Llawan, Cephalid Empress", 42, Rarity.RARE, mage.cards.l.LlawanCephalidEmpress.class)); + cards.add(new SetCardInfo("Longhorn Firebeast", 103, Rarity.COMMON, mage.cards.l.LonghornFirebeast.class)); + cards.add(new SetCardInfo("Major Teroh", 8, Rarity.RARE, mage.cards.m.MajorTeroh.class)); + cards.add(new SetCardInfo("Mesmeric Fiend", 69, Rarity.COMMON, mage.cards.m.MesmericFiend.class)); + cards.add(new SetCardInfo("Militant Monk", 9, Rarity.COMMON, mage.cards.m.MilitantMonk.class)); + cards.add(new SetCardInfo("Mind Sludge", 70, Rarity.UNCOMMON, mage.cards.m.MindSludge.class)); + cards.add(new SetCardInfo("Morningtide", 10, Rarity.RARE, mage.cards.m.Morningtide.class)); + cards.add(new SetCardInfo("Mortal Combat", 71, Rarity.RARE, mage.cards.m.MortalCombat.class)); + cards.add(new SetCardInfo("Mortiphobia", 72, Rarity.UNCOMMON, mage.cards.m.Mortiphobia.class)); + cards.add(new SetCardInfo("Mutilate", 73, Rarity.RARE, mage.cards.m.Mutilate.class)); + cards.add(new SetCardInfo("Mystic Familiar", 11, Rarity.COMMON, mage.cards.m.MysticFamiliar.class)); + cards.add(new SetCardInfo("Nantuko Blightcutter", 131, Rarity.RARE, mage.cards.n.NantukoBlightcutter.class)); + cards.add(new SetCardInfo("Nantuko Calmer", 132, Rarity.COMMON, mage.cards.n.NantukoCalmer.class)); + cards.add(new SetCardInfo("Nantuko Cultivator", 133, Rarity.RARE, mage.cards.n.NantukoCultivator.class)); + cards.add(new SetCardInfo("Nantuko Shade", 74, Rarity.RARE, mage.cards.n.NantukoShade.class)); + cards.add(new SetCardInfo("Narcissism", 134, Rarity.UNCOMMON, mage.cards.n.Narcissism.class)); + cards.add(new SetCardInfo("Nostalgic Dreams", 135, Rarity.RARE, mage.cards.n.NostalgicDreams.class)); + cards.add(new SetCardInfo("Obsessive Search", 43, Rarity.COMMON, mage.cards.o.ObsessiveSearch.class)); + cards.add(new SetCardInfo("Organ Grinder", 75, Rarity.COMMON, mage.cards.o.OrganGrinder.class)); + cards.add(new SetCardInfo("Overmaster", 104, Rarity.RARE, mage.cards.o.Overmaster.class)); + cards.add(new SetCardInfo("Parallel Evolution", 136, Rarity.RARE, mage.cards.p.ParallelEvolution.class)); + cards.add(new SetCardInfo("Pardic Arsonist", 105, Rarity.UNCOMMON, mage.cards.p.PardicArsonist.class)); + cards.add(new SetCardInfo("Pardic Collaborator", 106, Rarity.UNCOMMON, mage.cards.p.PardicCollaborator.class)); + cards.add(new SetCardInfo("Pardic Lancer", 107, Rarity.COMMON, mage.cards.p.PardicLancer.class)); + cards.add(new SetCardInfo("Pay No Heed", 12, Rarity.COMMON, mage.cards.p.PayNoHeed.class)); + cards.add(new SetCardInfo("Petradon", 108, Rarity.RARE, mage.cards.p.Petradon.class)); + cards.add(new SetCardInfo("Petravark", 109, Rarity.COMMON, mage.cards.p.Petravark.class)); + cards.add(new SetCardInfo("Pitchstone Wall", 110, Rarity.UNCOMMON, mage.cards.p.PitchstoneWall.class)); + cards.add(new SetCardInfo("Plagiarize", 44, Rarity.RARE, mage.cards.p.Plagiarize.class)); + cards.add(new SetCardInfo("Possessed Aven", 45, Rarity.RARE, mage.cards.p.PossessedAven.class)); + cards.add(new SetCardInfo("Possessed Barbarian", 111, Rarity.RARE, mage.cards.p.PossessedBarbarian.class)); + cards.add(new SetCardInfo("Possessed Centaur", 137, Rarity.RARE, mage.cards.p.PossessedCentaur.class)); + cards.add(new SetCardInfo("Possessed Nomad", 13, Rarity.RARE, mage.cards.p.PossessedNomad.class)); + cards.add(new SetCardInfo("Psychotic Haze", 76, Rarity.COMMON, mage.cards.p.PsychoticHaze.class)); + cards.add(new SetCardInfo("Putrid Imp", 77, Rarity.COMMON, mage.cards.p.PutridImp.class)); + cards.add(new SetCardInfo("Pyromania", 112, Rarity.UNCOMMON, mage.cards.p.Pyromania.class)); + cards.add(new SetCardInfo("Radiate", 113, Rarity.RARE, mage.cards.r.Radiate.class)); + cards.add(new SetCardInfo("Rancid Earth", 78, Rarity.COMMON, mage.cards.r.RancidEarth.class)); + cards.add(new SetCardInfo("Reborn Hero", 14, Rarity.RARE, mage.cards.r.RebornHero.class)); + cards.add(new SetCardInfo("Restless Dreams", 79, Rarity.COMMON, mage.cards.r.RestlessDreams.class)); + cards.add(new SetCardInfo("Retraced Image", 46, Rarity.RARE, mage.cards.r.RetracedImage.class)); + cards.add(new SetCardInfo("Sengir Vampire", 80, Rarity.RARE, mage.cards.s.SengirVampire.class)); + cards.add(new SetCardInfo("Seton's Scout", 138, Rarity.UNCOMMON, mage.cards.s.SetonsScout.class)); + cards.add(new SetCardInfo("Shade's Form", 81, Rarity.COMMON, mage.cards.s.ShadesForm.class)); + cards.add(new SetCardInfo("Shambling Swarm", 82, Rarity.RARE, mage.cards.s.ShamblingSwarm.class)); + cards.add(new SetCardInfo("Sickening Dreams", 83, Rarity.UNCOMMON, mage.cards.s.SickeningDreams.class)); + cards.add(new SetCardInfo("Skullscorch", 114, Rarity.RARE, mage.cards.s.Skullscorch.class)); + cards.add(new SetCardInfo("Skywing Aven", 47, Rarity.COMMON, mage.cards.s.SkywingAven.class)); + cards.add(new SetCardInfo("Slithery Stalker", 84, Rarity.UNCOMMON, mage.cards.s.SlitheryStalker.class)); + cards.add(new SetCardInfo("Sonic Seizure", 115, Rarity.COMMON, mage.cards.s.SonicSeizure.class)); + cards.add(new SetCardInfo("Soul Scourge", 85, Rarity.COMMON, mage.cards.s.SoulScourge.class)); cards.add(new SetCardInfo("Spirit Flare", 15, Rarity.COMMON, mage.cards.s.SpiritFlare.class)); - cards.add(new SetCardInfo("Stern Judge", 16, Rarity.UNCOMMON, mage.cards.s.SternJudge.class)); - cards.add(new SetCardInfo("Strength of Isolation", 17, Rarity.UNCOMMON, mage.cards.s.StrengthOfIsolation.class)); - cards.add(new SetCardInfo("Strength of Lunacy", 86, Rarity.UNCOMMON, mage.cards.s.StrengthOfLunacy.class)); - cards.add(new SetCardInfo("Stupefying Touch", 48, Rarity.UNCOMMON, mage.cards.s.StupefyingTouch.class)); - cards.add(new SetCardInfo("Tainted Field", 140, Rarity.UNCOMMON, mage.cards.t.TaintedField.class)); - cards.add(new SetCardInfo("Tainted Isle", 141, Rarity.UNCOMMON, mage.cards.t.TaintedIsle.class)); - cards.add(new SetCardInfo("Tainted Peak", 142, Rarity.UNCOMMON, mage.cards.t.TaintedPeak.class)); - cards.add(new SetCardInfo("Tainted Wood", 143, Rarity.UNCOMMON, mage.cards.t.TaintedWood.class)); - cards.add(new SetCardInfo("Temporary Insanity", 116, Rarity.UNCOMMON, mage.cards.t.TemporaryInsanity.class)); - cards.add(new SetCardInfo("Teroh's Faithful", 18, Rarity.COMMON, mage.cards.t.TerohsFaithful.class)); - cards.add(new SetCardInfo("Teroh's Vanguard", 19, Rarity.UNCOMMON, mage.cards.t.TerohsVanguard.class)); - cards.add(new SetCardInfo("Transcendence", 20, Rarity.RARE, mage.cards.t.Transcendence.class)); - cards.add(new SetCardInfo("Turbulent Dreams", 49, Rarity.RARE, mage.cards.t.TurbulentDreams.class)); - cards.add(new SetCardInfo("Unhinge", 87, Rarity.COMMON, mage.cards.u.Unhinge.class)); - cards.add(new SetCardInfo("Vengeful Dreams", 21, Rarity.RARE, mage.cards.v.VengefulDreams.class)); - cards.add(new SetCardInfo("Violent Eruption", 117, Rarity.UNCOMMON, mage.cards.v.ViolentEruption.class)); - cards.add(new SetCardInfo("Waste Away", 88, Rarity.COMMON, mage.cards.w.WasteAway.class)); - cards.add(new SetCardInfo("Zombie Trailblazer", 89, Rarity.UNCOMMON, mage.cards.z.ZombieTrailblazer.class)); - } -} + cards.add(new SetCardInfo("Stern Judge", 16, Rarity.UNCOMMON, mage.cards.s.SternJudge.class)); + cards.add(new SetCardInfo("Strength of Isolation", 17, Rarity.UNCOMMON, mage.cards.s.StrengthOfIsolation.class)); + cards.add(new SetCardInfo("Strength of Lunacy", 86, Rarity.UNCOMMON, mage.cards.s.StrengthOfLunacy.class)); + cards.add(new SetCardInfo("Stupefying Touch", 48, Rarity.UNCOMMON, mage.cards.s.StupefyingTouch.class)); + cards.add(new SetCardInfo("Tainted Field", 140, Rarity.UNCOMMON, mage.cards.t.TaintedField.class)); + cards.add(new SetCardInfo("Tainted Isle", 141, Rarity.UNCOMMON, mage.cards.t.TaintedIsle.class)); + cards.add(new SetCardInfo("Tainted Peak", 142, Rarity.UNCOMMON, mage.cards.t.TaintedPeak.class)); + cards.add(new SetCardInfo("Tainted Wood", 143, Rarity.UNCOMMON, mage.cards.t.TaintedWood.class)); + cards.add(new SetCardInfo("Temporary Insanity", 116, Rarity.UNCOMMON, mage.cards.t.TemporaryInsanity.class)); + cards.add(new SetCardInfo("Teroh's Faithful", 18, Rarity.COMMON, mage.cards.t.TerohsFaithful.class)); + cards.add(new SetCardInfo("Teroh's Vanguard", 19, Rarity.UNCOMMON, mage.cards.t.TerohsVanguard.class)); + cards.add(new SetCardInfo("Transcendence", 20, Rarity.RARE, mage.cards.t.Transcendence.class)); + cards.add(new SetCardInfo("Turbulent Dreams", 49, Rarity.RARE, mage.cards.t.TurbulentDreams.class)); + cards.add(new SetCardInfo("Unhinge", 87, Rarity.COMMON, mage.cards.u.Unhinge.class)); + cards.add(new SetCardInfo("Vengeful Dreams", 21, Rarity.RARE, mage.cards.v.VengefulDreams.class)); + cards.add(new SetCardInfo("Violent Eruption", 117, Rarity.UNCOMMON, mage.cards.v.ViolentEruption.class)); + cards.add(new SetCardInfo("Waste Away", 88, Rarity.COMMON, mage.cards.w.WasteAway.class)); + cards.add(new SetCardInfo("Zombie Trailblazer", 89, Rarity.UNCOMMON, mage.cards.z.ZombieTrailblazer.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/UrzasDestiny.java b/Mage.Sets/src/mage/sets/UrzasDestiny.java index aae8ca309c2..93a6023a2e6 100644 --- a/Mage.Sets/src/mage/sets/UrzasDestiny.java +++ b/Mage.Sets/src/mage/sets/UrzasDestiny.java @@ -1,175 +1,175 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author Backfir3 - */ -public final class UrzasDestiny extends ExpansionSet { - - private static final UrzasDestiny instance = new UrzasDestiny(); - - public static UrzasDestiny getInstance() { - return instance; - } - - private UrzasDestiny() { - super("Urza's Destiny", "UDS", ExpansionSet.buildDate(1999, 6, 7), SetType.EXPANSION); - this.blockName = "Urza"; - this.parentSet = UrzasSaga.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Academy Rector", 1, Rarity.RARE, mage.cards.a.AcademyRector.class)); - cards.add(new SetCardInfo("Aether Sting", 76, Rarity.UNCOMMON, mage.cards.a.AetherSting.class)); - cards.add(new SetCardInfo("Ancient Silverback", 101, Rarity.RARE, mage.cards.a.AncientSilverback.class)); - cards.add(new SetCardInfo("Apprentice Necromancer", 51, Rarity.RARE, mage.cards.a.ApprenticeNecromancer.class)); - cards.add(new SetCardInfo("Archery Training", 2, Rarity.UNCOMMON, mage.cards.a.ArcheryTraining.class)); - cards.add(new SetCardInfo("Attrition", 52, Rarity.RARE, mage.cards.a.Attrition.class)); - cards.add(new SetCardInfo("Aura Thief", 26, Rarity.RARE, mage.cards.a.AuraThief.class)); - cards.add(new SetCardInfo("Blizzard Elemental", 27, Rarity.RARE, mage.cards.b.BlizzardElemental.class)); - cards.add(new SetCardInfo("Bloodshot Cyclops", 77, Rarity.RARE, mage.cards.b.BloodshotCyclops.class)); - cards.add(new SetCardInfo("Body Snatcher", 53, Rarity.RARE, mage.cards.b.BodySnatcher.class)); - cards.add(new SetCardInfo("Braidwood Cup", 126, Rarity.UNCOMMON, mage.cards.b.BraidwoodCup.class)); - cards.add(new SetCardInfo("Braidwood Sextant", 127, Rarity.UNCOMMON, mage.cards.b.BraidwoodSextant.class)); - cards.add(new SetCardInfo("Brass Secretary", 128, Rarity.UNCOMMON, mage.cards.b.BrassSecretary.class)); - cards.add(new SetCardInfo("Brine Seer", 28, Rarity.UNCOMMON, mage.cards.b.BrineSeer.class)); - cards.add(new SetCardInfo("Bubbling Beebles", 29, Rarity.COMMON, mage.cards.b.BubblingBeebles.class)); - cards.add(new SetCardInfo("Bubbling Muck", 54, Rarity.COMMON, mage.cards.b.BubblingMuck.class)); - cards.add(new SetCardInfo("Caltrops", 129, Rarity.UNCOMMON, mage.cards.c.Caltrops.class)); - cards.add(new SetCardInfo("Capashen Knight", 3, Rarity.COMMON, mage.cards.c.CapashenKnight.class)); - cards.add(new SetCardInfo("Capashen Standard", 4, Rarity.COMMON, mage.cards.c.CapashenStandard.class)); - cards.add(new SetCardInfo("Capashen Templar", 5, Rarity.COMMON, mage.cards.c.CapashenTemplar.class)); - cards.add(new SetCardInfo("Carnival of Souls", 55, Rarity.RARE, mage.cards.c.CarnivalOfSouls.class)); - cards.add(new SetCardInfo("Chime of Night", 56, Rarity.COMMON, mage.cards.c.ChimeOfNight.class)); - cards.add(new SetCardInfo("Cinder Seer", 78, Rarity.UNCOMMON, mage.cards.c.CinderSeer.class)); - cards.add(new SetCardInfo("Colos Yearling", 79, Rarity.COMMON, mage.cards.c.ColosYearling.class)); - cards.add(new SetCardInfo("Compost", 102, Rarity.UNCOMMON, mage.cards.c.Compost.class)); - cards.add(new SetCardInfo("Covetous Dragon", 80, Rarity.RARE, mage.cards.c.CovetousDragon.class)); - cards.add(new SetCardInfo("Disappear", 30, Rarity.UNCOMMON, mage.cards.d.Disappear.class)); - cards.add(new SetCardInfo("Disease Carriers", 57, Rarity.COMMON, mage.cards.d.DiseaseCarriers.class)); - cards.add(new SetCardInfo("Donate", 31, Rarity.RARE, mage.cards.d.Donate.class)); - cards.add(new SetCardInfo("Dying Wail", 58, Rarity.COMMON, mage.cards.d.DyingWail.class)); - cards.add(new SetCardInfo("Elvish Lookout", 103, Rarity.COMMON, mage.cards.e.ElvishLookout.class)); - cards.add(new SetCardInfo("Elvish Piper", 104, Rarity.RARE, mage.cards.e.ElvishPiper.class)); - cards.add(new SetCardInfo("Emperor Crocodile", 105, Rarity.RARE, mage.cards.e.EmperorCrocodile.class)); - cards.add(new SetCardInfo("Encroach", 59, Rarity.UNCOMMON, mage.cards.e.Encroach.class)); - cards.add(new SetCardInfo("Eradicate", 60, Rarity.UNCOMMON, mage.cards.e.Eradicate.class)); - cards.add(new SetCardInfo("Extruder", 130, Rarity.UNCOMMON, mage.cards.e.Extruder.class)); - cards.add(new SetCardInfo("False Prophet", 6, Rarity.RARE, mage.cards.f.FalseProphet.class)); - cards.add(new SetCardInfo("Fatigue", 32, Rarity.COMMON, mage.cards.f.Fatigue.class)); - cards.add(new SetCardInfo("Fend Off", 7, Rarity.COMMON, mage.cards.f.FendOff.class)); - cards.add(new SetCardInfo("Festering Wound", 61, Rarity.UNCOMMON, mage.cards.f.FesteringWound.class)); - cards.add(new SetCardInfo("Field Surgeon", 8, Rarity.COMMON, mage.cards.f.FieldSurgeon.class)); - cards.add(new SetCardInfo("Flame Jet", 81, Rarity.COMMON, mage.cards.f.FlameJet.class)); - cards.add(new SetCardInfo("Fledgling Osprey", 33, Rarity.COMMON, mage.cards.f.FledglingOsprey.class)); - cards.add(new SetCardInfo("Flicker", 9, Rarity.RARE, mage.cards.f.Flicker.class)); - cards.add(new SetCardInfo("Fodder Cannon", 131, Rarity.UNCOMMON, mage.cards.f.FodderCannon.class)); - cards.add(new SetCardInfo("Gamekeeper", 106, Rarity.UNCOMMON, mage.cards.g.Gamekeeper.class)); - cards.add(new SetCardInfo("Goblin Berserker", 82, Rarity.UNCOMMON, mage.cards.g.GoblinBerserker.class)); - cards.add(new SetCardInfo("Goblin Festival", 83, Rarity.RARE, mage.cards.g.GoblinFestival.class)); - cards.add(new SetCardInfo("Goblin Gardener", 84, Rarity.COMMON, mage.cards.g.GoblinGardener.class)); - cards.add(new SetCardInfo("Goblin Marshal", 85, Rarity.RARE, mage.cards.g.GoblinMarshal.class)); - cards.add(new SetCardInfo("Goblin Masons", 86, Rarity.COMMON, mage.cards.g.GoblinMasons.class)); - cards.add(new SetCardInfo("Goliath Beetle", 107, Rarity.COMMON, mage.cards.g.GoliathBeetle.class)); - cards.add(new SetCardInfo("Heart Warden", 108, Rarity.COMMON, mage.cards.h.HeartWarden.class)); - cards.add(new SetCardInfo("Hulking Ogre", 87, Rarity.COMMON, mage.cards.h.HulkingOgre.class)); - cards.add(new SetCardInfo("Hunting Moa", 109, Rarity.UNCOMMON, mage.cards.h.HuntingMoa.class)); - cards.add(new SetCardInfo("Illuminated Wings", 34, Rarity.COMMON, mage.cards.i.IlluminatedWings.class)); - cards.add(new SetCardInfo("Impatience", 88, Rarity.RARE, mage.cards.i.Impatience.class)); - cards.add(new SetCardInfo("Incendiary", 89, Rarity.UNCOMMON, mage.cards.i.Incendiary.class)); - cards.add(new SetCardInfo("Iridescent Drake", 35, Rarity.UNCOMMON, mage.cards.i.IridescentDrake.class)); - cards.add(new SetCardInfo("Ivy Seer", 110, Rarity.UNCOMMON, mage.cards.i.IvySeer.class)); - cards.add(new SetCardInfo("Jasmine Seer", 10, Rarity.UNCOMMON, mage.cards.j.JasmineSeer.class)); - cards.add(new SetCardInfo("Junk Diver", 132, Rarity.RARE, mage.cards.j.JunkDiver.class)); - cards.add(new SetCardInfo("Keldon Champion", 90, Rarity.UNCOMMON, mage.cards.k.KeldonChampion.class)); - cards.add(new SetCardInfo("Keldon Vandals", 91, Rarity.COMMON, mage.cards.k.KeldonVandals.class)); - cards.add(new SetCardInfo("Kingfisher", 36, Rarity.COMMON, mage.cards.k.Kingfisher.class)); - cards.add(new SetCardInfo("Landslide", 92, Rarity.UNCOMMON, mage.cards.l.Landslide.class)); - cards.add(new SetCardInfo("Lurking Jackals", 62, Rarity.UNCOMMON, mage.cards.l.LurkingJackals.class)); - cards.add(new SetCardInfo("Magnify", 111, Rarity.COMMON, mage.cards.m.Magnify.class)); - cards.add(new SetCardInfo("Mantis Engine", 133, Rarity.UNCOMMON, mage.cards.m.MantisEngine.class)); - cards.add(new SetCardInfo("Marker Beetles", 112, Rarity.COMMON, mage.cards.m.MarkerBeetles.class)); - cards.add(new SetCardInfo("Mark of Fury", 93, Rarity.COMMON, mage.cards.m.MarkOfFury.class)); - cards.add(new SetCardInfo("Mask of Law and Grace", 11, Rarity.COMMON, mage.cards.m.MaskOfLawAndGrace.class)); - cards.add(new SetCardInfo("Master Healer", 12, Rarity.RARE, mage.cards.m.MasterHealer.class)); - cards.add(new SetCardInfo("Masticore", 134, Rarity.RARE, mage.cards.m.Masticore.class)); - cards.add(new SetCardInfo("Mental Discipline", 37, Rarity.COMMON, mage.cards.m.MentalDiscipline.class)); - cards.add(new SetCardInfo("Metalworker", 135, Rarity.RARE, mage.cards.m.Metalworker.class)); - cards.add(new SetCardInfo("Metathran Elite", 38, Rarity.UNCOMMON, mage.cards.m.MetathranElite.class)); - cards.add(new SetCardInfo("Metathran Soldier", 39, Rarity.COMMON, mage.cards.m.MetathranSoldier.class)); - cards.add(new SetCardInfo("Momentum", 113, Rarity.UNCOMMON, mage.cards.m.Momentum.class)); - cards.add(new SetCardInfo("Multani's Decree", 114, Rarity.COMMON, mage.cards.m.MultanisDecree.class)); - cards.add(new SetCardInfo("Nightshade Seer", 63, Rarity.UNCOMMON, mage.cards.n.NightshadeSeer.class)); - cards.add(new SetCardInfo("Opalescence", 13, Rarity.RARE, mage.cards.o.Opalescence.class)); - cards.add(new SetCardInfo("Opposition", 40, Rarity.RARE, mage.cards.o.Opposition.class)); - cards.add(new SetCardInfo("Pattern of Rebirth", 115, Rarity.RARE, mage.cards.p.PatternOfRebirth.class)); - cards.add(new SetCardInfo("Phyrexian Monitor", 64, Rarity.COMMON, mage.cards.p.PhyrexianMonitor.class)); - cards.add(new SetCardInfo("Phyrexian Negator", 65, Rarity.RARE, mage.cards.p.PhyrexianNegator.class)); - cards.add(new SetCardInfo("Plague Dogs", 66, Rarity.UNCOMMON, mage.cards.p.PlagueDogs.class)); - cards.add(new SetCardInfo("Plated Spider", 116, Rarity.COMMON, mage.cards.p.PlatedSpider.class)); - cards.add(new SetCardInfo("Plow Under", 117, Rarity.RARE, mage.cards.p.PlowUnder.class)); - cards.add(new SetCardInfo("Powder Keg", 136, Rarity.RARE, mage.cards.p.PowderKeg.class)); - cards.add(new SetCardInfo("Private Research", 41, Rarity.UNCOMMON, mage.cards.p.PrivateResearch.class)); - cards.add(new SetCardInfo("Quash", 42, Rarity.UNCOMMON, mage.cards.q.Quash.class)); - cards.add(new SetCardInfo("Rapid Decay", 67, Rarity.RARE, mage.cards.r.RapidDecay.class)); - cards.add(new SetCardInfo("Ravenous Rats", 68, Rarity.COMMON, mage.cards.r.RavenousRats.class)); - cards.add(new SetCardInfo("Rayne, Academy Chancellor", 43, Rarity.RARE, mage.cards.r.RayneAcademyChancellor.class)); - cards.add(new SetCardInfo("Reckless Abandon", 94, Rarity.COMMON, mage.cards.r.RecklessAbandon.class)); - cards.add(new SetCardInfo("Reliquary Monk", 14, Rarity.COMMON, mage.cards.r.ReliquaryMonk.class)); - cards.add(new SetCardInfo("Repercussion", 95, Rarity.RARE, mage.cards.r.Repercussion.class)); - cards.add(new SetCardInfo("Replenish", 15, Rarity.RARE, mage.cards.r.Replenish.class)); - cards.add(new SetCardInfo("Rescue", 44, Rarity.COMMON, mage.cards.r.Rescue.class)); - cards.add(new SetCardInfo("Rofellos's Gift", 119, Rarity.COMMON, mage.cards.r.RofellossGift.class)); - cards.add(new SetCardInfo("Rofellos, Llanowar Emissary", 118, Rarity.RARE, mage.cards.r.RofellosLlanowarEmissary.class)); - cards.add(new SetCardInfo("Sanctimony", 16, Rarity.UNCOMMON, mage.cards.s.Sanctimony.class)); - cards.add(new SetCardInfo("Scent of Brine", 45, Rarity.COMMON, mage.cards.s.ScentOfBrine.class)); - cards.add(new SetCardInfo("Scent of Cinder", 96, Rarity.COMMON, mage.cards.s.ScentOfCinder.class)); - cards.add(new SetCardInfo("Scent of Ivy", 120, Rarity.COMMON, mage.cards.s.ScentOfIvy.class)); - cards.add(new SetCardInfo("Scent of Jasmine", 17, Rarity.COMMON, mage.cards.s.ScentOfJasmine.class)); - cards.add(new SetCardInfo("Scent of Nightshade", 69, Rarity.COMMON, mage.cards.s.ScentOfNightshade.class)); - cards.add(new SetCardInfo("Scour", 18, Rarity.UNCOMMON, mage.cards.s.Scour.class)); - cards.add(new SetCardInfo("Scrying Glass", 137, Rarity.RARE, mage.cards.s.ScryingGlass.class)); - cards.add(new SetCardInfo("Serra Advocate", 19, Rarity.UNCOMMON, mage.cards.s.SerraAdvocate.class)); - cards.add(new SetCardInfo("Sigil of Sleep", 46, Rarity.COMMON, mage.cards.s.SigilOfSleep.class)); - cards.add(new SetCardInfo("Skittering Horror", 70, Rarity.COMMON, mage.cards.s.SkitteringHorror.class)); - cards.add(new SetCardInfo("Slinking Skirge", 71, Rarity.COMMON, mage.cards.s.SlinkingSkirge.class)); - cards.add(new SetCardInfo("Solidarity", 20, Rarity.COMMON, mage.cards.s.Solidarity.class)); - cards.add(new SetCardInfo("Soul Feast", 72, Rarity.UNCOMMON, mage.cards.s.SoulFeast.class)); - cards.add(new SetCardInfo("Sowing Salt", 97, Rarity.UNCOMMON, mage.cards.s.SowingSalt.class)); - cards.add(new SetCardInfo("Splinter", 121, Rarity.UNCOMMON, mage.cards.s.Splinter.class)); - cards.add(new SetCardInfo("Squirming Mass", 73, Rarity.COMMON, mage.cards.s.SquirmingMass.class)); - cards.add(new SetCardInfo("Storage Matrix", 138, Rarity.RARE, mage.cards.s.StorageMatrix.class)); - cards.add(new SetCardInfo("Taunting Elf", 122, Rarity.COMMON, mage.cards.t.TauntingElf.class)); - cards.add(new SetCardInfo("Telepathic Spies", 47, Rarity.COMMON, mage.cards.t.TelepathicSpies.class)); - cards.add(new SetCardInfo("Temporal Adept", 48, Rarity.RARE, mage.cards.t.TemporalAdept.class)); - cards.add(new SetCardInfo("Tethered Griffin", 21, Rarity.RARE, mage.cards.t.TetheredGriffin.class)); - cards.add(new SetCardInfo("Thieving Magpie", 49, Rarity.UNCOMMON, mage.cards.t.ThievingMagpie.class)); - cards.add(new SetCardInfo("Thorn Elemental", 123, Rarity.RARE, mage.cards.t.ThornElemental.class)); - cards.add(new SetCardInfo("Thran Dynamo", 139, Rarity.UNCOMMON, mage.cards.t.ThranDynamo.class)); - cards.add(new SetCardInfo("Thran Foundry", 140, Rarity.UNCOMMON, mage.cards.t.ThranFoundry.class)); - cards.add(new SetCardInfo("Thran Golem", 141, Rarity.RARE, mage.cards.t.ThranGolem.class)); - cards.add(new SetCardInfo("Tormented Angel", 22, Rarity.COMMON, mage.cards.t.TormentedAngel.class)); - cards.add(new SetCardInfo("Treachery", 50, Rarity.RARE, mage.cards.t.Treachery.class)); - cards.add(new SetCardInfo("Trumpet Blast", 98, Rarity.COMMON, mage.cards.t.TrumpetBlast.class)); - cards.add(new SetCardInfo("Twisted Experiment", 74, Rarity.COMMON, mage.cards.t.TwistedExperiment.class)); - cards.add(new SetCardInfo("Urza's Incubator", 142, Rarity.RARE, mage.cards.u.UrzasIncubator.class)); - cards.add(new SetCardInfo("Voice of Duty", 23, Rarity.UNCOMMON, mage.cards.v.VoiceOfDuty.class)); - cards.add(new SetCardInfo("Voice of Reason", 24, Rarity.UNCOMMON, mage.cards.v.VoiceOfReason.class)); - cards.add(new SetCardInfo("Wake of Destruction", 99, Rarity.RARE, mage.cards.w.WakeOfDestruction.class)); - cards.add(new SetCardInfo("Wall of Glare", 25, Rarity.COMMON, mage.cards.w.WallOfGlare.class)); - cards.add(new SetCardInfo("Wild Colos", 100, Rarity.COMMON, mage.cards.w.WildColos.class)); - cards.add(new SetCardInfo("Yavimaya Elder", 124, Rarity.COMMON, mage.cards.y.YavimayaElder.class)); - cards.add(new SetCardInfo("Yavimaya Enchantress", 125, Rarity.UNCOMMON, mage.cards.y.YavimayaEnchantress.class)); - cards.add(new SetCardInfo("Yavimaya Hollow", 143, Rarity.RARE, mage.cards.y.YavimayaHollow.class)); - cards.add(new SetCardInfo("Yawgmoth's Bargain", 75, Rarity.RARE, mage.cards.y.YawgmothsBargain.class)); - } -} + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author Backfir3 + */ +public final class UrzasDestiny extends ExpansionSet { + + private static final UrzasDestiny instance = new UrzasDestiny(); + + public static UrzasDestiny getInstance() { + return instance; + } + + private UrzasDestiny() { + super("Urza's Destiny", "UDS", ExpansionSet.buildDate(1999, 6, 7), SetType.EXPANSION); + this.blockName = "Urza"; + this.parentSet = UrzasSaga.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Academy Rector", 1, Rarity.RARE, mage.cards.a.AcademyRector.class)); + cards.add(new SetCardInfo("Aether Sting", 76, Rarity.UNCOMMON, mage.cards.a.AetherSting.class)); + cards.add(new SetCardInfo("Ancient Silverback", 101, Rarity.RARE, mage.cards.a.AncientSilverback.class)); + cards.add(new SetCardInfo("Apprentice Necromancer", 51, Rarity.RARE, mage.cards.a.ApprenticeNecromancer.class)); + cards.add(new SetCardInfo("Archery Training", 2, Rarity.UNCOMMON, mage.cards.a.ArcheryTraining.class)); + cards.add(new SetCardInfo("Attrition", 52, Rarity.RARE, mage.cards.a.Attrition.class)); + cards.add(new SetCardInfo("Aura Thief", 26, Rarity.RARE, mage.cards.a.AuraThief.class)); + cards.add(new SetCardInfo("Blizzard Elemental", 27, Rarity.RARE, mage.cards.b.BlizzardElemental.class)); + cards.add(new SetCardInfo("Bloodshot Cyclops", 77, Rarity.RARE, mage.cards.b.BloodshotCyclops.class)); + cards.add(new SetCardInfo("Body Snatcher", 53, Rarity.RARE, mage.cards.b.BodySnatcher.class)); + cards.add(new SetCardInfo("Braidwood Cup", 126, Rarity.UNCOMMON, mage.cards.b.BraidwoodCup.class)); + cards.add(new SetCardInfo("Braidwood Sextant", 127, Rarity.UNCOMMON, mage.cards.b.BraidwoodSextant.class)); + cards.add(new SetCardInfo("Brass Secretary", 128, Rarity.UNCOMMON, mage.cards.b.BrassSecretary.class)); + cards.add(new SetCardInfo("Brine Seer", 28, Rarity.UNCOMMON, mage.cards.b.BrineSeer.class)); + cards.add(new SetCardInfo("Bubbling Beebles", 29, Rarity.COMMON, mage.cards.b.BubblingBeebles.class)); + cards.add(new SetCardInfo("Bubbling Muck", 54, Rarity.COMMON, mage.cards.b.BubblingMuck.class)); + cards.add(new SetCardInfo("Caltrops", 129, Rarity.UNCOMMON, mage.cards.c.Caltrops.class)); + cards.add(new SetCardInfo("Capashen Knight", 3, Rarity.COMMON, mage.cards.c.CapashenKnight.class)); + cards.add(new SetCardInfo("Capashen Standard", 4, Rarity.COMMON, mage.cards.c.CapashenStandard.class)); + cards.add(new SetCardInfo("Capashen Templar", 5, Rarity.COMMON, mage.cards.c.CapashenTemplar.class)); + cards.add(new SetCardInfo("Carnival of Souls", 55, Rarity.RARE, mage.cards.c.CarnivalOfSouls.class)); + cards.add(new SetCardInfo("Chime of Night", 56, Rarity.COMMON, mage.cards.c.ChimeOfNight.class)); + cards.add(new SetCardInfo("Cinder Seer", 78, Rarity.UNCOMMON, mage.cards.c.CinderSeer.class)); + cards.add(new SetCardInfo("Colos Yearling", 79, Rarity.COMMON, mage.cards.c.ColosYearling.class)); + cards.add(new SetCardInfo("Compost", 102, Rarity.UNCOMMON, mage.cards.c.Compost.class)); + cards.add(new SetCardInfo("Covetous Dragon", 80, Rarity.RARE, mage.cards.c.CovetousDragon.class)); + cards.add(new SetCardInfo("Disappear", 30, Rarity.UNCOMMON, mage.cards.d.Disappear.class)); + cards.add(new SetCardInfo("Disease Carriers", 57, Rarity.COMMON, mage.cards.d.DiseaseCarriers.class)); + cards.add(new SetCardInfo("Donate", 31, Rarity.RARE, mage.cards.d.Donate.class)); + cards.add(new SetCardInfo("Dying Wail", 58, Rarity.COMMON, mage.cards.d.DyingWail.class)); + cards.add(new SetCardInfo("Elvish Lookout", 103, Rarity.COMMON, mage.cards.e.ElvishLookout.class)); + cards.add(new SetCardInfo("Elvish Piper", 104, Rarity.RARE, mage.cards.e.ElvishPiper.class)); + cards.add(new SetCardInfo("Emperor Crocodile", 105, Rarity.RARE, mage.cards.e.EmperorCrocodile.class)); + cards.add(new SetCardInfo("Encroach", 59, Rarity.UNCOMMON, mage.cards.e.Encroach.class)); + cards.add(new SetCardInfo("Eradicate", 60, Rarity.UNCOMMON, mage.cards.e.Eradicate.class)); + cards.add(new SetCardInfo("Extruder", 130, Rarity.UNCOMMON, mage.cards.e.Extruder.class)); + cards.add(new SetCardInfo("False Prophet", 6, Rarity.RARE, mage.cards.f.FalseProphet.class)); + cards.add(new SetCardInfo("Fatigue", 32, Rarity.COMMON, mage.cards.f.Fatigue.class)); + cards.add(new SetCardInfo("Fend Off", 7, Rarity.COMMON, mage.cards.f.FendOff.class)); + cards.add(new SetCardInfo("Festering Wound", 61, Rarity.UNCOMMON, mage.cards.f.FesteringWound.class)); + cards.add(new SetCardInfo("Field Surgeon", 8, Rarity.COMMON, mage.cards.f.FieldSurgeon.class)); + cards.add(new SetCardInfo("Flame Jet", 81, Rarity.COMMON, mage.cards.f.FlameJet.class)); + cards.add(new SetCardInfo("Fledgling Osprey", 33, Rarity.COMMON, mage.cards.f.FledglingOsprey.class)); + cards.add(new SetCardInfo("Flicker", 9, Rarity.RARE, mage.cards.f.Flicker.class)); + cards.add(new SetCardInfo("Fodder Cannon", 131, Rarity.UNCOMMON, mage.cards.f.FodderCannon.class)); + cards.add(new SetCardInfo("Gamekeeper", 106, Rarity.UNCOMMON, mage.cards.g.Gamekeeper.class)); + cards.add(new SetCardInfo("Goblin Berserker", 82, Rarity.UNCOMMON, mage.cards.g.GoblinBerserker.class)); + cards.add(new SetCardInfo("Goblin Festival", 83, Rarity.RARE, mage.cards.g.GoblinFestival.class)); + cards.add(new SetCardInfo("Goblin Gardener", 84, Rarity.COMMON, mage.cards.g.GoblinGardener.class)); + cards.add(new SetCardInfo("Goblin Marshal", 85, Rarity.RARE, mage.cards.g.GoblinMarshal.class)); + cards.add(new SetCardInfo("Goblin Masons", 86, Rarity.COMMON, mage.cards.g.GoblinMasons.class)); + cards.add(new SetCardInfo("Goliath Beetle", 107, Rarity.COMMON, mage.cards.g.GoliathBeetle.class)); + cards.add(new SetCardInfo("Heart Warden", 108, Rarity.COMMON, mage.cards.h.HeartWarden.class)); + cards.add(new SetCardInfo("Hulking Ogre", 87, Rarity.COMMON, mage.cards.h.HulkingOgre.class)); + cards.add(new SetCardInfo("Hunting Moa", 109, Rarity.UNCOMMON, mage.cards.h.HuntingMoa.class)); + cards.add(new SetCardInfo("Illuminated Wings", 34, Rarity.COMMON, mage.cards.i.IlluminatedWings.class)); + cards.add(new SetCardInfo("Impatience", 88, Rarity.RARE, mage.cards.i.Impatience.class)); + cards.add(new SetCardInfo("Incendiary", 89, Rarity.UNCOMMON, mage.cards.i.Incendiary.class)); + cards.add(new SetCardInfo("Iridescent Drake", 35, Rarity.UNCOMMON, mage.cards.i.IridescentDrake.class)); + cards.add(new SetCardInfo("Ivy Seer", 110, Rarity.UNCOMMON, mage.cards.i.IvySeer.class)); + cards.add(new SetCardInfo("Jasmine Seer", 10, Rarity.UNCOMMON, mage.cards.j.JasmineSeer.class)); + cards.add(new SetCardInfo("Junk Diver", 132, Rarity.RARE, mage.cards.j.JunkDiver.class)); + cards.add(new SetCardInfo("Keldon Champion", 90, Rarity.UNCOMMON, mage.cards.k.KeldonChampion.class)); + cards.add(new SetCardInfo("Keldon Vandals", 91, Rarity.COMMON, mage.cards.k.KeldonVandals.class)); + cards.add(new SetCardInfo("Kingfisher", 36, Rarity.COMMON, mage.cards.k.Kingfisher.class)); + cards.add(new SetCardInfo("Landslide", 92, Rarity.UNCOMMON, mage.cards.l.Landslide.class)); + cards.add(new SetCardInfo("Lurking Jackals", 62, Rarity.UNCOMMON, mage.cards.l.LurkingJackals.class)); + cards.add(new SetCardInfo("Magnify", 111, Rarity.COMMON, mage.cards.m.Magnify.class)); + cards.add(new SetCardInfo("Mantis Engine", 133, Rarity.UNCOMMON, mage.cards.m.MantisEngine.class)); + cards.add(new SetCardInfo("Marker Beetles", 112, Rarity.COMMON, mage.cards.m.MarkerBeetles.class)); + cards.add(new SetCardInfo("Mark of Fury", 93, Rarity.COMMON, mage.cards.m.MarkOfFury.class)); + cards.add(new SetCardInfo("Mask of Law and Grace", 11, Rarity.COMMON, mage.cards.m.MaskOfLawAndGrace.class)); + cards.add(new SetCardInfo("Master Healer", 12, Rarity.RARE, mage.cards.m.MasterHealer.class)); + cards.add(new SetCardInfo("Masticore", 134, Rarity.RARE, mage.cards.m.Masticore.class)); + cards.add(new SetCardInfo("Mental Discipline", 37, Rarity.COMMON, mage.cards.m.MentalDiscipline.class)); + cards.add(new SetCardInfo("Metalworker", 135, Rarity.RARE, mage.cards.m.Metalworker.class)); + cards.add(new SetCardInfo("Metathran Elite", 38, Rarity.UNCOMMON, mage.cards.m.MetathranElite.class)); + cards.add(new SetCardInfo("Metathran Soldier", 39, Rarity.COMMON, mage.cards.m.MetathranSoldier.class)); + cards.add(new SetCardInfo("Momentum", 113, Rarity.UNCOMMON, mage.cards.m.Momentum.class)); + cards.add(new SetCardInfo("Multani's Decree", 114, Rarity.COMMON, mage.cards.m.MultanisDecree.class)); + cards.add(new SetCardInfo("Nightshade Seer", 63, Rarity.UNCOMMON, mage.cards.n.NightshadeSeer.class)); + cards.add(new SetCardInfo("Opalescence", 13, Rarity.RARE, mage.cards.o.Opalescence.class)); + cards.add(new SetCardInfo("Opposition", 40, Rarity.RARE, mage.cards.o.Opposition.class)); + cards.add(new SetCardInfo("Pattern of Rebirth", 115, Rarity.RARE, mage.cards.p.PatternOfRebirth.class)); + cards.add(new SetCardInfo("Phyrexian Monitor", 64, Rarity.COMMON, mage.cards.p.PhyrexianMonitor.class)); + cards.add(new SetCardInfo("Phyrexian Negator", 65, Rarity.RARE, mage.cards.p.PhyrexianNegator.class)); + cards.add(new SetCardInfo("Plague Dogs", 66, Rarity.UNCOMMON, mage.cards.p.PlagueDogs.class)); + cards.add(new SetCardInfo("Plated Spider", 116, Rarity.COMMON, mage.cards.p.PlatedSpider.class)); + cards.add(new SetCardInfo("Plow Under", 117, Rarity.RARE, mage.cards.p.PlowUnder.class)); + cards.add(new SetCardInfo("Powder Keg", 136, Rarity.RARE, mage.cards.p.PowderKeg.class)); + cards.add(new SetCardInfo("Private Research", 41, Rarity.UNCOMMON, mage.cards.p.PrivateResearch.class)); + cards.add(new SetCardInfo("Quash", 42, Rarity.UNCOMMON, mage.cards.q.Quash.class)); + cards.add(new SetCardInfo("Rapid Decay", 67, Rarity.RARE, mage.cards.r.RapidDecay.class)); + cards.add(new SetCardInfo("Ravenous Rats", 68, Rarity.COMMON, mage.cards.r.RavenousRats.class)); + cards.add(new SetCardInfo("Rayne, Academy Chancellor", 43, Rarity.RARE, mage.cards.r.RayneAcademyChancellor.class)); + cards.add(new SetCardInfo("Reckless Abandon", 94, Rarity.COMMON, mage.cards.r.RecklessAbandon.class)); + cards.add(new SetCardInfo("Reliquary Monk", 14, Rarity.COMMON, mage.cards.r.ReliquaryMonk.class)); + cards.add(new SetCardInfo("Repercussion", 95, Rarity.RARE, mage.cards.r.Repercussion.class)); + cards.add(new SetCardInfo("Replenish", 15, Rarity.RARE, mage.cards.r.Replenish.class)); + cards.add(new SetCardInfo("Rescue", 44, Rarity.COMMON, mage.cards.r.Rescue.class)); + cards.add(new SetCardInfo("Rofellos's Gift", 119, Rarity.COMMON, mage.cards.r.RofellossGift.class)); + cards.add(new SetCardInfo("Rofellos, Llanowar Emissary", 118, Rarity.RARE, mage.cards.r.RofellosLlanowarEmissary.class)); + cards.add(new SetCardInfo("Sanctimony", 16, Rarity.UNCOMMON, mage.cards.s.Sanctimony.class)); + cards.add(new SetCardInfo("Scent of Brine", 45, Rarity.COMMON, mage.cards.s.ScentOfBrine.class)); + cards.add(new SetCardInfo("Scent of Cinder", 96, Rarity.COMMON, mage.cards.s.ScentOfCinder.class)); + cards.add(new SetCardInfo("Scent of Ivy", 120, Rarity.COMMON, mage.cards.s.ScentOfIvy.class)); + cards.add(new SetCardInfo("Scent of Jasmine", 17, Rarity.COMMON, mage.cards.s.ScentOfJasmine.class)); + cards.add(new SetCardInfo("Scent of Nightshade", 69, Rarity.COMMON, mage.cards.s.ScentOfNightshade.class)); + cards.add(new SetCardInfo("Scour", 18, Rarity.UNCOMMON, mage.cards.s.Scour.class)); + cards.add(new SetCardInfo("Scrying Glass", 137, Rarity.RARE, mage.cards.s.ScryingGlass.class)); + cards.add(new SetCardInfo("Serra Advocate", 19, Rarity.UNCOMMON, mage.cards.s.SerraAdvocate.class)); + cards.add(new SetCardInfo("Sigil of Sleep", 46, Rarity.COMMON, mage.cards.s.SigilOfSleep.class)); + cards.add(new SetCardInfo("Skittering Horror", 70, Rarity.COMMON, mage.cards.s.SkitteringHorror.class)); + cards.add(new SetCardInfo("Slinking Skirge", 71, Rarity.COMMON, mage.cards.s.SlinkingSkirge.class)); + cards.add(new SetCardInfo("Solidarity", 20, Rarity.COMMON, mage.cards.s.Solidarity.class)); + cards.add(new SetCardInfo("Soul Feast", 72, Rarity.UNCOMMON, mage.cards.s.SoulFeast.class)); + cards.add(new SetCardInfo("Sowing Salt", 97, Rarity.UNCOMMON, mage.cards.s.SowingSalt.class)); + cards.add(new SetCardInfo("Splinter", 121, Rarity.UNCOMMON, mage.cards.s.Splinter.class)); + cards.add(new SetCardInfo("Squirming Mass", 73, Rarity.COMMON, mage.cards.s.SquirmingMass.class)); + cards.add(new SetCardInfo("Storage Matrix", 138, Rarity.RARE, mage.cards.s.StorageMatrix.class)); + cards.add(new SetCardInfo("Taunting Elf", 122, Rarity.COMMON, mage.cards.t.TauntingElf.class)); + cards.add(new SetCardInfo("Telepathic Spies", 47, Rarity.COMMON, mage.cards.t.TelepathicSpies.class)); + cards.add(new SetCardInfo("Temporal Adept", 48, Rarity.RARE, mage.cards.t.TemporalAdept.class)); + cards.add(new SetCardInfo("Tethered Griffin", 21, Rarity.RARE, mage.cards.t.TetheredGriffin.class)); + cards.add(new SetCardInfo("Thieving Magpie", 49, Rarity.UNCOMMON, mage.cards.t.ThievingMagpie.class)); + cards.add(new SetCardInfo("Thorn Elemental", 123, Rarity.RARE, mage.cards.t.ThornElemental.class)); + cards.add(new SetCardInfo("Thran Dynamo", 139, Rarity.UNCOMMON, mage.cards.t.ThranDynamo.class)); + cards.add(new SetCardInfo("Thran Foundry", 140, Rarity.UNCOMMON, mage.cards.t.ThranFoundry.class)); + cards.add(new SetCardInfo("Thran Golem", 141, Rarity.RARE, mage.cards.t.ThranGolem.class)); + cards.add(new SetCardInfo("Tormented Angel", 22, Rarity.COMMON, mage.cards.t.TormentedAngel.class)); + cards.add(new SetCardInfo("Treachery", 50, Rarity.RARE, mage.cards.t.Treachery.class)); + cards.add(new SetCardInfo("Trumpet Blast", 98, Rarity.COMMON, mage.cards.t.TrumpetBlast.class)); + cards.add(new SetCardInfo("Twisted Experiment", 74, Rarity.COMMON, mage.cards.t.TwistedExperiment.class)); + cards.add(new SetCardInfo("Urza's Incubator", 142, Rarity.RARE, mage.cards.u.UrzasIncubator.class)); + cards.add(new SetCardInfo("Voice of Duty", 23, Rarity.UNCOMMON, mage.cards.v.VoiceOfDuty.class)); + cards.add(new SetCardInfo("Voice of Reason", 24, Rarity.UNCOMMON, mage.cards.v.VoiceOfReason.class)); + cards.add(new SetCardInfo("Wake of Destruction", 99, Rarity.RARE, mage.cards.w.WakeOfDestruction.class)); + cards.add(new SetCardInfo("Wall of Glare", 25, Rarity.COMMON, mage.cards.w.WallOfGlare.class)); + cards.add(new SetCardInfo("Wild Colos", 100, Rarity.COMMON, mage.cards.w.WildColos.class)); + cards.add(new SetCardInfo("Yavimaya Elder", 124, Rarity.COMMON, mage.cards.y.YavimayaElder.class)); + cards.add(new SetCardInfo("Yavimaya Enchantress", 125, Rarity.UNCOMMON, mage.cards.y.YavimayaEnchantress.class)); + cards.add(new SetCardInfo("Yavimaya Hollow", 143, Rarity.RARE, mage.cards.y.YavimayaHollow.class)); + cards.add(new SetCardInfo("Yawgmoth's Bargain", 75, Rarity.RARE, mage.cards.y.YawgmothsBargain.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/UrzasLegacy.java b/Mage.Sets/src/mage/sets/UrzasLegacy.java index 431d2eb3f80..922af28dc07 100644 --- a/Mage.Sets/src/mage/sets/UrzasLegacy.java +++ b/Mage.Sets/src/mage/sets/UrzasLegacy.java @@ -1,175 +1,175 @@ - -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author noxx - */ -public final class UrzasLegacy extends ExpansionSet { - - private static final UrzasLegacy instance = new UrzasLegacy(); - - public static UrzasLegacy getInstance() { - return instance; - } - - private UrzasLegacy() { - super("Urza's Legacy", "ULG", ExpansionSet.buildDate(1999, 2, 15), SetType.EXPANSION); - this.blockName = "Urza"; - this.parentSet = UrzasSaga.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("About Face", 73, Rarity.COMMON, mage.cards.a.AboutFace.class)); - cards.add(new SetCardInfo("Angel's Trumpet", 121, Rarity.UNCOMMON, mage.cards.a.AngelsTrumpet.class)); - cards.add(new SetCardInfo("Angelic Curator", 1, Rarity.COMMON, mage.cards.a.AngelicCurator.class)); - cards.add(new SetCardInfo("Anthroplasm", 25, Rarity.RARE, mage.cards.a.Anthroplasm.class)); - cards.add(new SetCardInfo("Archivist", 26, Rarity.RARE, mage.cards.a.Archivist.class)); - cards.add(new SetCardInfo("Aura Flux", 27, Rarity.COMMON, mage.cards.a.AuraFlux.class)); - cards.add(new SetCardInfo("Avalanche Riders", 74, Rarity.UNCOMMON, mage.cards.a.AvalancheRiders.class)); - cards.add(new SetCardInfo("Beast of Burden", 122, Rarity.RARE, mage.cards.b.BeastOfBurden.class)); - cards.add(new SetCardInfo("Blessed Reversal", 2, Rarity.RARE, mage.cards.b.BlessedReversal.class)); - cards.add(new SetCardInfo("Bloated Toad", 97, Rarity.UNCOMMON, mage.cards.b.BloatedToad.class)); - cards.add(new SetCardInfo("Bone Shredder", 49, Rarity.UNCOMMON, mage.cards.b.BoneShredder.class)); - cards.add(new SetCardInfo("Bouncing Beebles", 28, Rarity.COMMON, mage.cards.b.BouncingBeebles.class)); - cards.add(new SetCardInfo("Brink of Madness", 50, Rarity.RARE, mage.cards.b.BrinkOfMadness.class)); - cards.add(new SetCardInfo("Burst of Energy", 3, Rarity.COMMON, mage.cards.b.BurstOfEnergy.class)); - cards.add(new SetCardInfo("Cessation", 4, Rarity.COMMON, mage.cards.c.Cessation.class)); - cards.add(new SetCardInfo("Cloud of Faeries", 29, Rarity.COMMON, mage.cards.c.CloudOfFaeries.class)); - cards.add(new SetCardInfo("Crawlspace", 123, Rarity.RARE, mage.cards.c.Crawlspace.class)); - cards.add(new SetCardInfo("Crop Rotation", 98, Rarity.COMMON, mage.cards.c.CropRotation.class)); - cards.add(new SetCardInfo("Damping Engine", 124, Rarity.RARE, mage.cards.d.DampingEngine.class)); - cards.add(new SetCardInfo("Darkwatch Elves", 99, Rarity.UNCOMMON, mage.cards.d.DarkwatchElves.class)); - cards.add(new SetCardInfo("Defender of Chaos", 75, Rarity.COMMON, mage.cards.d.DefenderOfChaos.class)); - cards.add(new SetCardInfo("Defender of Law", 5, Rarity.COMMON, mage.cards.d.DefenderOfLaw.class)); - cards.add(new SetCardInfo("Defense Grid", 125, Rarity.RARE, mage.cards.d.DefenseGrid.class)); - cards.add(new SetCardInfo("Defense of the Heart", 100, Rarity.RARE, mage.cards.d.DefenseOfTheHeart.class)); - cards.add(new SetCardInfo("Delusions of Mediocrity", 30, Rarity.RARE, mage.cards.d.DelusionsOfMediocrity.class)); - cards.add(new SetCardInfo("Deranged Hermit", 101, Rarity.RARE, mage.cards.d.DerangedHermit.class)); - cards.add(new SetCardInfo("Devout Harpist", 6, Rarity.COMMON, mage.cards.d.DevoutHarpist.class)); - cards.add(new SetCardInfo("Engineered Plague", 51, Rarity.UNCOMMON, mage.cards.e.EngineeredPlague.class)); - cards.add(new SetCardInfo("Erase", 7, Rarity.COMMON, mage.cards.e.Erase.class)); - cards.add(new SetCardInfo("Eviscerator", 52, Rarity.RARE, mage.cards.e.Eviscerator.class)); - cards.add(new SetCardInfo("Expendable Troops", 8, Rarity.COMMON, mage.cards.e.ExpendableTroops.class)); - cards.add(new SetCardInfo("Faerie Conclave", 139, Rarity.UNCOMMON, mage.cards.f.FaerieConclave.class)); - cards.add(new SetCardInfo("Fleeting Image", 31, Rarity.RARE, mage.cards.f.FleetingImage.class)); - cards.add(new SetCardInfo("Fog of Gnats", 53, Rarity.COMMON, mage.cards.f.FogOfGnats.class)); - cards.add(new SetCardInfo("Forbidding Watchtower", 140, Rarity.UNCOMMON, mage.cards.f.ForbiddingWatchtower.class)); - cards.add(new SetCardInfo("Frantic Search", 32, Rarity.COMMON, mage.cards.f.FranticSearch.class)); - cards.add(new SetCardInfo("Gang of Elk", 102, Rarity.UNCOMMON, mage.cards.g.GangOfElk.class)); - cards.add(new SetCardInfo("Ghitu Encampment", 141, Rarity.UNCOMMON, mage.cards.g.GhituEncampment.class)); - cards.add(new SetCardInfo("Ghitu Fire-Eater", 76, Rarity.UNCOMMON, mage.cards.g.GhituFireEater.class)); - cards.add(new SetCardInfo("Ghitu Slinger", 77, Rarity.COMMON, mage.cards.g.GhituSlinger.class)); - cards.add(new SetCardInfo("Ghitu War Cry", 78, Rarity.UNCOMMON, mage.cards.g.GhituWarCry.class)); - cards.add(new SetCardInfo("Giant Cockroach", 54, Rarity.COMMON, mage.cards.g.GiantCockroach.class)); - cards.add(new SetCardInfo("Goblin Medics", 79, Rarity.COMMON, mage.cards.g.GoblinMedics.class)); - cards.add(new SetCardInfo("Goblin Welder", 80, Rarity.RARE, mage.cards.g.GoblinWelder.class)); - cards.add(new SetCardInfo("Granite Grip", 81, Rarity.COMMON, mage.cards.g.GraniteGrip.class)); - cards.add(new SetCardInfo("Grim Monolith", 126, Rarity.RARE, mage.cards.g.GrimMonolith.class)); - cards.add(new SetCardInfo("Harmonic Convergence", 103, Rarity.UNCOMMON, mage.cards.h.HarmonicConvergence.class)); - cards.add(new SetCardInfo("Hidden Gibbons", 104, Rarity.RARE, mage.cards.h.HiddenGibbons.class)); - cards.add(new SetCardInfo("Hope and Glory", 9, Rarity.UNCOMMON, mage.cards.h.HopeAndGlory.class)); - cards.add(new SetCardInfo("Impending Disaster", 82, Rarity.RARE, mage.cards.i.ImpendingDisaster.class)); - cards.add(new SetCardInfo("Intervene", 33, Rarity.COMMON, mage.cards.i.Intervene.class)); - cards.add(new SetCardInfo("Iron Maiden", 127, Rarity.RARE, mage.cards.i.IronMaiden.class)); - cards.add(new SetCardInfo("Iron Will", 10, Rarity.COMMON, mage.cards.i.IronWill.class)); - cards.add(new SetCardInfo("Jhoira's Toolbox", 128, Rarity.UNCOMMON, mage.cards.j.JhoirasToolbox.class)); - cards.add(new SetCardInfo("Karmic Guide", 11, Rarity.RARE, mage.cards.k.KarmicGuide.class)); - cards.add(new SetCardInfo("King Crab", 34, Rarity.UNCOMMON, mage.cards.k.KingCrab.class)); - cards.add(new SetCardInfo("Knighthood", 12, Rarity.UNCOMMON, mage.cards.k.Knighthood.class)); - cards.add(new SetCardInfo("Last-Ditch Effort", 83, Rarity.UNCOMMON, mage.cards.l.LastDitchEffort.class)); - cards.add(new SetCardInfo("Lava Axe", 84, Rarity.COMMON, mage.cards.l.LavaAxe.class)); - cards.add(new SetCardInfo("Levitation", 35, Rarity.UNCOMMON, mage.cards.l.Levitation.class)); - cards.add(new SetCardInfo("Lone Wolf", 105, Rarity.UNCOMMON, mage.cards.l.LoneWolf.class)); - cards.add(new SetCardInfo("Lurking Skirge", 55, Rarity.RARE, mage.cards.l.LurkingSkirge.class)); - cards.add(new SetCardInfo("Martyr's Cause", 13, Rarity.UNCOMMON, mage.cards.m.MartyrsCause.class)); - cards.add(new SetCardInfo("Memory Jar", 129, Rarity.RARE, mage.cards.m.MemoryJar.class)); - cards.add(new SetCardInfo("Might of Oaks", 106, Rarity.RARE, mage.cards.m.MightOfOaks.class)); - cards.add(new SetCardInfo("Miscalculation", 36, Rarity.COMMON, mage.cards.m.Miscalculation.class)); - cards.add(new SetCardInfo("Molten Hydra", 85, Rarity.RARE, mage.cards.m.MoltenHydra.class)); - cards.add(new SetCardInfo("Mother of Runes", 14, Rarity.UNCOMMON, mage.cards.m.MotherOfRunes.class)); - cards.add(new SetCardInfo("Multani's Acolyte", 108, Rarity.COMMON, mage.cards.m.MultanisAcolyte.class)); - cards.add(new SetCardInfo("Multani's Presence", 109, Rarity.UNCOMMON, mage.cards.m.MultanisPresence.class)); - cards.add(new SetCardInfo("Multani, Maro-Sorcerer", 107, Rarity.RARE, mage.cards.m.MultaniMaroSorcerer.class)); - cards.add(new SetCardInfo("No Mercy", 56, Rarity.RARE, mage.cards.n.NoMercy.class)); - cards.add(new SetCardInfo("Opal Avenger", 15, Rarity.RARE, mage.cards.o.OpalAvenger.class)); - cards.add(new SetCardInfo("Opal Champion", 16, Rarity.COMMON, mage.cards.o.OpalChampion.class)); - cards.add(new SetCardInfo("Opportunity", 37, Rarity.UNCOMMON, mage.cards.o.Opportunity.class)); - cards.add(new SetCardInfo("Ostracize", 57, Rarity.COMMON, mage.cards.o.Ostracize.class)); - cards.add(new SetCardInfo("Palinchron", 38, Rarity.RARE, mage.cards.p.Palinchron.class)); - cards.add(new SetCardInfo("Parch", 86, Rarity.COMMON, mage.cards.p.Parch.class)); - cards.add(new SetCardInfo("Peace and Quiet", 17, Rarity.UNCOMMON, mage.cards.p.PeaceAndQuiet.class)); - cards.add(new SetCardInfo("Phyrexian Broodlings", 58, Rarity.COMMON, mage.cards.p.PhyrexianBroodlings.class)); - cards.add(new SetCardInfo("Phyrexian Debaser", 59, Rarity.COMMON, mage.cards.p.PhyrexianDebaser.class)); - cards.add(new SetCardInfo("Phyrexian Defiler", 60, Rarity.UNCOMMON, mage.cards.p.PhyrexianDefiler.class)); - cards.add(new SetCardInfo("Phyrexian Denouncer", 61, Rarity.COMMON, mage.cards.p.PhyrexianDenouncer.class)); - cards.add(new SetCardInfo("Phyrexian Plaguelord", 62, Rarity.RARE, mage.cards.p.PhyrexianPlaguelord.class)); - cards.add(new SetCardInfo("Phyrexian Reclamation", 63, Rarity.UNCOMMON, mage.cards.p.PhyrexianReclamation.class)); - cards.add(new SetCardInfo("Plague Beetle", 64, Rarity.COMMON, mage.cards.p.PlagueBeetle.class)); - cards.add(new SetCardInfo("Planar Collapse", 18, Rarity.RARE, mage.cards.p.PlanarCollapse.class)); - cards.add(new SetCardInfo("Purify", 19, Rarity.RARE, mage.cards.p.Purify.class)); - cards.add(new SetCardInfo("Pygmy Pyrosaur", 87, Rarity.COMMON, mage.cards.p.PygmyPyrosaur.class)); - cards.add(new SetCardInfo("Pyromancy", 88, Rarity.RARE, mage.cards.p.Pyromancy.class)); - cards.add(new SetCardInfo("Quicksilver Amulet", 130, Rarity.RARE, mage.cards.q.QuicksilverAmulet.class)); - cards.add(new SetCardInfo("Rack and Ruin", 89, Rarity.UNCOMMON, mage.cards.r.RackAndRuin.class)); - cards.add(new SetCardInfo("Radiant's Dragoons", 21, Rarity.UNCOMMON, mage.cards.r.RadiantsDragoons.class)); - cards.add(new SetCardInfo("Radiant's Judgment", 22, Rarity.COMMON, mage.cards.r.RadiantsJudgment.class)); - cards.add(new SetCardInfo("Radiant, Archangel", 20, Rarity.RARE, mage.cards.r.RadiantArchangel.class)); - cards.add(new SetCardInfo("Rancor", 110, Rarity.COMMON, mage.cards.r.Rancor.class)); - cards.add(new SetCardInfo("Rank and File", 65, Rarity.UNCOMMON, mage.cards.r.RankAndFile.class)); - cards.add(new SetCardInfo("Raven Familiar", 39, Rarity.UNCOMMON, mage.cards.r.RavenFamiliar.class)); - cards.add(new SetCardInfo("Rebuild", 40, Rarity.UNCOMMON, mage.cards.r.Rebuild.class)); - cards.add(new SetCardInfo("Repopulate", 111, Rarity.COMMON, mage.cards.r.Repopulate.class)); - cards.add(new SetCardInfo("Ring of Gix", 131, Rarity.RARE, mage.cards.r.RingOfGix.class)); - cards.add(new SetCardInfo("Rivalry", 90, Rarity.RARE, mage.cards.r.Rivalry.class)); - cards.add(new SetCardInfo("Scrapheap", 132, Rarity.RARE, mage.cards.s.Scrapheap.class)); - cards.add(new SetCardInfo("Second Chance", 41, Rarity.RARE, mage.cards.s.SecondChance.class)); - cards.add(new SetCardInfo("Shivan Phoenix", 91, Rarity.RARE, mage.cards.s.ShivanPhoenix.class)); - cards.add(new SetCardInfo("Sick and Tired", 66, Rarity.COMMON, mage.cards.s.SickAndTired.class)); - cards.add(new SetCardInfo("Silk Net", 112, Rarity.COMMON, mage.cards.s.SilkNet.class)); - cards.add(new SetCardInfo("Simian Grunts", 113, Rarity.COMMON, mage.cards.s.SimianGrunts.class)); - cards.add(new SetCardInfo("Sleeper's Guile", 67, Rarity.COMMON, mage.cards.s.SleepersGuile.class)); - cards.add(new SetCardInfo("Slow Motion", 42, Rarity.COMMON, mage.cards.s.SlowMotion.class)); - cards.add(new SetCardInfo("Sluggishness", 92, Rarity.COMMON, mage.cards.s.Sluggishness.class)); - cards.add(new SetCardInfo("Snap", 43, Rarity.COMMON, mage.cards.s.Snap.class)); - cards.add(new SetCardInfo("Spawning Pool", 142, Rarity.UNCOMMON, mage.cards.s.SpawningPool.class)); - cards.add(new SetCardInfo("Subversion", 68, Rarity.RARE, mage.cards.s.Subversion.class)); - cards.add(new SetCardInfo("Sustainer of the Realm", 23, Rarity.UNCOMMON, mage.cards.s.SustainerOfTheRealm.class)); - cards.add(new SetCardInfo("Swat", 69, Rarity.COMMON, mage.cards.s.Swat.class)); - cards.add(new SetCardInfo("Tethered Skirge", 70, Rarity.UNCOMMON, mage.cards.t.TetheredSkirge.class)); - cards.add(new SetCardInfo("Thornwind Faeries", 44, Rarity.COMMON, mage.cards.t.ThornwindFaeries.class)); - cards.add(new SetCardInfo("Thran Lens", 133, Rarity.RARE, mage.cards.t.ThranLens.class)); - cards.add(new SetCardInfo("Thran War Machine", 134, Rarity.UNCOMMON, mage.cards.t.ThranWarMachine.class)); - cards.add(new SetCardInfo("Thran Weaponry", 135, Rarity.RARE, mage.cards.t.ThranWeaponry.class)); - cards.add(new SetCardInfo("Ticking Gnomes", 136, Rarity.UNCOMMON, mage.cards.t.TickingGnomes.class)); - cards.add(new SetCardInfo("Tinker", 45, Rarity.UNCOMMON, mage.cards.t.Tinker.class)); - cards.add(new SetCardInfo("Tragic Poet", 24, Rarity.COMMON, mage.cards.t.TragicPoet.class)); - cards.add(new SetCardInfo("Treacherous Link", 71, Rarity.UNCOMMON, mage.cards.t.TreacherousLink.class)); - cards.add(new SetCardInfo("Treefolk Mystic", 114, Rarity.COMMON, mage.cards.t.TreefolkMystic.class)); - cards.add(new SetCardInfo("Treetop Village", 143, Rarity.UNCOMMON, mage.cards.t.TreetopVillage.class)); - cards.add(new SetCardInfo("Unearth", 72, Rarity.COMMON, mage.cards.u.Unearth.class)); - cards.add(new SetCardInfo("Urza's Blueprints", 137, Rarity.RARE, mage.cards.u.UrzasBlueprints.class)); - cards.add(new SetCardInfo("Viashino Bey", 93, Rarity.COMMON, mage.cards.v.ViashinoBey.class)); - cards.add(new SetCardInfo("Viashino Cutthroat", 94, Rarity.UNCOMMON, mage.cards.v.ViashinoCutthroat.class)); - cards.add(new SetCardInfo("Viashino Heretic", 95, Rarity.UNCOMMON, mage.cards.v.ViashinoHeretic.class)); - cards.add(new SetCardInfo("Viashino Sandscout", 96, Rarity.COMMON, mage.cards.v.ViashinoSandscout.class)); - cards.add(new SetCardInfo("Vigilant Drake", 46, Rarity.COMMON, mage.cards.v.VigilantDrake.class)); - cards.add(new SetCardInfo("Walking Sponge", 47, Rarity.UNCOMMON, mage.cards.w.WalkingSponge.class)); - cards.add(new SetCardInfo("Weatherseed Elf", 115, Rarity.COMMON, mage.cards.w.WeatherseedElf.class)); - cards.add(new SetCardInfo("Weatherseed Faeries", 48, Rarity.COMMON, mage.cards.w.WeatherseedFaeries.class)); - cards.add(new SetCardInfo("Weatherseed Treefolk", 116, Rarity.RARE, mage.cards.w.WeatherseedTreefolk.class)); - cards.add(new SetCardInfo("Wheel of Torture", 138, Rarity.RARE, mage.cards.w.WheelOfTorture.class)); - cards.add(new SetCardInfo("Wing Snare", 117, Rarity.UNCOMMON, mage.cards.w.WingSnare.class)); - cards.add(new SetCardInfo("Yavimaya Granger", 118, Rarity.COMMON, mage.cards.y.YavimayaGranger.class)); - cards.add(new SetCardInfo("Yavimaya Scion", 119, Rarity.COMMON, mage.cards.y.YavimayaScion.class)); - cards.add(new SetCardInfo("Yavimaya Wurm", 120, Rarity.COMMON, mage.cards.y.YavimayaWurm.class)); - } -} + +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author noxx + */ +public final class UrzasLegacy extends ExpansionSet { + + private static final UrzasLegacy instance = new UrzasLegacy(); + + public static UrzasLegacy getInstance() { + return instance; + } + + private UrzasLegacy() { + super("Urza's Legacy", "ULG", ExpansionSet.buildDate(1999, 2, 15), SetType.EXPANSION); + this.blockName = "Urza"; + this.parentSet = UrzasSaga.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("About Face", 73, Rarity.COMMON, mage.cards.a.AboutFace.class)); + cards.add(new SetCardInfo("Angel's Trumpet", 121, Rarity.UNCOMMON, mage.cards.a.AngelsTrumpet.class)); + cards.add(new SetCardInfo("Angelic Curator", 1, Rarity.COMMON, mage.cards.a.AngelicCurator.class)); + cards.add(new SetCardInfo("Anthroplasm", 25, Rarity.RARE, mage.cards.a.Anthroplasm.class)); + cards.add(new SetCardInfo("Archivist", 26, Rarity.RARE, mage.cards.a.Archivist.class)); + cards.add(new SetCardInfo("Aura Flux", 27, Rarity.COMMON, mage.cards.a.AuraFlux.class)); + cards.add(new SetCardInfo("Avalanche Riders", 74, Rarity.UNCOMMON, mage.cards.a.AvalancheRiders.class)); + cards.add(new SetCardInfo("Beast of Burden", 122, Rarity.RARE, mage.cards.b.BeastOfBurden.class)); + cards.add(new SetCardInfo("Blessed Reversal", 2, Rarity.RARE, mage.cards.b.BlessedReversal.class)); + cards.add(new SetCardInfo("Bloated Toad", 97, Rarity.UNCOMMON, mage.cards.b.BloatedToad.class)); + cards.add(new SetCardInfo("Bone Shredder", 49, Rarity.UNCOMMON, mage.cards.b.BoneShredder.class)); + cards.add(new SetCardInfo("Bouncing Beebles", 28, Rarity.COMMON, mage.cards.b.BouncingBeebles.class)); + cards.add(new SetCardInfo("Brink of Madness", 50, Rarity.RARE, mage.cards.b.BrinkOfMadness.class)); + cards.add(new SetCardInfo("Burst of Energy", 3, Rarity.COMMON, mage.cards.b.BurstOfEnergy.class)); + cards.add(new SetCardInfo("Cessation", 4, Rarity.COMMON, mage.cards.c.Cessation.class)); + cards.add(new SetCardInfo("Cloud of Faeries", 29, Rarity.COMMON, mage.cards.c.CloudOfFaeries.class)); + cards.add(new SetCardInfo("Crawlspace", 123, Rarity.RARE, mage.cards.c.Crawlspace.class)); + cards.add(new SetCardInfo("Crop Rotation", 98, Rarity.COMMON, mage.cards.c.CropRotation.class)); + cards.add(new SetCardInfo("Damping Engine", 124, Rarity.RARE, mage.cards.d.DampingEngine.class)); + cards.add(new SetCardInfo("Darkwatch Elves", 99, Rarity.UNCOMMON, mage.cards.d.DarkwatchElves.class)); + cards.add(new SetCardInfo("Defender of Chaos", 75, Rarity.COMMON, mage.cards.d.DefenderOfChaos.class)); + cards.add(new SetCardInfo("Defender of Law", 5, Rarity.COMMON, mage.cards.d.DefenderOfLaw.class)); + cards.add(new SetCardInfo("Defense Grid", 125, Rarity.RARE, mage.cards.d.DefenseGrid.class)); + cards.add(new SetCardInfo("Defense of the Heart", 100, Rarity.RARE, mage.cards.d.DefenseOfTheHeart.class)); + cards.add(new SetCardInfo("Delusions of Mediocrity", 30, Rarity.RARE, mage.cards.d.DelusionsOfMediocrity.class)); + cards.add(new SetCardInfo("Deranged Hermit", 101, Rarity.RARE, mage.cards.d.DerangedHermit.class)); + cards.add(new SetCardInfo("Devout Harpist", 6, Rarity.COMMON, mage.cards.d.DevoutHarpist.class)); + cards.add(new SetCardInfo("Engineered Plague", 51, Rarity.UNCOMMON, mage.cards.e.EngineeredPlague.class)); + cards.add(new SetCardInfo("Erase", 7, Rarity.COMMON, mage.cards.e.Erase.class)); + cards.add(new SetCardInfo("Eviscerator", 52, Rarity.RARE, mage.cards.e.Eviscerator.class)); + cards.add(new SetCardInfo("Expendable Troops", 8, Rarity.COMMON, mage.cards.e.ExpendableTroops.class)); + cards.add(new SetCardInfo("Faerie Conclave", 139, Rarity.UNCOMMON, mage.cards.f.FaerieConclave.class)); + cards.add(new SetCardInfo("Fleeting Image", 31, Rarity.RARE, mage.cards.f.FleetingImage.class)); + cards.add(new SetCardInfo("Fog of Gnats", 53, Rarity.COMMON, mage.cards.f.FogOfGnats.class)); + cards.add(new SetCardInfo("Forbidding Watchtower", 140, Rarity.UNCOMMON, mage.cards.f.ForbiddingWatchtower.class)); + cards.add(new SetCardInfo("Frantic Search", 32, Rarity.COMMON, mage.cards.f.FranticSearch.class)); + cards.add(new SetCardInfo("Gang of Elk", 102, Rarity.UNCOMMON, mage.cards.g.GangOfElk.class)); + cards.add(new SetCardInfo("Ghitu Encampment", 141, Rarity.UNCOMMON, mage.cards.g.GhituEncampment.class)); + cards.add(new SetCardInfo("Ghitu Fire-Eater", 76, Rarity.UNCOMMON, mage.cards.g.GhituFireEater.class)); + cards.add(new SetCardInfo("Ghitu Slinger", 77, Rarity.COMMON, mage.cards.g.GhituSlinger.class)); + cards.add(new SetCardInfo("Ghitu War Cry", 78, Rarity.UNCOMMON, mage.cards.g.GhituWarCry.class)); + cards.add(new SetCardInfo("Giant Cockroach", 54, Rarity.COMMON, mage.cards.g.GiantCockroach.class)); + cards.add(new SetCardInfo("Goblin Medics", 79, Rarity.COMMON, mage.cards.g.GoblinMedics.class)); + cards.add(new SetCardInfo("Goblin Welder", 80, Rarity.RARE, mage.cards.g.GoblinWelder.class)); + cards.add(new SetCardInfo("Granite Grip", 81, Rarity.COMMON, mage.cards.g.GraniteGrip.class)); + cards.add(new SetCardInfo("Grim Monolith", 126, Rarity.RARE, mage.cards.g.GrimMonolith.class)); + cards.add(new SetCardInfo("Harmonic Convergence", 103, Rarity.UNCOMMON, mage.cards.h.HarmonicConvergence.class)); + cards.add(new SetCardInfo("Hidden Gibbons", 104, Rarity.RARE, mage.cards.h.HiddenGibbons.class)); + cards.add(new SetCardInfo("Hope and Glory", 9, Rarity.UNCOMMON, mage.cards.h.HopeAndGlory.class)); + cards.add(new SetCardInfo("Impending Disaster", 82, Rarity.RARE, mage.cards.i.ImpendingDisaster.class)); + cards.add(new SetCardInfo("Intervene", 33, Rarity.COMMON, mage.cards.i.Intervene.class)); + cards.add(new SetCardInfo("Iron Maiden", 127, Rarity.RARE, mage.cards.i.IronMaiden.class)); + cards.add(new SetCardInfo("Iron Will", 10, Rarity.COMMON, mage.cards.i.IronWill.class)); + cards.add(new SetCardInfo("Jhoira's Toolbox", 128, Rarity.UNCOMMON, mage.cards.j.JhoirasToolbox.class)); + cards.add(new SetCardInfo("Karmic Guide", 11, Rarity.RARE, mage.cards.k.KarmicGuide.class)); + cards.add(new SetCardInfo("King Crab", 34, Rarity.UNCOMMON, mage.cards.k.KingCrab.class)); + cards.add(new SetCardInfo("Knighthood", 12, Rarity.UNCOMMON, mage.cards.k.Knighthood.class)); + cards.add(new SetCardInfo("Last-Ditch Effort", 83, Rarity.UNCOMMON, mage.cards.l.LastDitchEffort.class)); + cards.add(new SetCardInfo("Lava Axe", 84, Rarity.COMMON, mage.cards.l.LavaAxe.class)); + cards.add(new SetCardInfo("Levitation", 35, Rarity.UNCOMMON, mage.cards.l.Levitation.class)); + cards.add(new SetCardInfo("Lone Wolf", 105, Rarity.UNCOMMON, mage.cards.l.LoneWolf.class)); + cards.add(new SetCardInfo("Lurking Skirge", 55, Rarity.RARE, mage.cards.l.LurkingSkirge.class)); + cards.add(new SetCardInfo("Martyr's Cause", 13, Rarity.UNCOMMON, mage.cards.m.MartyrsCause.class)); + cards.add(new SetCardInfo("Memory Jar", 129, Rarity.RARE, mage.cards.m.MemoryJar.class)); + cards.add(new SetCardInfo("Might of Oaks", 106, Rarity.RARE, mage.cards.m.MightOfOaks.class)); + cards.add(new SetCardInfo("Miscalculation", 36, Rarity.COMMON, mage.cards.m.Miscalculation.class)); + cards.add(new SetCardInfo("Molten Hydra", 85, Rarity.RARE, mage.cards.m.MoltenHydra.class)); + cards.add(new SetCardInfo("Mother of Runes", 14, Rarity.UNCOMMON, mage.cards.m.MotherOfRunes.class)); + cards.add(new SetCardInfo("Multani's Acolyte", 108, Rarity.COMMON, mage.cards.m.MultanisAcolyte.class)); + cards.add(new SetCardInfo("Multani's Presence", 109, Rarity.UNCOMMON, mage.cards.m.MultanisPresence.class)); + cards.add(new SetCardInfo("Multani, Maro-Sorcerer", 107, Rarity.RARE, mage.cards.m.MultaniMaroSorcerer.class)); + cards.add(new SetCardInfo("No Mercy", 56, Rarity.RARE, mage.cards.n.NoMercy.class)); + cards.add(new SetCardInfo("Opal Avenger", 15, Rarity.RARE, mage.cards.o.OpalAvenger.class)); + cards.add(new SetCardInfo("Opal Champion", 16, Rarity.COMMON, mage.cards.o.OpalChampion.class)); + cards.add(new SetCardInfo("Opportunity", 37, Rarity.UNCOMMON, mage.cards.o.Opportunity.class)); + cards.add(new SetCardInfo("Ostracize", 57, Rarity.COMMON, mage.cards.o.Ostracize.class)); + cards.add(new SetCardInfo("Palinchron", 38, Rarity.RARE, mage.cards.p.Palinchron.class)); + cards.add(new SetCardInfo("Parch", 86, Rarity.COMMON, mage.cards.p.Parch.class)); + cards.add(new SetCardInfo("Peace and Quiet", 17, Rarity.UNCOMMON, mage.cards.p.PeaceAndQuiet.class)); + cards.add(new SetCardInfo("Phyrexian Broodlings", 58, Rarity.COMMON, mage.cards.p.PhyrexianBroodlings.class)); + cards.add(new SetCardInfo("Phyrexian Debaser", 59, Rarity.COMMON, mage.cards.p.PhyrexianDebaser.class)); + cards.add(new SetCardInfo("Phyrexian Defiler", 60, Rarity.UNCOMMON, mage.cards.p.PhyrexianDefiler.class)); + cards.add(new SetCardInfo("Phyrexian Denouncer", 61, Rarity.COMMON, mage.cards.p.PhyrexianDenouncer.class)); + cards.add(new SetCardInfo("Phyrexian Plaguelord", 62, Rarity.RARE, mage.cards.p.PhyrexianPlaguelord.class)); + cards.add(new SetCardInfo("Phyrexian Reclamation", 63, Rarity.UNCOMMON, mage.cards.p.PhyrexianReclamation.class)); + cards.add(new SetCardInfo("Plague Beetle", 64, Rarity.COMMON, mage.cards.p.PlagueBeetle.class)); + cards.add(new SetCardInfo("Planar Collapse", 18, Rarity.RARE, mage.cards.p.PlanarCollapse.class)); + cards.add(new SetCardInfo("Purify", 19, Rarity.RARE, mage.cards.p.Purify.class)); + cards.add(new SetCardInfo("Pygmy Pyrosaur", 87, Rarity.COMMON, mage.cards.p.PygmyPyrosaur.class)); + cards.add(new SetCardInfo("Pyromancy", 88, Rarity.RARE, mage.cards.p.Pyromancy.class)); + cards.add(new SetCardInfo("Quicksilver Amulet", 130, Rarity.RARE, mage.cards.q.QuicksilverAmulet.class)); + cards.add(new SetCardInfo("Rack and Ruin", 89, Rarity.UNCOMMON, mage.cards.r.RackAndRuin.class)); + cards.add(new SetCardInfo("Radiant's Dragoons", 21, Rarity.UNCOMMON, mage.cards.r.RadiantsDragoons.class)); + cards.add(new SetCardInfo("Radiant's Judgment", 22, Rarity.COMMON, mage.cards.r.RadiantsJudgment.class)); + cards.add(new SetCardInfo("Radiant, Archangel", 20, Rarity.RARE, mage.cards.r.RadiantArchangel.class)); + cards.add(new SetCardInfo("Rancor", 110, Rarity.COMMON, mage.cards.r.Rancor.class)); + cards.add(new SetCardInfo("Rank and File", 65, Rarity.UNCOMMON, mage.cards.r.RankAndFile.class)); + cards.add(new SetCardInfo("Raven Familiar", 39, Rarity.UNCOMMON, mage.cards.r.RavenFamiliar.class)); + cards.add(new SetCardInfo("Rebuild", 40, Rarity.UNCOMMON, mage.cards.r.Rebuild.class)); + cards.add(new SetCardInfo("Repopulate", 111, Rarity.COMMON, mage.cards.r.Repopulate.class)); + cards.add(new SetCardInfo("Ring of Gix", 131, Rarity.RARE, mage.cards.r.RingOfGix.class)); + cards.add(new SetCardInfo("Rivalry", 90, Rarity.RARE, mage.cards.r.Rivalry.class)); + cards.add(new SetCardInfo("Scrapheap", 132, Rarity.RARE, mage.cards.s.Scrapheap.class)); + cards.add(new SetCardInfo("Second Chance", 41, Rarity.RARE, mage.cards.s.SecondChance.class)); + cards.add(new SetCardInfo("Shivan Phoenix", 91, Rarity.RARE, mage.cards.s.ShivanPhoenix.class)); + cards.add(new SetCardInfo("Sick and Tired", 66, Rarity.COMMON, mage.cards.s.SickAndTired.class)); + cards.add(new SetCardInfo("Silk Net", 112, Rarity.COMMON, mage.cards.s.SilkNet.class)); + cards.add(new SetCardInfo("Simian Grunts", 113, Rarity.COMMON, mage.cards.s.SimianGrunts.class)); + cards.add(new SetCardInfo("Sleeper's Guile", 67, Rarity.COMMON, mage.cards.s.SleepersGuile.class)); + cards.add(new SetCardInfo("Slow Motion", 42, Rarity.COMMON, mage.cards.s.SlowMotion.class)); + cards.add(new SetCardInfo("Sluggishness", 92, Rarity.COMMON, mage.cards.s.Sluggishness.class)); + cards.add(new SetCardInfo("Snap", 43, Rarity.COMMON, mage.cards.s.Snap.class)); + cards.add(new SetCardInfo("Spawning Pool", 142, Rarity.UNCOMMON, mage.cards.s.SpawningPool.class)); + cards.add(new SetCardInfo("Subversion", 68, Rarity.RARE, mage.cards.s.Subversion.class)); + cards.add(new SetCardInfo("Sustainer of the Realm", 23, Rarity.UNCOMMON, mage.cards.s.SustainerOfTheRealm.class)); + cards.add(new SetCardInfo("Swat", 69, Rarity.COMMON, mage.cards.s.Swat.class)); + cards.add(new SetCardInfo("Tethered Skirge", 70, Rarity.UNCOMMON, mage.cards.t.TetheredSkirge.class)); + cards.add(new SetCardInfo("Thornwind Faeries", 44, Rarity.COMMON, mage.cards.t.ThornwindFaeries.class)); + cards.add(new SetCardInfo("Thran Lens", 133, Rarity.RARE, mage.cards.t.ThranLens.class)); + cards.add(new SetCardInfo("Thran War Machine", 134, Rarity.UNCOMMON, mage.cards.t.ThranWarMachine.class)); + cards.add(new SetCardInfo("Thran Weaponry", 135, Rarity.RARE, mage.cards.t.ThranWeaponry.class)); + cards.add(new SetCardInfo("Ticking Gnomes", 136, Rarity.UNCOMMON, mage.cards.t.TickingGnomes.class)); + cards.add(new SetCardInfo("Tinker", 45, Rarity.UNCOMMON, mage.cards.t.Tinker.class)); + cards.add(new SetCardInfo("Tragic Poet", 24, Rarity.COMMON, mage.cards.t.TragicPoet.class)); + cards.add(new SetCardInfo("Treacherous Link", 71, Rarity.UNCOMMON, mage.cards.t.TreacherousLink.class)); + cards.add(new SetCardInfo("Treefolk Mystic", 114, Rarity.COMMON, mage.cards.t.TreefolkMystic.class)); + cards.add(new SetCardInfo("Treetop Village", 143, Rarity.UNCOMMON, mage.cards.t.TreetopVillage.class)); + cards.add(new SetCardInfo("Unearth", 72, Rarity.COMMON, mage.cards.u.Unearth.class)); + cards.add(new SetCardInfo("Urza's Blueprints", 137, Rarity.RARE, mage.cards.u.UrzasBlueprints.class)); + cards.add(new SetCardInfo("Viashino Bey", 93, Rarity.COMMON, mage.cards.v.ViashinoBey.class)); + cards.add(new SetCardInfo("Viashino Cutthroat", 94, Rarity.UNCOMMON, mage.cards.v.ViashinoCutthroat.class)); + cards.add(new SetCardInfo("Viashino Heretic", 95, Rarity.UNCOMMON, mage.cards.v.ViashinoHeretic.class)); + cards.add(new SetCardInfo("Viashino Sandscout", 96, Rarity.COMMON, mage.cards.v.ViashinoSandscout.class)); + cards.add(new SetCardInfo("Vigilant Drake", 46, Rarity.COMMON, mage.cards.v.VigilantDrake.class)); + cards.add(new SetCardInfo("Walking Sponge", 47, Rarity.UNCOMMON, mage.cards.w.WalkingSponge.class)); + cards.add(new SetCardInfo("Weatherseed Elf", 115, Rarity.COMMON, mage.cards.w.WeatherseedElf.class)); + cards.add(new SetCardInfo("Weatherseed Faeries", 48, Rarity.COMMON, mage.cards.w.WeatherseedFaeries.class)); + cards.add(new SetCardInfo("Weatherseed Treefolk", 116, Rarity.RARE, mage.cards.w.WeatherseedTreefolk.class)); + cards.add(new SetCardInfo("Wheel of Torture", 138, Rarity.RARE, mage.cards.w.WheelOfTorture.class)); + cards.add(new SetCardInfo("Wing Snare", 117, Rarity.UNCOMMON, mage.cards.w.WingSnare.class)); + cards.add(new SetCardInfo("Yavimaya Granger", 118, Rarity.COMMON, mage.cards.y.YavimayaGranger.class)); + cards.add(new SetCardInfo("Yavimaya Scion", 119, Rarity.COMMON, mage.cards.y.YavimayaScion.class)); + cards.add(new SetCardInfo("Yavimaya Wurm", 120, Rarity.COMMON, mage.cards.y.YavimayaWurm.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/UrzasSaga.java b/Mage.Sets/src/mage/sets/UrzasSaga.java index ab0632ed8ec..8a7ff4755d3 100644 --- a/Mage.Sets/src/mage/sets/UrzasSaga.java +++ b/Mage.Sets/src/mage/sets/UrzasSaga.java @@ -1,379 +1,379 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author Backfir3 - */ -public final class UrzasSaga extends ExpansionSet { - - private static final UrzasSaga instance = new UrzasSaga(); - - public static UrzasSaga getInstance() { - return instance; - } - - private UrzasSaga() { - super("Urza's Saga", "USG", ExpansionSet.buildDate(1998, 10, 12), SetType.EXPANSION); - this.blockName = "Urza"; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Absolute Grace", 1, Rarity.UNCOMMON, mage.cards.a.AbsoluteGrace.class)); - cards.add(new SetCardInfo("Absolute Law", 2, Rarity.UNCOMMON, mage.cards.a.AbsoluteLaw.class)); - cards.add(new SetCardInfo("Abundance", 229, Rarity.RARE, mage.cards.a.Abundance.class)); - cards.add(new SetCardInfo("Abyssal Horror", 115, Rarity.RARE, mage.cards.a.AbyssalHorror.class)); - cards.add(new SetCardInfo("Academy Researchers", 58, Rarity.UNCOMMON, mage.cards.a.AcademyResearchers.class)); - cards.add(new SetCardInfo("Acidic Soil", 172, Rarity.UNCOMMON, mage.cards.a.AcidicSoil.class)); - cards.add(new SetCardInfo("Acridian", 230, Rarity.COMMON, mage.cards.a.Acridian.class)); - cards.add(new SetCardInfo("Albino Troll", 231, Rarity.UNCOMMON, mage.cards.a.AlbinoTroll.class)); - cards.add(new SetCardInfo("Anaconda", 232, Rarity.UNCOMMON, mage.cards.a.Anaconda.class)); - cards.add(new SetCardInfo("Angelic Chorus", 3, Rarity.RARE, mage.cards.a.AngelicChorus.class)); - cards.add(new SetCardInfo("Angelic Page", 4, Rarity.COMMON, mage.cards.a.AngelicPage.class)); - cards.add(new SetCardInfo("Annul", 59, Rarity.COMMON, mage.cards.a.Annul.class)); - cards.add(new SetCardInfo("Antagonism", 173, Rarity.RARE, mage.cards.a.Antagonism.class)); - cards.add(new SetCardInfo("Arcane Laboratory", 60, Rarity.UNCOMMON, mage.cards.a.ArcaneLaboratory.class)); - cards.add(new SetCardInfo("Arc Lightning", 174, Rarity.COMMON, mage.cards.a.ArcLightning.class)); - cards.add(new SetCardInfo("Argothian Elder", 233, Rarity.UNCOMMON, mage.cards.a.ArgothianElder.class)); - cards.add(new SetCardInfo("Argothian Enchantress", 234, Rarity.RARE, mage.cards.a.ArgothianEnchantress.class)); - cards.add(new SetCardInfo("Argothian Swine", 235, Rarity.COMMON, mage.cards.a.ArgothianSwine.class)); - cards.add(new SetCardInfo("Argothian Wurm", 236, Rarity.RARE, mage.cards.a.ArgothianWurm.class)); - cards.add(new SetCardInfo("Attunement", 61, Rarity.RARE, mage.cards.a.Attunement.class)); - cards.add(new SetCardInfo("Back to Basics", 62, Rarity.RARE, mage.cards.b.BackToBasics.class)); - cards.add(new SetCardInfo("Barrin, Master Wizard", 63, Rarity.RARE, mage.cards.b.BarrinMasterWizard.class)); - cards.add(new SetCardInfo("Barrin's Codex", 286, Rarity.RARE, mage.cards.b.BarrinsCodex.class)); - cards.add(new SetCardInfo("Bedlam", 175, Rarity.RARE, mage.cards.b.Bedlam.class)); - cards.add(new SetCardInfo("Befoul", 116, Rarity.COMMON, mage.cards.b.Befoul.class)); - cards.add(new SetCardInfo("Bereavement", 117, Rarity.UNCOMMON, mage.cards.b.Bereavement.class)); - cards.add(new SetCardInfo("Blanchwood Armor", 237, Rarity.UNCOMMON, mage.cards.b.BlanchwoodArmor.class)); - cards.add(new SetCardInfo("Blanchwood Treefolk", 238, Rarity.COMMON, mage.cards.b.BlanchwoodTreefolk.class)); - cards.add(new SetCardInfo("Blasted Landscape", 319, Rarity.UNCOMMON, mage.cards.b.BlastedLandscape.class)); - cards.add(new SetCardInfo("Blood Vassal", 118, Rarity.COMMON, mage.cards.b.BloodVassal.class)); - cards.add(new SetCardInfo("Bog Raiders", 119, Rarity.COMMON, mage.cards.b.BogRaiders.class)); - cards.add(new SetCardInfo("Brand", 176, Rarity.RARE, mage.cards.b.Brand.class)); - cards.add(new SetCardInfo("Bravado", 177, Rarity.COMMON, mage.cards.b.Bravado.class)); - cards.add(new SetCardInfo("Breach", 120, Rarity.COMMON, mage.cards.b.Breach.class)); - cards.add(new SetCardInfo("Brilliant Halo", 5, Rarity.COMMON, mage.cards.b.BrilliantHalo.class)); - cards.add(new SetCardInfo("Bull Hippo", 239, Rarity.UNCOMMON, mage.cards.b.BullHippo.class)); - cards.add(new SetCardInfo("Bulwark", 178, Rarity.RARE, mage.cards.b.Bulwark.class)); - cards.add(new SetCardInfo("Cackling Fiend", 121, Rarity.COMMON, mage.cards.c.CacklingFiend.class)); - cards.add(new SetCardInfo("Carpet of Flowers", 240, Rarity.UNCOMMON, mage.cards.c.CarpetOfFlowers.class)); - cards.add(new SetCardInfo("Carrion Beetles", 122, Rarity.COMMON, mage.cards.c.CarrionBeetles.class)); - cards.add(new SetCardInfo("Catalog", 64, Rarity.COMMON, mage.cards.c.Catalog.class)); - cards.add(new SetCardInfo("Catastrophe", 6, Rarity.RARE, mage.cards.c.Catastrophe.class)); - cards.add(new SetCardInfo("Cathodion", 287, Rarity.UNCOMMON, mage.cards.c.Cathodion.class)); - cards.add(new SetCardInfo("Cave Tiger", 241, Rarity.COMMON, mage.cards.c.CaveTiger.class)); - cards.add(new SetCardInfo("Child of Gaea", 242, Rarity.RARE, mage.cards.c.ChildOfGaea.class)); - cards.add(new SetCardInfo("Chimeric Staff", 288, Rarity.RARE, mage.cards.c.ChimericStaff.class)); - cards.add(new SetCardInfo("Citanul Centaurs", 243, Rarity.RARE, mage.cards.c.CitanulCentaurs.class)); - cards.add(new SetCardInfo("Citanul Flute", 289, Rarity.RARE, mage.cards.c.CitanulFlute.class)); - cards.add(new SetCardInfo("Citanul Hierophants", 244, Rarity.RARE, mage.cards.c.CitanulHierophants.class)); - cards.add(new SetCardInfo("Claws of Gix", 290, Rarity.UNCOMMON, mage.cards.c.ClawsOfGix.class)); - cards.add(new SetCardInfo("Clear", 7, Rarity.UNCOMMON, mage.cards.c.Clear.class)); - cards.add(new SetCardInfo("Cloak of Mists", 65, Rarity.COMMON, mage.cards.c.CloakOfMists.class)); - cards.add(new SetCardInfo("Confiscate", 66, Rarity.UNCOMMON, mage.cards.c.Confiscate.class)); - cards.add(new SetCardInfo("Congregate", 8, Rarity.COMMON, mage.cards.c.Congregate.class)); - cards.add(new SetCardInfo("Contamination", 123, Rarity.RARE, mage.cards.c.Contamination.class)); - cards.add(new SetCardInfo("Copper Gnomes", 291, Rarity.RARE, mage.cards.c.CopperGnomes.class)); - cards.add(new SetCardInfo("Coral Merfolk", 67, Rarity.COMMON, mage.cards.c.CoralMerfolk.class)); - cards.add(new SetCardInfo("Corrupt", 124, Rarity.COMMON, mage.cards.c.Corrupt.class)); - cards.add(new SetCardInfo("Cradle Guard", 245, Rarity.UNCOMMON, mage.cards.c.CradleGuard.class)); - cards.add(new SetCardInfo("Crater Hellion", 179, Rarity.RARE, mage.cards.c.CraterHellion.class)); - cards.add(new SetCardInfo("Crazed Skirge", 125, Rarity.UNCOMMON, mage.cards.c.CrazedSkirge.class)); - cards.add(new SetCardInfo("Crosswinds", 246, Rarity.UNCOMMON, mage.cards.c.Crosswinds.class)); - cards.add(new SetCardInfo("Crystal Chimes", 292, Rarity.UNCOMMON, mage.cards.c.CrystalChimes.class)); - cards.add(new SetCardInfo("Curfew", 68, Rarity.COMMON, mage.cards.c.Curfew.class)); - cards.add(new SetCardInfo("Darkest Hour", 128, Rarity.RARE, mage.cards.d.DarkestHour.class)); - cards.add(new SetCardInfo("Dark Hatchling", 126, Rarity.RARE, mage.cards.d.DarkHatchling.class)); - cards.add(new SetCardInfo("Dark Ritual", 127, Rarity.COMMON, mage.cards.d.DarkRitual.class)); - cards.add(new SetCardInfo("Defensive Formation", 9, Rarity.UNCOMMON, mage.cards.d.DefensiveFormation.class)); - cards.add(new SetCardInfo("Despondency", 129, Rarity.COMMON, mage.cards.d.Despondency.class)); - cards.add(new SetCardInfo("Destructive Urge", 180, Rarity.UNCOMMON, mage.cards.d.DestructiveUrge.class)); - cards.add(new SetCardInfo("Diabolic Servitude", 130, Rarity.UNCOMMON, mage.cards.d.DiabolicServitude.class)); - cards.add(new SetCardInfo("Disciple of Grace", 10, Rarity.COMMON, mage.cards.d.DiscipleOfGrace.class)); - cards.add(new SetCardInfo("Disciple of Law", 11, Rarity.COMMON, mage.cards.d.DiscipleOfLaw.class)); - cards.add(new SetCardInfo("Discordant Dirge", 131, Rarity.RARE, mage.cards.d.DiscordantDirge.class)); - cards.add(new SetCardInfo("Disenchant", 12, Rarity.COMMON, mage.cards.d.Disenchant.class)); - cards.add(new SetCardInfo("Disorder", 181, Rarity.UNCOMMON, mage.cards.d.Disorder.class)); - cards.add(new SetCardInfo("Disruptive Student", 69, Rarity.COMMON, mage.cards.d.DisruptiveStudent.class)); - cards.add(new SetCardInfo("Douse", 70, Rarity.UNCOMMON, mage.cards.d.Douse.class)); - cards.add(new SetCardInfo("Dragon Blood", 293, Rarity.UNCOMMON, mage.cards.d.DragonBlood.class)); - cards.add(new SetCardInfo("Drifting Djinn", 71, Rarity.RARE, mage.cards.d.DriftingDjinn.class)); - cards.add(new SetCardInfo("Drifting Meadow", 320, Rarity.COMMON, mage.cards.d.DriftingMeadow.class)); - cards.add(new SetCardInfo("Dromosaur", 182, Rarity.COMMON, mage.cards.d.Dromosaur.class)); - cards.add(new SetCardInfo("Duress", 132, Rarity.COMMON, mage.cards.d.Duress.class)); - cards.add(new SetCardInfo("Eastern Paladin", 133, Rarity.RARE, mage.cards.e.EasternPaladin.class)); - cards.add(new SetCardInfo("Electryte", 183, Rarity.RARE, mage.cards.e.Electryte.class)); - cards.add(new SetCardInfo("Elite Archers", 13, Rarity.RARE, mage.cards.e.EliteArchers.class)); - cards.add(new SetCardInfo("Elvish Herder", 247, Rarity.COMMON, mage.cards.e.ElvishHerder.class)); - cards.add(new SetCardInfo("Elvish Lyrist", 248, Rarity.COMMON, mage.cards.e.ElvishLyrist.class)); - cards.add(new SetCardInfo("Enchantment Alteration", 72, Rarity.UNCOMMON, mage.cards.e.EnchantmentAlteration.class)); - cards.add(new SetCardInfo("Endless Wurm", 249, Rarity.RARE, mage.cards.e.EndlessWurm.class)); - cards.add(new SetCardInfo("Endoskeleton", 294, Rarity.UNCOMMON, mage.cards.e.Endoskeleton.class)); - cards.add(new SetCardInfo("Energy Field", 73, Rarity.RARE, mage.cards.e.EnergyField.class)); - cards.add(new SetCardInfo("Exhaustion", 74, Rarity.UNCOMMON, mage.cards.e.Exhaustion.class)); - cards.add(new SetCardInfo("Exhume", 134, Rarity.COMMON, mage.cards.e.Exhume.class)); - cards.add(new SetCardInfo("Exploration", 250, Rarity.RARE, mage.cards.e.Exploration.class)); - cards.add(new SetCardInfo("Expunge", 135, Rarity.COMMON, mage.cards.e.Expunge.class)); - cards.add(new SetCardInfo("Faith Healer", 14, Rarity.RARE, mage.cards.f.FaithHealer.class)); - cards.add(new SetCardInfo("Falter", 184, Rarity.COMMON, mage.cards.f.Falter.class)); - cards.add(new SetCardInfo("Fault Line", 185, Rarity.RARE, mage.cards.f.FaultLine.class)); - cards.add(new SetCardInfo("Fecundity", 251, Rarity.UNCOMMON, mage.cards.f.Fecundity.class)); - cards.add(new SetCardInfo("Fertile Ground", 252, Rarity.COMMON, mage.cards.f.FertileGround.class)); - cards.add(new SetCardInfo("Fiery Mantle", 186, Rarity.COMMON, mage.cards.f.FieryMantle.class)); - cards.add(new SetCardInfo("Fire Ants", 187, Rarity.UNCOMMON, mage.cards.f.FireAnts.class)); - cards.add(new SetCardInfo("Flesh Reaver", 136, Rarity.UNCOMMON, mage.cards.f.FleshReaver.class)); - cards.add(new SetCardInfo("Fluctuator", 295, Rarity.RARE, mage.cards.f.Fluctuator.class)); - cards.add(new SetCardInfo("Fog Bank", 75, Rarity.UNCOMMON, mage.cards.f.FogBank.class)); - cards.add(new SetCardInfo("Forest", 347, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 348, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 349, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 350, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Fortitude", 253, Rarity.COMMON, mage.cards.f.Fortitude.class)); - cards.add(new SetCardInfo("Gaea's Bounty", 254, Rarity.COMMON, mage.cards.g.GaeasBounty.class)); - cards.add(new SetCardInfo("Gaea's Cradle", 321, Rarity.RARE, mage.cards.g.GaeasCradle.class)); - cards.add(new SetCardInfo("Gaea's Embrace", 255, Rarity.UNCOMMON, mage.cards.g.GaeasEmbrace.class)); - cards.add(new SetCardInfo("Gamble", 188, Rarity.RARE, mage.cards.g.Gamble.class)); - cards.add(new SetCardInfo("Gilded Drake", 76, Rarity.RARE, mage.cards.g.GildedDrake.class)); - cards.add(new SetCardInfo("Glorious Anthem", 15, Rarity.RARE, mage.cards.g.GloriousAnthem.class)); - cards.add(new SetCardInfo("Goblin Cadets", 189, Rarity.UNCOMMON, mage.cards.g.GoblinCadets.class)); - cards.add(new SetCardInfo("Goblin Lackey", 190, Rarity.UNCOMMON, mage.cards.g.GoblinLackey.class)); - cards.add(new SetCardInfo("Goblin Matron", 191, Rarity.COMMON, mage.cards.g.GoblinMatron.class)); - cards.add(new SetCardInfo("Goblin Offensive", 192, Rarity.UNCOMMON, mage.cards.g.GoblinOffensive.class)); - cards.add(new SetCardInfo("Goblin Patrol", 193, Rarity.COMMON, mage.cards.g.GoblinPatrol.class)); - cards.add(new SetCardInfo("Goblin Raider", 194, Rarity.COMMON, mage.cards.g.GoblinRaider.class)); - cards.add(new SetCardInfo("Goblin Spelunkers", 195, Rarity.COMMON, mage.cards.g.GoblinSpelunkers.class)); - cards.add(new SetCardInfo("Goblin War Buggy", 196, Rarity.COMMON, mage.cards.g.GoblinWarBuggy.class)); - cards.add(new SetCardInfo("Gorilla Warrior", 256, Rarity.COMMON, mage.cards.g.GorillaWarrior.class)); - cards.add(new SetCardInfo("Grafted Skullcap", 296, Rarity.RARE, mage.cards.g.GraftedSkullcap.class)); - cards.add(new SetCardInfo("Greater Good", 257, Rarity.RARE, mage.cards.g.GreaterGood.class)); - cards.add(new SetCardInfo("Great Whale", 77, Rarity.RARE, mage.cards.g.GreatWhale.class)); - cards.add(new SetCardInfo("Greener Pastures", 258, Rarity.RARE, mage.cards.g.GreenerPastures.class)); - cards.add(new SetCardInfo("Guma", 197, Rarity.UNCOMMON, mage.cards.g.Guma.class)); - cards.add(new SetCardInfo("Hawkeater Moth", 259, Rarity.UNCOMMON, mage.cards.h.HawkeaterMoth.class)); - cards.add(new SetCardInfo("Headlong Rush", 198, Rarity.COMMON, mage.cards.h.HeadlongRush.class)); - cards.add(new SetCardInfo("Healing Salve", 16, Rarity.COMMON, mage.cards.h.HealingSalve.class)); - cards.add(new SetCardInfo("Heat Ray", 199, Rarity.COMMON, mage.cards.h.HeatRay.class)); - cards.add(new SetCardInfo("Herald of Serra", 17, Rarity.RARE, mage.cards.h.HeraldOfSerra.class)); - cards.add(new SetCardInfo("Hermetic Study", 78, Rarity.COMMON, mage.cards.h.HermeticStudy.class)); - cards.add(new SetCardInfo("Hibernation", 79, Rarity.UNCOMMON, mage.cards.h.Hibernation.class)); - cards.add(new SetCardInfo("Hidden Ancients", 260, Rarity.UNCOMMON, mage.cards.h.HiddenAncients.class)); - cards.add(new SetCardInfo("Hidden Guerrillas", 261, Rarity.UNCOMMON, mage.cards.h.HiddenGuerrillas.class)); - cards.add(new SetCardInfo("Hidden Herd", 262, Rarity.RARE, mage.cards.h.HiddenHerd.class)); - cards.add(new SetCardInfo("Hidden Predators", 263, Rarity.RARE, mage.cards.h.HiddenPredators.class)); - cards.add(new SetCardInfo("Hidden Spider", 264, Rarity.COMMON, mage.cards.h.HiddenSpider.class)); - cards.add(new SetCardInfo("Hidden Stag", 265, Rarity.RARE, mage.cards.h.HiddenStag.class)); - cards.add(new SetCardInfo("Hollow Dogs", 137, Rarity.COMMON, mage.cards.h.HollowDogs.class)); - cards.add(new SetCardInfo("Hopping Automaton", 297, Rarity.UNCOMMON, mage.cards.h.HoppingAutomaton.class)); - cards.add(new SetCardInfo("Horseshoe Crab", 80, Rarity.COMMON, mage.cards.h.HorseshoeCrab.class)); - cards.add(new SetCardInfo("Humble", 18, Rarity.UNCOMMON, mage.cards.h.Humble.class)); - cards.add(new SetCardInfo("Hush", 266, Rarity.COMMON, mage.cards.h.Hush.class)); - cards.add(new SetCardInfo("Ill-Gotten Gains", 138, Rarity.RARE, mage.cards.i.IllGottenGains.class)); - cards.add(new SetCardInfo("Imaginary Pet", 81, Rarity.RARE, mage.cards.i.ImaginaryPet.class)); - cards.add(new SetCardInfo("Intrepid Hero", 19, Rarity.RARE, mage.cards.i.IntrepidHero.class)); - cards.add(new SetCardInfo("Island", 335, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 336, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 337, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 338, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Jagged Lightning", 200, Rarity.UNCOMMON, mage.cards.j.JaggedLightning.class)); - cards.add(new SetCardInfo("Karn, Silver Golem", 298, Rarity.RARE, mage.cards.k.KarnSilverGolem.class)); - cards.add(new SetCardInfo("Launch", 82, Rarity.COMMON, mage.cards.l.Launch.class)); - cards.add(new SetCardInfo("Lay Waste", 201, Rarity.COMMON, mage.cards.l.LayWaste.class)); - cards.add(new SetCardInfo("Lifeline", 299, Rarity.RARE, mage.cards.l.Lifeline.class)); - cards.add(new SetCardInfo("Lightning Dragon", 202, Rarity.RARE, mage.cards.l.LightningDragon.class)); - cards.add(new SetCardInfo("Lilting Refrain", 83, Rarity.UNCOMMON, mage.cards.l.LiltingRefrain.class)); - cards.add(new SetCardInfo("Lingering Mirage", 84, Rarity.UNCOMMON, mage.cards.l.LingeringMirage.class)); - cards.add(new SetCardInfo("Looming Shade", 139, Rarity.COMMON, mage.cards.l.LoomingShade.class)); - cards.add(new SetCardInfo("Lotus Blossom", 300, Rarity.RARE, mage.cards.l.LotusBlossom.class)); - cards.add(new SetCardInfo("Lull", 267, Rarity.COMMON, mage.cards.l.Lull.class)); - cards.add(new SetCardInfo("Lurking Evil", 140, Rarity.RARE, mage.cards.l.LurkingEvil.class)); - cards.add(new SetCardInfo("Mana Leech", 141, Rarity.UNCOMMON, mage.cards.m.ManaLeech.class)); - cards.add(new SetCardInfo("Meltdown", 203, Rarity.UNCOMMON, mage.cards.m.Meltdown.class)); - cards.add(new SetCardInfo("Metrognome", 301, Rarity.RARE, mage.cards.m.Metrognome.class)); - cards.add(new SetCardInfo("Midsummer Revel", 268, Rarity.RARE, mage.cards.m.MidsummerRevel.class)); - cards.add(new SetCardInfo("Mishra's Helix", 302, Rarity.RARE, mage.cards.m.MishrasHelix.class)); - cards.add(new SetCardInfo("Mobile Fort", 303, Rarity.UNCOMMON, mage.cards.m.MobileFort.class)); - cards.add(new SetCardInfo("Monk Idealist", 20, Rarity.UNCOMMON, mage.cards.m.MonkIdealist.class)); - cards.add(new SetCardInfo("Monk Realist", 21, Rarity.COMMON, mage.cards.m.MonkRealist.class)); - cards.add(new SetCardInfo("Morphling", 85, Rarity.RARE, mage.cards.m.Morphling.class)); - cards.add(new SetCardInfo("Mountain", 343, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 344, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 345, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 346, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("No Rest for the Wicked", 142, Rarity.UNCOMMON, mage.cards.n.NoRestForTheWicked.class)); - cards.add(new SetCardInfo("Noetic Scales", 304, Rarity.RARE, mage.cards.n.NoeticScales.class)); - cards.add(new SetCardInfo("Okk", 204, Rarity.RARE, mage.cards.o.Okk.class)); - cards.add(new SetCardInfo("Opal Acrolith", 22, Rarity.UNCOMMON, mage.cards.o.OpalAcrolith.class)); - cards.add(new SetCardInfo("Opal Archangel", 23, Rarity.RARE, mage.cards.o.OpalArchangel.class)); - cards.add(new SetCardInfo("Opal Caryatid", 24, Rarity.COMMON, mage.cards.o.OpalCaryatid.class)); - cards.add(new SetCardInfo("Opal Gargoyle", 25, Rarity.COMMON, mage.cards.o.OpalGargoyle.class)); - cards.add(new SetCardInfo("Opal Titan", 26, Rarity.RARE, mage.cards.o.OpalTitan.class)); - cards.add(new SetCardInfo("Oppression", 143, Rarity.RARE, mage.cards.o.Oppression.class)); - cards.add(new SetCardInfo("Order of Yawgmoth", 144, Rarity.UNCOMMON, mage.cards.o.OrderOfYawgmoth.class)); - cards.add(new SetCardInfo("Outmaneuver", 205, Rarity.UNCOMMON, mage.cards.o.Outmaneuver.class)); - cards.add(new SetCardInfo("Pacifism", 27, Rarity.COMMON, mage.cards.p.Pacifism.class)); - cards.add(new SetCardInfo("Parasitic Bond", 145, Rarity.UNCOMMON, mage.cards.p.ParasiticBond.class)); - cards.add(new SetCardInfo("Pariah", 28, Rarity.RARE, mage.cards.p.Pariah.class)); - cards.add(new SetCardInfo("Path of Peace", 29, Rarity.COMMON, mage.cards.p.PathOfPeace.class)); - cards.add(new SetCardInfo("Pegasus Charger", 30, Rarity.COMMON, mage.cards.p.PegasusCharger.class)); - cards.add(new SetCardInfo("Pendrell Drake", 86, Rarity.COMMON, mage.cards.p.PendrellDrake.class)); - cards.add(new SetCardInfo("Pendrell Flux", 87, Rarity.COMMON, mage.cards.p.PendrellFlux.class)); - cards.add(new SetCardInfo("Peregrine Drake", 88, Rarity.UNCOMMON, mage.cards.p.PeregrineDrake.class)); - cards.add(new SetCardInfo("Persecute", 146, Rarity.RARE, mage.cards.p.Persecute.class)); - cards.add(new SetCardInfo("Pestilence", 147, Rarity.COMMON, mage.cards.p.Pestilence.class)); - cards.add(new SetCardInfo("Phyrexian Colossus", 305, Rarity.RARE, mage.cards.p.PhyrexianColossus.class)); - cards.add(new SetCardInfo("Phyrexian Ghoul", 148, Rarity.COMMON, mage.cards.p.PhyrexianGhoul.class)); - cards.add(new SetCardInfo("Phyrexian Processor", 306, Rarity.RARE, mage.cards.p.PhyrexianProcessor.class)); - cards.add(new SetCardInfo("Phyrexian Tower", 322, Rarity.RARE, mage.cards.p.PhyrexianTower.class)); - cards.add(new SetCardInfo("Pit Trap", 307, Rarity.UNCOMMON, mage.cards.p.PitTrap.class)); - cards.add(new SetCardInfo("Plains", 331, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 332, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 333, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 334, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Planar Birth", 31, Rarity.RARE, mage.cards.p.PlanarBirth.class)); - cards.add(new SetCardInfo("Planar Void", 149, Rarity.UNCOMMON, mage.cards.p.PlanarVoid.class)); - cards.add(new SetCardInfo("Polluted Mire", 323, Rarity.COMMON, mage.cards.p.PollutedMire.class)); - cards.add(new SetCardInfo("Pouncing Jaguar", 269, Rarity.COMMON, mage.cards.p.PouncingJaguar.class)); - cards.add(new SetCardInfo("Power Sink", 89, Rarity.COMMON, mage.cards.p.PowerSink.class)); - cards.add(new SetCardInfo("Power Taint", 90, Rarity.COMMON, mage.cards.p.PowerTaint.class)); - cards.add(new SetCardInfo("Presence of the Master", 32, Rarity.UNCOMMON, mage.cards.p.PresenceOfTheMaster.class)); - cards.add(new SetCardInfo("Priest of Gix", 150, Rarity.UNCOMMON, mage.cards.p.PriestOfGix.class)); - cards.add(new SetCardInfo("Priest of Titania", 270, Rarity.COMMON, mage.cards.p.PriestOfTitania.class)); - cards.add(new SetCardInfo("Purging Scythe", 308, Rarity.RARE, mage.cards.p.PurgingScythe.class)); - cards.add(new SetCardInfo("Rain of Filth", 151, Rarity.UNCOMMON, mage.cards.r.RainOfFilth.class)); - cards.add(new SetCardInfo("Rain of Salt", 206, Rarity.UNCOMMON, mage.cards.r.RainOfSalt.class)); - cards.add(new SetCardInfo("Ravenous Skirge", 152, Rarity.COMMON, mage.cards.r.RavenousSkirge.class)); - cards.add(new SetCardInfo("Raze", 207, Rarity.COMMON, mage.cards.r.Raze.class)); - cards.add(new SetCardInfo("Recantation", 91, Rarity.RARE, mage.cards.r.Recantation.class)); - cards.add(new SetCardInfo("Reclusive Wight", 153, Rarity.UNCOMMON, mage.cards.r.ReclusiveWight.class)); - cards.add(new SetCardInfo("Redeem", 33, Rarity.UNCOMMON, mage.cards.r.Redeem.class)); - cards.add(new SetCardInfo("Reflexes", 208, Rarity.COMMON, mage.cards.r.Reflexes.class)); - cards.add(new SetCardInfo("Rejuvenate", 271, Rarity.COMMON, mage.cards.r.Rejuvenate.class)); - cards.add(new SetCardInfo("Remembrance", 34, Rarity.RARE, mage.cards.r.Remembrance.class)); - cards.add(new SetCardInfo("Remote Isle", 324, Rarity.COMMON, mage.cards.r.RemoteIsle.class)); - cards.add(new SetCardInfo("Reprocess", 154, Rarity.RARE, mage.cards.r.Reprocess.class)); - cards.add(new SetCardInfo("Rescind", 92, Rarity.COMMON, mage.cards.r.Rescind.class)); - cards.add(new SetCardInfo("Retaliation", 272, Rarity.UNCOMMON, mage.cards.r.Retaliation.class)); - cards.add(new SetCardInfo("Retromancer", 209, Rarity.COMMON, mage.cards.r.Retromancer.class)); - cards.add(new SetCardInfo("Rewind", 93, Rarity.COMMON, mage.cards.r.Rewind.class)); - cards.add(new SetCardInfo("Rumbling Crescendo", 210, Rarity.RARE, mage.cards.r.RumblingCrescendo.class)); - cards.add(new SetCardInfo("Rune of Protection: Artifacts", 35, Rarity.UNCOMMON, mage.cards.r.RuneOfProtectionArtifacts.class)); - cards.add(new SetCardInfo("Rune of Protection: Black", 36, Rarity.COMMON, mage.cards.r.RuneOfProtectionBlack.class)); - cards.add(new SetCardInfo("Rune of Protection: Blue", 37, Rarity.COMMON, mage.cards.r.RuneOfProtectionBlue.class)); - cards.add(new SetCardInfo("Rune of Protection: Green", 38, Rarity.COMMON, mage.cards.r.RuneOfProtectionGreen.class)); - cards.add(new SetCardInfo("Rune of Protection: Lands", 39, Rarity.RARE, mage.cards.r.RuneOfProtectionLands.class)); - cards.add(new SetCardInfo("Rune of Protection: Red", 40, Rarity.COMMON, mage.cards.r.RuneOfProtectionRed.class)); - cards.add(new SetCardInfo("Rune of Protection: White", 41, Rarity.COMMON, mage.cards.r.RuneOfProtectionWhite.class)); - cards.add(new SetCardInfo("Sanctum Custodian", 42, Rarity.COMMON, mage.cards.s.SanctumCustodian.class)); - cards.add(new SetCardInfo("Sanctum Guardian", 43, Rarity.UNCOMMON, mage.cards.s.SanctumGuardian.class)); - cards.add(new SetCardInfo("Sandbar Merfolk", 94, Rarity.COMMON, mage.cards.s.SandbarMerfolk.class)); - cards.add(new SetCardInfo("Sandbar Serpent", 95, Rarity.UNCOMMON, mage.cards.s.SandbarSerpent.class)); - cards.add(new SetCardInfo("Sanguine Guard", 155, Rarity.UNCOMMON, mage.cards.s.SanguineGuard.class)); - cards.add(new SetCardInfo("Scald", 211, Rarity.UNCOMMON, mage.cards.s.Scald.class)); - cards.add(new SetCardInfo("Scoria Wurm", 212, Rarity.RARE, mage.cards.s.ScoriaWurm.class)); - cards.add(new SetCardInfo("Scrap", 213, Rarity.COMMON, mage.cards.s.Scrap.class)); - cards.add(new SetCardInfo("Seasoned Marshal", 44, Rarity.UNCOMMON, mage.cards.s.SeasonedMarshal.class)); - cards.add(new SetCardInfo("Serra Avatar", 45, Rarity.RARE, mage.cards.s.SerraAvatar.class)); - cards.add(new SetCardInfo("Serra's Embrace", 47, Rarity.UNCOMMON, mage.cards.s.SerrasEmbrace.class)); - cards.add(new SetCardInfo("Serra's Hymn", 48, Rarity.UNCOMMON, mage.cards.s.SerrasHymn.class)); - cards.add(new SetCardInfo("Serra's Liturgy", 49, Rarity.RARE, mage.cards.s.SerrasLiturgy.class)); - cards.add(new SetCardInfo("Serra's Sanctum", 325, Rarity.RARE, mage.cards.s.SerrasSanctum.class)); - cards.add(new SetCardInfo("Serra Zealot", 46, Rarity.COMMON, mage.cards.s.SerraZealot.class)); - cards.add(new SetCardInfo("Shimmering Barrier", 50, Rarity.UNCOMMON, mage.cards.s.ShimmeringBarrier.class)); - cards.add(new SetCardInfo("Shivan Gorge", 326, Rarity.RARE, mage.cards.s.ShivanGorge.class)); - cards.add(new SetCardInfo("Shivan Hellkite", 214, Rarity.RARE, mage.cards.s.ShivanHellkite.class)); - cards.add(new SetCardInfo("Shivan Raptor", 215, Rarity.UNCOMMON, mage.cards.s.ShivanRaptor.class)); - cards.add(new SetCardInfo("Shiv's Embrace", 216, Rarity.UNCOMMON, mage.cards.s.ShivsEmbrace.class)); - cards.add(new SetCardInfo("Show and Tell", 96, Rarity.RARE, mage.cards.s.ShowAndTell.class)); - cards.add(new SetCardInfo("Shower of Sparks", 217, Rarity.COMMON, mage.cards.s.ShowerOfSparks.class)); - cards.add(new SetCardInfo("Sicken", 156, Rarity.COMMON, mage.cards.s.Sicken.class)); - cards.add(new SetCardInfo("Silent Attendant", 51, Rarity.COMMON, mage.cards.s.SilentAttendant.class)); - cards.add(new SetCardInfo("Skirge Familiar", 157, Rarity.UNCOMMON, mage.cards.s.SkirgeFamiliar.class)); - cards.add(new SetCardInfo("Skittering Skirge", 158, Rarity.COMMON, mage.cards.s.SkitteringSkirge.class)); - cards.add(new SetCardInfo("Sleeper Agent", 159, Rarity.RARE, mage.cards.s.SleeperAgent.class)); - cards.add(new SetCardInfo("Slippery Karst", 327, Rarity.COMMON, mage.cards.s.SlipperyKarst.class)); - cards.add(new SetCardInfo("Smokestack", 309, Rarity.RARE, mage.cards.s.Smokestack.class)); - cards.add(new SetCardInfo("Smoldering Crater", 328, Rarity.COMMON, mage.cards.s.SmolderingCrater.class)); - cards.add(new SetCardInfo("Sneak Attack", 218, Rarity.RARE, mage.cards.s.SneakAttack.class)); - cards.add(new SetCardInfo("Somnophore", 97, Rarity.RARE, mage.cards.s.Somnophore.class)); - cards.add(new SetCardInfo("Songstitcher", 52, Rarity.UNCOMMON, mage.cards.s.Songstitcher.class)); - cards.add(new SetCardInfo("Soul Sculptor", 53, Rarity.RARE, mage.cards.s.SoulSculptor.class)); - cards.add(new SetCardInfo("Spined Fluke", 160, Rarity.UNCOMMON, mage.cards.s.SpinedFluke.class)); - cards.add(new SetCardInfo("Spire Owl", 98, Rarity.COMMON, mage.cards.s.SpireOwl.class)); - cards.add(new SetCardInfo("Sporogenesis", 273, Rarity.RARE, mage.cards.s.Sporogenesis.class)); - cards.add(new SetCardInfo("Spreading Algae", 274, Rarity.UNCOMMON, mage.cards.s.SpreadingAlgae.class)); - cards.add(new SetCardInfo("Steam Blast", 219, Rarity.UNCOMMON, mage.cards.s.SteamBlast.class)); - cards.add(new SetCardInfo("Stern Proctor", 99, Rarity.UNCOMMON, mage.cards.s.SternProctor.class)); - cards.add(new SetCardInfo("Stroke of Genius", 100, Rarity.RARE, mage.cards.s.StrokeOfGenius.class)); - cards.add(new SetCardInfo("Sulfuric Vapors", 220, Rarity.RARE, mage.cards.s.SulfuricVapors.class)); - cards.add(new SetCardInfo("Sunder", 101, Rarity.RARE, mage.cards.s.Sunder.class)); - cards.add(new SetCardInfo("Swamp", 339, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 340, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 341, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 342, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Symbiosis", 275, Rarity.COMMON, mage.cards.s.Symbiosis.class)); - cards.add(new SetCardInfo("Tainted Aether", 161, Rarity.RARE, mage.cards.t.TaintedAether.class)); - cards.add(new SetCardInfo("Telepathy", 102, Rarity.UNCOMMON, mage.cards.t.Telepathy.class)); - cards.add(new SetCardInfo("Temporal Aperture", 310, Rarity.RARE, mage.cards.t.TemporalAperture.class)); - cards.add(new SetCardInfo("Thran Quarry", 329, Rarity.RARE, mage.cards.t.ThranQuarry.class)); - cards.add(new SetCardInfo("Thran Turbine", 311, Rarity.UNCOMMON, mage.cards.t.ThranTurbine.class)); - cards.add(new SetCardInfo("Thundering Giant", 221, Rarity.UNCOMMON, mage.cards.t.ThunderingGiant.class)); - cards.add(new SetCardInfo("Time Spiral", 103, Rarity.RARE, mage.cards.t.TimeSpiral.class)); - cards.add(new SetCardInfo("Titania's Boon", 276, Rarity.UNCOMMON, mage.cards.t.TitaniasBoon.class)); - cards.add(new SetCardInfo("Titania's Chosen", 277, Rarity.UNCOMMON, mage.cards.t.TitaniasChosen.class)); - cards.add(new SetCardInfo("Tolarian Academy", 330, Rarity.RARE, mage.cards.t.TolarianAcademy.class)); - cards.add(new SetCardInfo("Tolarian Winds", 104, Rarity.COMMON, mage.cards.t.TolarianWinds.class)); - cards.add(new SetCardInfo("Torch Song", 222, Rarity.UNCOMMON, mage.cards.t.TorchSong.class)); - cards.add(new SetCardInfo("Treefolk Seedlings", 278, Rarity.UNCOMMON, mage.cards.t.TreefolkSeedlings.class)); - cards.add(new SetCardInfo("Treetop Rangers", 279, Rarity.COMMON, mage.cards.t.TreetopRangers.class)); - cards.add(new SetCardInfo("Turnabout", 105, Rarity.UNCOMMON, mage.cards.t.Turnabout.class)); - cards.add(new SetCardInfo("Umbilicus", 312, Rarity.RARE, mage.cards.u.Umbilicus.class)); - cards.add(new SetCardInfo("Unnerve", 162, Rarity.COMMON, mage.cards.u.Unnerve.class)); - cards.add(new SetCardInfo("Unworthy Dead", 163, Rarity.COMMON, mage.cards.u.UnworthyDead.class)); - cards.add(new SetCardInfo("Urza's Armor", 313, Rarity.UNCOMMON, mage.cards.u.UrzasArmor.class)); - cards.add(new SetCardInfo("Vampiric Embrace", 164, Rarity.UNCOMMON, mage.cards.v.VampiricEmbrace.class)); - cards.add(new SetCardInfo("Vebulid", 165, Rarity.RARE, mage.cards.v.Vebulid.class)); - cards.add(new SetCardInfo("Veil of Birds", 106, Rarity.COMMON, mage.cards.v.VeilOfBirds.class)); - cards.add(new SetCardInfo("Veiled Apparition", 107, Rarity.UNCOMMON, mage.cards.v.VeiledApparition.class)); - cards.add(new SetCardInfo("Veiled Crocodile", 108, Rarity.RARE, mage.cards.v.VeiledCrocodile.class)); - cards.add(new SetCardInfo("Veiled Sentry", 109, Rarity.UNCOMMON, mage.cards.v.VeiledSentry.class)); - cards.add(new SetCardInfo("Veiled Serpent", 110, Rarity.COMMON, mage.cards.v.VeiledSerpent.class)); - cards.add(new SetCardInfo("Venomous Fangs", 280, Rarity.COMMON, mage.cards.v.VenomousFangs.class)); - cards.add(new SetCardInfo("Vernal Bloom", 281, Rarity.RARE, mage.cards.v.VernalBloom.class)); - cards.add(new SetCardInfo("Viashino Outrider", 223, Rarity.COMMON, mage.cards.v.ViashinoOutrider.class)); - cards.add(new SetCardInfo("Viashino Runner", 224, Rarity.COMMON, mage.cards.v.ViashinoRunner.class)); - cards.add(new SetCardInfo("Viashino Sandswimmer", 225, Rarity.RARE, mage.cards.v.ViashinoSandswimmer.class)); - cards.add(new SetCardInfo("Viashino Weaponsmith", 226, Rarity.COMMON, mage.cards.v.ViashinoWeaponsmith.class)); - cards.add(new SetCardInfo("Victimize", 166, Rarity.UNCOMMON, mage.cards.v.Victimize.class)); - cards.add(new SetCardInfo("Vile Requiem", 167, Rarity.UNCOMMON, mage.cards.v.VileRequiem.class)); - cards.add(new SetCardInfo("Voice of Grace", 54, Rarity.UNCOMMON, mage.cards.v.VoiceOfGrace.class)); - cards.add(new SetCardInfo("Voice of Law", 55, Rarity.UNCOMMON, mage.cards.v.VoiceOfLaw.class)); - cards.add(new SetCardInfo("Voltaic Key", 314, Rarity.UNCOMMON, mage.cards.v.VoltaicKey.class)); - cards.add(new SetCardInfo("Vug Lizard", 227, Rarity.UNCOMMON, mage.cards.v.VugLizard.class)); - cards.add(new SetCardInfo("War Dance", 282, Rarity.UNCOMMON, mage.cards.w.WarDance.class)); - cards.add(new SetCardInfo("Wall of Junk", 315, Rarity.UNCOMMON, mage.cards.w.WallOfJunk.class)); - cards.add(new SetCardInfo("Waylay", 56, Rarity.UNCOMMON, mage.cards.w.Waylay.class)); - cards.add(new SetCardInfo("Western Paladin", 168, Rarity.RARE, mage.cards.w.WesternPaladin.class)); - cards.add(new SetCardInfo("Whetstone", 316, Rarity.RARE, mage.cards.w.Whetstone.class)); - cards.add(new SetCardInfo("Whirlwind", 283, Rarity.RARE, mage.cards.w.Whirlwind.class)); - cards.add(new SetCardInfo("Wild Dogs", 284, Rarity.COMMON, mage.cards.w.WildDogs.class)); - cards.add(new SetCardInfo("Wildfire", 228, Rarity.RARE, mage.cards.w.Wildfire.class)); - cards.add(new SetCardInfo("Windfall", 111, Rarity.UNCOMMON, mage.cards.w.Windfall.class)); - cards.add(new SetCardInfo("Winding Wurm", 285, Rarity.COMMON, mage.cards.w.WindingWurm.class)); - cards.add(new SetCardInfo("Wirecat", 317, Rarity.UNCOMMON, mage.cards.w.Wirecat.class)); - cards.add(new SetCardInfo("Witch Engine", 169, Rarity.RARE, mage.cards.w.WitchEngine.class)); - cards.add(new SetCardInfo("Wizard Mentor", 112, Rarity.COMMON, mage.cards.w.WizardMentor.class)); - cards.add(new SetCardInfo("Worn Powerstone", 318, Rarity.UNCOMMON, mage.cards.w.WornPowerstone.class)); - cards.add(new SetCardInfo("Worship", 57, Rarity.RARE, mage.cards.w.Worship.class)); - cards.add(new SetCardInfo("Yawgmoth's Edict", 170, Rarity.UNCOMMON, mage.cards.y.YawgmothsEdict.class)); - cards.add(new SetCardInfo("Yawgmoth's Will", 171, Rarity.RARE, mage.cards.y.YawgmothsWill.class)); - cards.add(new SetCardInfo("Zephid", 113, Rarity.RARE, mage.cards.z.Zephid.class)); - cards.add(new SetCardInfo("Zephid's Embrace", 114, Rarity.UNCOMMON, mage.cards.z.ZephidsEmbrace.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author Backfir3 + */ +public final class UrzasSaga extends ExpansionSet { + + private static final UrzasSaga instance = new UrzasSaga(); + + public static UrzasSaga getInstance() { + return instance; + } + + private UrzasSaga() { + super("Urza's Saga", "USG", ExpansionSet.buildDate(1998, 10, 12), SetType.EXPANSION); + this.blockName = "Urza"; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Absolute Grace", 1, Rarity.UNCOMMON, mage.cards.a.AbsoluteGrace.class)); + cards.add(new SetCardInfo("Absolute Law", 2, Rarity.UNCOMMON, mage.cards.a.AbsoluteLaw.class)); + cards.add(new SetCardInfo("Abundance", 229, Rarity.RARE, mage.cards.a.Abundance.class)); + cards.add(new SetCardInfo("Abyssal Horror", 115, Rarity.RARE, mage.cards.a.AbyssalHorror.class)); + cards.add(new SetCardInfo("Academy Researchers", 58, Rarity.UNCOMMON, mage.cards.a.AcademyResearchers.class)); + cards.add(new SetCardInfo("Acidic Soil", 172, Rarity.UNCOMMON, mage.cards.a.AcidicSoil.class)); + cards.add(new SetCardInfo("Acridian", 230, Rarity.COMMON, mage.cards.a.Acridian.class)); + cards.add(new SetCardInfo("Albino Troll", 231, Rarity.UNCOMMON, mage.cards.a.AlbinoTroll.class)); + cards.add(new SetCardInfo("Anaconda", 232, Rarity.UNCOMMON, mage.cards.a.Anaconda.class)); + cards.add(new SetCardInfo("Angelic Chorus", 3, Rarity.RARE, mage.cards.a.AngelicChorus.class)); + cards.add(new SetCardInfo("Angelic Page", 4, Rarity.COMMON, mage.cards.a.AngelicPage.class)); + cards.add(new SetCardInfo("Annul", 59, Rarity.COMMON, mage.cards.a.Annul.class)); + cards.add(new SetCardInfo("Antagonism", 173, Rarity.RARE, mage.cards.a.Antagonism.class)); + cards.add(new SetCardInfo("Arcane Laboratory", 60, Rarity.UNCOMMON, mage.cards.a.ArcaneLaboratory.class)); + cards.add(new SetCardInfo("Arc Lightning", 174, Rarity.COMMON, mage.cards.a.ArcLightning.class)); + cards.add(new SetCardInfo("Argothian Elder", 233, Rarity.UNCOMMON, mage.cards.a.ArgothianElder.class)); + cards.add(new SetCardInfo("Argothian Enchantress", 234, Rarity.RARE, mage.cards.a.ArgothianEnchantress.class)); + cards.add(new SetCardInfo("Argothian Swine", 235, Rarity.COMMON, mage.cards.a.ArgothianSwine.class)); + cards.add(new SetCardInfo("Argothian Wurm", 236, Rarity.RARE, mage.cards.a.ArgothianWurm.class)); + cards.add(new SetCardInfo("Attunement", 61, Rarity.RARE, mage.cards.a.Attunement.class)); + cards.add(new SetCardInfo("Back to Basics", 62, Rarity.RARE, mage.cards.b.BackToBasics.class)); + cards.add(new SetCardInfo("Barrin, Master Wizard", 63, Rarity.RARE, mage.cards.b.BarrinMasterWizard.class)); + cards.add(new SetCardInfo("Barrin's Codex", 286, Rarity.RARE, mage.cards.b.BarrinsCodex.class)); + cards.add(new SetCardInfo("Bedlam", 175, Rarity.RARE, mage.cards.b.Bedlam.class)); + cards.add(new SetCardInfo("Befoul", 116, Rarity.COMMON, mage.cards.b.Befoul.class)); + cards.add(new SetCardInfo("Bereavement", 117, Rarity.UNCOMMON, mage.cards.b.Bereavement.class)); + cards.add(new SetCardInfo("Blanchwood Armor", 237, Rarity.UNCOMMON, mage.cards.b.BlanchwoodArmor.class)); + cards.add(new SetCardInfo("Blanchwood Treefolk", 238, Rarity.COMMON, mage.cards.b.BlanchwoodTreefolk.class)); + cards.add(new SetCardInfo("Blasted Landscape", 319, Rarity.UNCOMMON, mage.cards.b.BlastedLandscape.class)); + cards.add(new SetCardInfo("Blood Vassal", 118, Rarity.COMMON, mage.cards.b.BloodVassal.class)); + cards.add(new SetCardInfo("Bog Raiders", 119, Rarity.COMMON, mage.cards.b.BogRaiders.class)); + cards.add(new SetCardInfo("Brand", 176, Rarity.RARE, mage.cards.b.Brand.class)); + cards.add(new SetCardInfo("Bravado", 177, Rarity.COMMON, mage.cards.b.Bravado.class)); + cards.add(new SetCardInfo("Breach", 120, Rarity.COMMON, mage.cards.b.Breach.class)); + cards.add(new SetCardInfo("Brilliant Halo", 5, Rarity.COMMON, mage.cards.b.BrilliantHalo.class)); + cards.add(new SetCardInfo("Bull Hippo", 239, Rarity.UNCOMMON, mage.cards.b.BullHippo.class)); + cards.add(new SetCardInfo("Bulwark", 178, Rarity.RARE, mage.cards.b.Bulwark.class)); + cards.add(new SetCardInfo("Cackling Fiend", 121, Rarity.COMMON, mage.cards.c.CacklingFiend.class)); + cards.add(new SetCardInfo("Carpet of Flowers", 240, Rarity.UNCOMMON, mage.cards.c.CarpetOfFlowers.class)); + cards.add(new SetCardInfo("Carrion Beetles", 122, Rarity.COMMON, mage.cards.c.CarrionBeetles.class)); + cards.add(new SetCardInfo("Catalog", 64, Rarity.COMMON, mage.cards.c.Catalog.class)); + cards.add(new SetCardInfo("Catastrophe", 6, Rarity.RARE, mage.cards.c.Catastrophe.class)); + cards.add(new SetCardInfo("Cathodion", 287, Rarity.UNCOMMON, mage.cards.c.Cathodion.class)); + cards.add(new SetCardInfo("Cave Tiger", 241, Rarity.COMMON, mage.cards.c.CaveTiger.class)); + cards.add(new SetCardInfo("Child of Gaea", 242, Rarity.RARE, mage.cards.c.ChildOfGaea.class)); + cards.add(new SetCardInfo("Chimeric Staff", 288, Rarity.RARE, mage.cards.c.ChimericStaff.class)); + cards.add(new SetCardInfo("Citanul Centaurs", 243, Rarity.RARE, mage.cards.c.CitanulCentaurs.class)); + cards.add(new SetCardInfo("Citanul Flute", 289, Rarity.RARE, mage.cards.c.CitanulFlute.class)); + cards.add(new SetCardInfo("Citanul Hierophants", 244, Rarity.RARE, mage.cards.c.CitanulHierophants.class)); + cards.add(new SetCardInfo("Claws of Gix", 290, Rarity.UNCOMMON, mage.cards.c.ClawsOfGix.class)); + cards.add(new SetCardInfo("Clear", 7, Rarity.UNCOMMON, mage.cards.c.Clear.class)); + cards.add(new SetCardInfo("Cloak of Mists", 65, Rarity.COMMON, mage.cards.c.CloakOfMists.class)); + cards.add(new SetCardInfo("Confiscate", 66, Rarity.UNCOMMON, mage.cards.c.Confiscate.class)); + cards.add(new SetCardInfo("Congregate", 8, Rarity.COMMON, mage.cards.c.Congregate.class)); + cards.add(new SetCardInfo("Contamination", 123, Rarity.RARE, mage.cards.c.Contamination.class)); + cards.add(new SetCardInfo("Copper Gnomes", 291, Rarity.RARE, mage.cards.c.CopperGnomes.class)); + cards.add(new SetCardInfo("Coral Merfolk", 67, Rarity.COMMON, mage.cards.c.CoralMerfolk.class)); + cards.add(new SetCardInfo("Corrupt", 124, Rarity.COMMON, mage.cards.c.Corrupt.class)); + cards.add(new SetCardInfo("Cradle Guard", 245, Rarity.UNCOMMON, mage.cards.c.CradleGuard.class)); + cards.add(new SetCardInfo("Crater Hellion", 179, Rarity.RARE, mage.cards.c.CraterHellion.class)); + cards.add(new SetCardInfo("Crazed Skirge", 125, Rarity.UNCOMMON, mage.cards.c.CrazedSkirge.class)); + cards.add(new SetCardInfo("Crosswinds", 246, Rarity.UNCOMMON, mage.cards.c.Crosswinds.class)); + cards.add(new SetCardInfo("Crystal Chimes", 292, Rarity.UNCOMMON, mage.cards.c.CrystalChimes.class)); + cards.add(new SetCardInfo("Curfew", 68, Rarity.COMMON, mage.cards.c.Curfew.class)); + cards.add(new SetCardInfo("Darkest Hour", 128, Rarity.RARE, mage.cards.d.DarkestHour.class)); + cards.add(new SetCardInfo("Dark Hatchling", 126, Rarity.RARE, mage.cards.d.DarkHatchling.class)); + cards.add(new SetCardInfo("Dark Ritual", 127, Rarity.COMMON, mage.cards.d.DarkRitual.class)); + cards.add(new SetCardInfo("Defensive Formation", 9, Rarity.UNCOMMON, mage.cards.d.DefensiveFormation.class)); + cards.add(new SetCardInfo("Despondency", 129, Rarity.COMMON, mage.cards.d.Despondency.class)); + cards.add(new SetCardInfo("Destructive Urge", 180, Rarity.UNCOMMON, mage.cards.d.DestructiveUrge.class)); + cards.add(new SetCardInfo("Diabolic Servitude", 130, Rarity.UNCOMMON, mage.cards.d.DiabolicServitude.class)); + cards.add(new SetCardInfo("Disciple of Grace", 10, Rarity.COMMON, mage.cards.d.DiscipleOfGrace.class)); + cards.add(new SetCardInfo("Disciple of Law", 11, Rarity.COMMON, mage.cards.d.DiscipleOfLaw.class)); + cards.add(new SetCardInfo("Discordant Dirge", 131, Rarity.RARE, mage.cards.d.DiscordantDirge.class)); + cards.add(new SetCardInfo("Disenchant", 12, Rarity.COMMON, mage.cards.d.Disenchant.class)); + cards.add(new SetCardInfo("Disorder", 181, Rarity.UNCOMMON, mage.cards.d.Disorder.class)); + cards.add(new SetCardInfo("Disruptive Student", 69, Rarity.COMMON, mage.cards.d.DisruptiveStudent.class)); + cards.add(new SetCardInfo("Douse", 70, Rarity.UNCOMMON, mage.cards.d.Douse.class)); + cards.add(new SetCardInfo("Dragon Blood", 293, Rarity.UNCOMMON, mage.cards.d.DragonBlood.class)); + cards.add(new SetCardInfo("Drifting Djinn", 71, Rarity.RARE, mage.cards.d.DriftingDjinn.class)); + cards.add(new SetCardInfo("Drifting Meadow", 320, Rarity.COMMON, mage.cards.d.DriftingMeadow.class)); + cards.add(new SetCardInfo("Dromosaur", 182, Rarity.COMMON, mage.cards.d.Dromosaur.class)); + cards.add(new SetCardInfo("Duress", 132, Rarity.COMMON, mage.cards.d.Duress.class)); + cards.add(new SetCardInfo("Eastern Paladin", 133, Rarity.RARE, mage.cards.e.EasternPaladin.class)); + cards.add(new SetCardInfo("Electryte", 183, Rarity.RARE, mage.cards.e.Electryte.class)); + cards.add(new SetCardInfo("Elite Archers", 13, Rarity.RARE, mage.cards.e.EliteArchers.class)); + cards.add(new SetCardInfo("Elvish Herder", 247, Rarity.COMMON, mage.cards.e.ElvishHerder.class)); + cards.add(new SetCardInfo("Elvish Lyrist", 248, Rarity.COMMON, mage.cards.e.ElvishLyrist.class)); + cards.add(new SetCardInfo("Enchantment Alteration", 72, Rarity.UNCOMMON, mage.cards.e.EnchantmentAlteration.class)); + cards.add(new SetCardInfo("Endless Wurm", 249, Rarity.RARE, mage.cards.e.EndlessWurm.class)); + cards.add(new SetCardInfo("Endoskeleton", 294, Rarity.UNCOMMON, mage.cards.e.Endoskeleton.class)); + cards.add(new SetCardInfo("Energy Field", 73, Rarity.RARE, mage.cards.e.EnergyField.class)); + cards.add(new SetCardInfo("Exhaustion", 74, Rarity.UNCOMMON, mage.cards.e.Exhaustion.class)); + cards.add(new SetCardInfo("Exhume", 134, Rarity.COMMON, mage.cards.e.Exhume.class)); + cards.add(new SetCardInfo("Exploration", 250, Rarity.RARE, mage.cards.e.Exploration.class)); + cards.add(new SetCardInfo("Expunge", 135, Rarity.COMMON, mage.cards.e.Expunge.class)); + cards.add(new SetCardInfo("Faith Healer", 14, Rarity.RARE, mage.cards.f.FaithHealer.class)); + cards.add(new SetCardInfo("Falter", 184, Rarity.COMMON, mage.cards.f.Falter.class)); + cards.add(new SetCardInfo("Fault Line", 185, Rarity.RARE, mage.cards.f.FaultLine.class)); + cards.add(new SetCardInfo("Fecundity", 251, Rarity.UNCOMMON, mage.cards.f.Fecundity.class)); + cards.add(new SetCardInfo("Fertile Ground", 252, Rarity.COMMON, mage.cards.f.FertileGround.class)); + cards.add(new SetCardInfo("Fiery Mantle", 186, Rarity.COMMON, mage.cards.f.FieryMantle.class)); + cards.add(new SetCardInfo("Fire Ants", 187, Rarity.UNCOMMON, mage.cards.f.FireAnts.class)); + cards.add(new SetCardInfo("Flesh Reaver", 136, Rarity.UNCOMMON, mage.cards.f.FleshReaver.class)); + cards.add(new SetCardInfo("Fluctuator", 295, Rarity.RARE, mage.cards.f.Fluctuator.class)); + cards.add(new SetCardInfo("Fog Bank", 75, Rarity.UNCOMMON, mage.cards.f.FogBank.class)); + cards.add(new SetCardInfo("Forest", 347, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 348, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 349, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 350, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Fortitude", 253, Rarity.COMMON, mage.cards.f.Fortitude.class)); + cards.add(new SetCardInfo("Gaea's Bounty", 254, Rarity.COMMON, mage.cards.g.GaeasBounty.class)); + cards.add(new SetCardInfo("Gaea's Cradle", 321, Rarity.RARE, mage.cards.g.GaeasCradle.class)); + cards.add(new SetCardInfo("Gaea's Embrace", 255, Rarity.UNCOMMON, mage.cards.g.GaeasEmbrace.class)); + cards.add(new SetCardInfo("Gamble", 188, Rarity.RARE, mage.cards.g.Gamble.class)); + cards.add(new SetCardInfo("Gilded Drake", 76, Rarity.RARE, mage.cards.g.GildedDrake.class)); + cards.add(new SetCardInfo("Glorious Anthem", 15, Rarity.RARE, mage.cards.g.GloriousAnthem.class)); + cards.add(new SetCardInfo("Goblin Cadets", 189, Rarity.UNCOMMON, mage.cards.g.GoblinCadets.class)); + cards.add(new SetCardInfo("Goblin Lackey", 190, Rarity.UNCOMMON, mage.cards.g.GoblinLackey.class)); + cards.add(new SetCardInfo("Goblin Matron", 191, Rarity.COMMON, mage.cards.g.GoblinMatron.class)); + cards.add(new SetCardInfo("Goblin Offensive", 192, Rarity.UNCOMMON, mage.cards.g.GoblinOffensive.class)); + cards.add(new SetCardInfo("Goblin Patrol", 193, Rarity.COMMON, mage.cards.g.GoblinPatrol.class)); + cards.add(new SetCardInfo("Goblin Raider", 194, Rarity.COMMON, mage.cards.g.GoblinRaider.class)); + cards.add(new SetCardInfo("Goblin Spelunkers", 195, Rarity.COMMON, mage.cards.g.GoblinSpelunkers.class)); + cards.add(new SetCardInfo("Goblin War Buggy", 196, Rarity.COMMON, mage.cards.g.GoblinWarBuggy.class)); + cards.add(new SetCardInfo("Gorilla Warrior", 256, Rarity.COMMON, mage.cards.g.GorillaWarrior.class)); + cards.add(new SetCardInfo("Grafted Skullcap", 296, Rarity.RARE, mage.cards.g.GraftedSkullcap.class)); + cards.add(new SetCardInfo("Greater Good", 257, Rarity.RARE, mage.cards.g.GreaterGood.class)); + cards.add(new SetCardInfo("Great Whale", 77, Rarity.RARE, mage.cards.g.GreatWhale.class)); + cards.add(new SetCardInfo("Greener Pastures", 258, Rarity.RARE, mage.cards.g.GreenerPastures.class)); + cards.add(new SetCardInfo("Guma", 197, Rarity.UNCOMMON, mage.cards.g.Guma.class)); + cards.add(new SetCardInfo("Hawkeater Moth", 259, Rarity.UNCOMMON, mage.cards.h.HawkeaterMoth.class)); + cards.add(new SetCardInfo("Headlong Rush", 198, Rarity.COMMON, mage.cards.h.HeadlongRush.class)); + cards.add(new SetCardInfo("Healing Salve", 16, Rarity.COMMON, mage.cards.h.HealingSalve.class)); + cards.add(new SetCardInfo("Heat Ray", 199, Rarity.COMMON, mage.cards.h.HeatRay.class)); + cards.add(new SetCardInfo("Herald of Serra", 17, Rarity.RARE, mage.cards.h.HeraldOfSerra.class)); + cards.add(new SetCardInfo("Hermetic Study", 78, Rarity.COMMON, mage.cards.h.HermeticStudy.class)); + cards.add(new SetCardInfo("Hibernation", 79, Rarity.UNCOMMON, mage.cards.h.Hibernation.class)); + cards.add(new SetCardInfo("Hidden Ancients", 260, Rarity.UNCOMMON, mage.cards.h.HiddenAncients.class)); + cards.add(new SetCardInfo("Hidden Guerrillas", 261, Rarity.UNCOMMON, mage.cards.h.HiddenGuerrillas.class)); + cards.add(new SetCardInfo("Hidden Herd", 262, Rarity.RARE, mage.cards.h.HiddenHerd.class)); + cards.add(new SetCardInfo("Hidden Predators", 263, Rarity.RARE, mage.cards.h.HiddenPredators.class)); + cards.add(new SetCardInfo("Hidden Spider", 264, Rarity.COMMON, mage.cards.h.HiddenSpider.class)); + cards.add(new SetCardInfo("Hidden Stag", 265, Rarity.RARE, mage.cards.h.HiddenStag.class)); + cards.add(new SetCardInfo("Hollow Dogs", 137, Rarity.COMMON, mage.cards.h.HollowDogs.class)); + cards.add(new SetCardInfo("Hopping Automaton", 297, Rarity.UNCOMMON, mage.cards.h.HoppingAutomaton.class)); + cards.add(new SetCardInfo("Horseshoe Crab", 80, Rarity.COMMON, mage.cards.h.HorseshoeCrab.class)); + cards.add(new SetCardInfo("Humble", 18, Rarity.UNCOMMON, mage.cards.h.Humble.class)); + cards.add(new SetCardInfo("Hush", 266, Rarity.COMMON, mage.cards.h.Hush.class)); + cards.add(new SetCardInfo("Ill-Gotten Gains", 138, Rarity.RARE, mage.cards.i.IllGottenGains.class)); + cards.add(new SetCardInfo("Imaginary Pet", 81, Rarity.RARE, mage.cards.i.ImaginaryPet.class)); + cards.add(new SetCardInfo("Intrepid Hero", 19, Rarity.RARE, mage.cards.i.IntrepidHero.class)); + cards.add(new SetCardInfo("Island", 335, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 336, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 337, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 338, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Jagged Lightning", 200, Rarity.UNCOMMON, mage.cards.j.JaggedLightning.class)); + cards.add(new SetCardInfo("Karn, Silver Golem", 298, Rarity.RARE, mage.cards.k.KarnSilverGolem.class)); + cards.add(new SetCardInfo("Launch", 82, Rarity.COMMON, mage.cards.l.Launch.class)); + cards.add(new SetCardInfo("Lay Waste", 201, Rarity.COMMON, mage.cards.l.LayWaste.class)); + cards.add(new SetCardInfo("Lifeline", 299, Rarity.RARE, mage.cards.l.Lifeline.class)); + cards.add(new SetCardInfo("Lightning Dragon", 202, Rarity.RARE, mage.cards.l.LightningDragon.class)); + cards.add(new SetCardInfo("Lilting Refrain", 83, Rarity.UNCOMMON, mage.cards.l.LiltingRefrain.class)); + cards.add(new SetCardInfo("Lingering Mirage", 84, Rarity.UNCOMMON, mage.cards.l.LingeringMirage.class)); + cards.add(new SetCardInfo("Looming Shade", 139, Rarity.COMMON, mage.cards.l.LoomingShade.class)); + cards.add(new SetCardInfo("Lotus Blossom", 300, Rarity.RARE, mage.cards.l.LotusBlossom.class)); + cards.add(new SetCardInfo("Lull", 267, Rarity.COMMON, mage.cards.l.Lull.class)); + cards.add(new SetCardInfo("Lurking Evil", 140, Rarity.RARE, mage.cards.l.LurkingEvil.class)); + cards.add(new SetCardInfo("Mana Leech", 141, Rarity.UNCOMMON, mage.cards.m.ManaLeech.class)); + cards.add(new SetCardInfo("Meltdown", 203, Rarity.UNCOMMON, mage.cards.m.Meltdown.class)); + cards.add(new SetCardInfo("Metrognome", 301, Rarity.RARE, mage.cards.m.Metrognome.class)); + cards.add(new SetCardInfo("Midsummer Revel", 268, Rarity.RARE, mage.cards.m.MidsummerRevel.class)); + cards.add(new SetCardInfo("Mishra's Helix", 302, Rarity.RARE, mage.cards.m.MishrasHelix.class)); + cards.add(new SetCardInfo("Mobile Fort", 303, Rarity.UNCOMMON, mage.cards.m.MobileFort.class)); + cards.add(new SetCardInfo("Monk Idealist", 20, Rarity.UNCOMMON, mage.cards.m.MonkIdealist.class)); + cards.add(new SetCardInfo("Monk Realist", 21, Rarity.COMMON, mage.cards.m.MonkRealist.class)); + cards.add(new SetCardInfo("Morphling", 85, Rarity.RARE, mage.cards.m.Morphling.class)); + cards.add(new SetCardInfo("Mountain", 343, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 344, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 345, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 346, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("No Rest for the Wicked", 142, Rarity.UNCOMMON, mage.cards.n.NoRestForTheWicked.class)); + cards.add(new SetCardInfo("Noetic Scales", 304, Rarity.RARE, mage.cards.n.NoeticScales.class)); + cards.add(new SetCardInfo("Okk", 204, Rarity.RARE, mage.cards.o.Okk.class)); + cards.add(new SetCardInfo("Opal Acrolith", 22, Rarity.UNCOMMON, mage.cards.o.OpalAcrolith.class)); + cards.add(new SetCardInfo("Opal Archangel", 23, Rarity.RARE, mage.cards.o.OpalArchangel.class)); + cards.add(new SetCardInfo("Opal Caryatid", 24, Rarity.COMMON, mage.cards.o.OpalCaryatid.class)); + cards.add(new SetCardInfo("Opal Gargoyle", 25, Rarity.COMMON, mage.cards.o.OpalGargoyle.class)); + cards.add(new SetCardInfo("Opal Titan", 26, Rarity.RARE, mage.cards.o.OpalTitan.class)); + cards.add(new SetCardInfo("Oppression", 143, Rarity.RARE, mage.cards.o.Oppression.class)); + cards.add(new SetCardInfo("Order of Yawgmoth", 144, Rarity.UNCOMMON, mage.cards.o.OrderOfYawgmoth.class)); + cards.add(new SetCardInfo("Outmaneuver", 205, Rarity.UNCOMMON, mage.cards.o.Outmaneuver.class)); + cards.add(new SetCardInfo("Pacifism", 27, Rarity.COMMON, mage.cards.p.Pacifism.class)); + cards.add(new SetCardInfo("Parasitic Bond", 145, Rarity.UNCOMMON, mage.cards.p.ParasiticBond.class)); + cards.add(new SetCardInfo("Pariah", 28, Rarity.RARE, mage.cards.p.Pariah.class)); + cards.add(new SetCardInfo("Path of Peace", 29, Rarity.COMMON, mage.cards.p.PathOfPeace.class)); + cards.add(new SetCardInfo("Pegasus Charger", 30, Rarity.COMMON, mage.cards.p.PegasusCharger.class)); + cards.add(new SetCardInfo("Pendrell Drake", 86, Rarity.COMMON, mage.cards.p.PendrellDrake.class)); + cards.add(new SetCardInfo("Pendrell Flux", 87, Rarity.COMMON, mage.cards.p.PendrellFlux.class)); + cards.add(new SetCardInfo("Peregrine Drake", 88, Rarity.UNCOMMON, mage.cards.p.PeregrineDrake.class)); + cards.add(new SetCardInfo("Persecute", 146, Rarity.RARE, mage.cards.p.Persecute.class)); + cards.add(new SetCardInfo("Pestilence", 147, Rarity.COMMON, mage.cards.p.Pestilence.class)); + cards.add(new SetCardInfo("Phyrexian Colossus", 305, Rarity.RARE, mage.cards.p.PhyrexianColossus.class)); + cards.add(new SetCardInfo("Phyrexian Ghoul", 148, Rarity.COMMON, mage.cards.p.PhyrexianGhoul.class)); + cards.add(new SetCardInfo("Phyrexian Processor", 306, Rarity.RARE, mage.cards.p.PhyrexianProcessor.class)); + cards.add(new SetCardInfo("Phyrexian Tower", 322, Rarity.RARE, mage.cards.p.PhyrexianTower.class)); + cards.add(new SetCardInfo("Pit Trap", 307, Rarity.UNCOMMON, mage.cards.p.PitTrap.class)); + cards.add(new SetCardInfo("Plains", 331, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 332, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 333, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 334, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Planar Birth", 31, Rarity.RARE, mage.cards.p.PlanarBirth.class)); + cards.add(new SetCardInfo("Planar Void", 149, Rarity.UNCOMMON, mage.cards.p.PlanarVoid.class)); + cards.add(new SetCardInfo("Polluted Mire", 323, Rarity.COMMON, mage.cards.p.PollutedMire.class)); + cards.add(new SetCardInfo("Pouncing Jaguar", 269, Rarity.COMMON, mage.cards.p.PouncingJaguar.class)); + cards.add(new SetCardInfo("Power Sink", 89, Rarity.COMMON, mage.cards.p.PowerSink.class)); + cards.add(new SetCardInfo("Power Taint", 90, Rarity.COMMON, mage.cards.p.PowerTaint.class)); + cards.add(new SetCardInfo("Presence of the Master", 32, Rarity.UNCOMMON, mage.cards.p.PresenceOfTheMaster.class)); + cards.add(new SetCardInfo("Priest of Gix", 150, Rarity.UNCOMMON, mage.cards.p.PriestOfGix.class)); + cards.add(new SetCardInfo("Priest of Titania", 270, Rarity.COMMON, mage.cards.p.PriestOfTitania.class)); + cards.add(new SetCardInfo("Purging Scythe", 308, Rarity.RARE, mage.cards.p.PurgingScythe.class)); + cards.add(new SetCardInfo("Rain of Filth", 151, Rarity.UNCOMMON, mage.cards.r.RainOfFilth.class)); + cards.add(new SetCardInfo("Rain of Salt", 206, Rarity.UNCOMMON, mage.cards.r.RainOfSalt.class)); + cards.add(new SetCardInfo("Ravenous Skirge", 152, Rarity.COMMON, mage.cards.r.RavenousSkirge.class)); + cards.add(new SetCardInfo("Raze", 207, Rarity.COMMON, mage.cards.r.Raze.class)); + cards.add(new SetCardInfo("Recantation", 91, Rarity.RARE, mage.cards.r.Recantation.class)); + cards.add(new SetCardInfo("Reclusive Wight", 153, Rarity.UNCOMMON, mage.cards.r.ReclusiveWight.class)); + cards.add(new SetCardInfo("Redeem", 33, Rarity.UNCOMMON, mage.cards.r.Redeem.class)); + cards.add(new SetCardInfo("Reflexes", 208, Rarity.COMMON, mage.cards.r.Reflexes.class)); + cards.add(new SetCardInfo("Rejuvenate", 271, Rarity.COMMON, mage.cards.r.Rejuvenate.class)); + cards.add(new SetCardInfo("Remembrance", 34, Rarity.RARE, mage.cards.r.Remembrance.class)); + cards.add(new SetCardInfo("Remote Isle", 324, Rarity.COMMON, mage.cards.r.RemoteIsle.class)); + cards.add(new SetCardInfo("Reprocess", 154, Rarity.RARE, mage.cards.r.Reprocess.class)); + cards.add(new SetCardInfo("Rescind", 92, Rarity.COMMON, mage.cards.r.Rescind.class)); + cards.add(new SetCardInfo("Retaliation", 272, Rarity.UNCOMMON, mage.cards.r.Retaliation.class)); + cards.add(new SetCardInfo("Retromancer", 209, Rarity.COMMON, mage.cards.r.Retromancer.class)); + cards.add(new SetCardInfo("Rewind", 93, Rarity.COMMON, mage.cards.r.Rewind.class)); + cards.add(new SetCardInfo("Rumbling Crescendo", 210, Rarity.RARE, mage.cards.r.RumblingCrescendo.class)); + cards.add(new SetCardInfo("Rune of Protection: Artifacts", 35, Rarity.UNCOMMON, mage.cards.r.RuneOfProtectionArtifacts.class)); + cards.add(new SetCardInfo("Rune of Protection: Black", 36, Rarity.COMMON, mage.cards.r.RuneOfProtectionBlack.class)); + cards.add(new SetCardInfo("Rune of Protection: Blue", 37, Rarity.COMMON, mage.cards.r.RuneOfProtectionBlue.class)); + cards.add(new SetCardInfo("Rune of Protection: Green", 38, Rarity.COMMON, mage.cards.r.RuneOfProtectionGreen.class)); + cards.add(new SetCardInfo("Rune of Protection: Lands", 39, Rarity.RARE, mage.cards.r.RuneOfProtectionLands.class)); + cards.add(new SetCardInfo("Rune of Protection: Red", 40, Rarity.COMMON, mage.cards.r.RuneOfProtectionRed.class)); + cards.add(new SetCardInfo("Rune of Protection: White", 41, Rarity.COMMON, mage.cards.r.RuneOfProtectionWhite.class)); + cards.add(new SetCardInfo("Sanctum Custodian", 42, Rarity.COMMON, mage.cards.s.SanctumCustodian.class)); + cards.add(new SetCardInfo("Sanctum Guardian", 43, Rarity.UNCOMMON, mage.cards.s.SanctumGuardian.class)); + cards.add(new SetCardInfo("Sandbar Merfolk", 94, Rarity.COMMON, mage.cards.s.SandbarMerfolk.class)); + cards.add(new SetCardInfo("Sandbar Serpent", 95, Rarity.UNCOMMON, mage.cards.s.SandbarSerpent.class)); + cards.add(new SetCardInfo("Sanguine Guard", 155, Rarity.UNCOMMON, mage.cards.s.SanguineGuard.class)); + cards.add(new SetCardInfo("Scald", 211, Rarity.UNCOMMON, mage.cards.s.Scald.class)); + cards.add(new SetCardInfo("Scoria Wurm", 212, Rarity.RARE, mage.cards.s.ScoriaWurm.class)); + cards.add(new SetCardInfo("Scrap", 213, Rarity.COMMON, mage.cards.s.Scrap.class)); + cards.add(new SetCardInfo("Seasoned Marshal", 44, Rarity.UNCOMMON, mage.cards.s.SeasonedMarshal.class)); + cards.add(new SetCardInfo("Serra Avatar", 45, Rarity.RARE, mage.cards.s.SerraAvatar.class)); + cards.add(new SetCardInfo("Serra's Embrace", 47, Rarity.UNCOMMON, mage.cards.s.SerrasEmbrace.class)); + cards.add(new SetCardInfo("Serra's Hymn", 48, Rarity.UNCOMMON, mage.cards.s.SerrasHymn.class)); + cards.add(new SetCardInfo("Serra's Liturgy", 49, Rarity.RARE, mage.cards.s.SerrasLiturgy.class)); + cards.add(new SetCardInfo("Serra's Sanctum", 325, Rarity.RARE, mage.cards.s.SerrasSanctum.class)); + cards.add(new SetCardInfo("Serra Zealot", 46, Rarity.COMMON, mage.cards.s.SerraZealot.class)); + cards.add(new SetCardInfo("Shimmering Barrier", 50, Rarity.UNCOMMON, mage.cards.s.ShimmeringBarrier.class)); + cards.add(new SetCardInfo("Shivan Gorge", 326, Rarity.RARE, mage.cards.s.ShivanGorge.class)); + cards.add(new SetCardInfo("Shivan Hellkite", 214, Rarity.RARE, mage.cards.s.ShivanHellkite.class)); + cards.add(new SetCardInfo("Shivan Raptor", 215, Rarity.UNCOMMON, mage.cards.s.ShivanRaptor.class)); + cards.add(new SetCardInfo("Shiv's Embrace", 216, Rarity.UNCOMMON, mage.cards.s.ShivsEmbrace.class)); + cards.add(new SetCardInfo("Show and Tell", 96, Rarity.RARE, mage.cards.s.ShowAndTell.class)); + cards.add(new SetCardInfo("Shower of Sparks", 217, Rarity.COMMON, mage.cards.s.ShowerOfSparks.class)); + cards.add(new SetCardInfo("Sicken", 156, Rarity.COMMON, mage.cards.s.Sicken.class)); + cards.add(new SetCardInfo("Silent Attendant", 51, Rarity.COMMON, mage.cards.s.SilentAttendant.class)); + cards.add(new SetCardInfo("Skirge Familiar", 157, Rarity.UNCOMMON, mage.cards.s.SkirgeFamiliar.class)); + cards.add(new SetCardInfo("Skittering Skirge", 158, Rarity.COMMON, mage.cards.s.SkitteringSkirge.class)); + cards.add(new SetCardInfo("Sleeper Agent", 159, Rarity.RARE, mage.cards.s.SleeperAgent.class)); + cards.add(new SetCardInfo("Slippery Karst", 327, Rarity.COMMON, mage.cards.s.SlipperyKarst.class)); + cards.add(new SetCardInfo("Smokestack", 309, Rarity.RARE, mage.cards.s.Smokestack.class)); + cards.add(new SetCardInfo("Smoldering Crater", 328, Rarity.COMMON, mage.cards.s.SmolderingCrater.class)); + cards.add(new SetCardInfo("Sneak Attack", 218, Rarity.RARE, mage.cards.s.SneakAttack.class)); + cards.add(new SetCardInfo("Somnophore", 97, Rarity.RARE, mage.cards.s.Somnophore.class)); + cards.add(new SetCardInfo("Songstitcher", 52, Rarity.UNCOMMON, mage.cards.s.Songstitcher.class)); + cards.add(new SetCardInfo("Soul Sculptor", 53, Rarity.RARE, mage.cards.s.SoulSculptor.class)); + cards.add(new SetCardInfo("Spined Fluke", 160, Rarity.UNCOMMON, mage.cards.s.SpinedFluke.class)); + cards.add(new SetCardInfo("Spire Owl", 98, Rarity.COMMON, mage.cards.s.SpireOwl.class)); + cards.add(new SetCardInfo("Sporogenesis", 273, Rarity.RARE, mage.cards.s.Sporogenesis.class)); + cards.add(new SetCardInfo("Spreading Algae", 274, Rarity.UNCOMMON, mage.cards.s.SpreadingAlgae.class)); + cards.add(new SetCardInfo("Steam Blast", 219, Rarity.UNCOMMON, mage.cards.s.SteamBlast.class)); + cards.add(new SetCardInfo("Stern Proctor", 99, Rarity.UNCOMMON, mage.cards.s.SternProctor.class)); + cards.add(new SetCardInfo("Stroke of Genius", 100, Rarity.RARE, mage.cards.s.StrokeOfGenius.class)); + cards.add(new SetCardInfo("Sulfuric Vapors", 220, Rarity.RARE, mage.cards.s.SulfuricVapors.class)); + cards.add(new SetCardInfo("Sunder", 101, Rarity.RARE, mage.cards.s.Sunder.class)); + cards.add(new SetCardInfo("Swamp", 339, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 340, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 341, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 342, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Symbiosis", 275, Rarity.COMMON, mage.cards.s.Symbiosis.class)); + cards.add(new SetCardInfo("Tainted Aether", 161, Rarity.RARE, mage.cards.t.TaintedAether.class)); + cards.add(new SetCardInfo("Telepathy", 102, Rarity.UNCOMMON, mage.cards.t.Telepathy.class)); + cards.add(new SetCardInfo("Temporal Aperture", 310, Rarity.RARE, mage.cards.t.TemporalAperture.class)); + cards.add(new SetCardInfo("Thran Quarry", 329, Rarity.RARE, mage.cards.t.ThranQuarry.class)); + cards.add(new SetCardInfo("Thran Turbine", 311, Rarity.UNCOMMON, mage.cards.t.ThranTurbine.class)); + cards.add(new SetCardInfo("Thundering Giant", 221, Rarity.UNCOMMON, mage.cards.t.ThunderingGiant.class)); + cards.add(new SetCardInfo("Time Spiral", 103, Rarity.RARE, mage.cards.t.TimeSpiral.class)); + cards.add(new SetCardInfo("Titania's Boon", 276, Rarity.UNCOMMON, mage.cards.t.TitaniasBoon.class)); + cards.add(new SetCardInfo("Titania's Chosen", 277, Rarity.UNCOMMON, mage.cards.t.TitaniasChosen.class)); + cards.add(new SetCardInfo("Tolarian Academy", 330, Rarity.RARE, mage.cards.t.TolarianAcademy.class)); + cards.add(new SetCardInfo("Tolarian Winds", 104, Rarity.COMMON, mage.cards.t.TolarianWinds.class)); + cards.add(new SetCardInfo("Torch Song", 222, Rarity.UNCOMMON, mage.cards.t.TorchSong.class)); + cards.add(new SetCardInfo("Treefolk Seedlings", 278, Rarity.UNCOMMON, mage.cards.t.TreefolkSeedlings.class)); + cards.add(new SetCardInfo("Treetop Rangers", 279, Rarity.COMMON, mage.cards.t.TreetopRangers.class)); + cards.add(new SetCardInfo("Turnabout", 105, Rarity.UNCOMMON, mage.cards.t.Turnabout.class)); + cards.add(new SetCardInfo("Umbilicus", 312, Rarity.RARE, mage.cards.u.Umbilicus.class)); + cards.add(new SetCardInfo("Unnerve", 162, Rarity.COMMON, mage.cards.u.Unnerve.class)); + cards.add(new SetCardInfo("Unworthy Dead", 163, Rarity.COMMON, mage.cards.u.UnworthyDead.class)); + cards.add(new SetCardInfo("Urza's Armor", 313, Rarity.UNCOMMON, mage.cards.u.UrzasArmor.class)); + cards.add(new SetCardInfo("Vampiric Embrace", 164, Rarity.UNCOMMON, mage.cards.v.VampiricEmbrace.class)); + cards.add(new SetCardInfo("Vebulid", 165, Rarity.RARE, mage.cards.v.Vebulid.class)); + cards.add(new SetCardInfo("Veil of Birds", 106, Rarity.COMMON, mage.cards.v.VeilOfBirds.class)); + cards.add(new SetCardInfo("Veiled Apparition", 107, Rarity.UNCOMMON, mage.cards.v.VeiledApparition.class)); + cards.add(new SetCardInfo("Veiled Crocodile", 108, Rarity.RARE, mage.cards.v.VeiledCrocodile.class)); + cards.add(new SetCardInfo("Veiled Sentry", 109, Rarity.UNCOMMON, mage.cards.v.VeiledSentry.class)); + cards.add(new SetCardInfo("Veiled Serpent", 110, Rarity.COMMON, mage.cards.v.VeiledSerpent.class)); + cards.add(new SetCardInfo("Venomous Fangs", 280, Rarity.COMMON, mage.cards.v.VenomousFangs.class)); + cards.add(new SetCardInfo("Vernal Bloom", 281, Rarity.RARE, mage.cards.v.VernalBloom.class)); + cards.add(new SetCardInfo("Viashino Outrider", 223, Rarity.COMMON, mage.cards.v.ViashinoOutrider.class)); + cards.add(new SetCardInfo("Viashino Runner", 224, Rarity.COMMON, mage.cards.v.ViashinoRunner.class)); + cards.add(new SetCardInfo("Viashino Sandswimmer", 225, Rarity.RARE, mage.cards.v.ViashinoSandswimmer.class)); + cards.add(new SetCardInfo("Viashino Weaponsmith", 226, Rarity.COMMON, mage.cards.v.ViashinoWeaponsmith.class)); + cards.add(new SetCardInfo("Victimize", 166, Rarity.UNCOMMON, mage.cards.v.Victimize.class)); + cards.add(new SetCardInfo("Vile Requiem", 167, Rarity.UNCOMMON, mage.cards.v.VileRequiem.class)); + cards.add(new SetCardInfo("Voice of Grace", 54, Rarity.UNCOMMON, mage.cards.v.VoiceOfGrace.class)); + cards.add(new SetCardInfo("Voice of Law", 55, Rarity.UNCOMMON, mage.cards.v.VoiceOfLaw.class)); + cards.add(new SetCardInfo("Voltaic Key", 314, Rarity.UNCOMMON, mage.cards.v.VoltaicKey.class)); + cards.add(new SetCardInfo("Vug Lizard", 227, Rarity.UNCOMMON, mage.cards.v.VugLizard.class)); + cards.add(new SetCardInfo("War Dance", 282, Rarity.UNCOMMON, mage.cards.w.WarDance.class)); + cards.add(new SetCardInfo("Wall of Junk", 315, Rarity.UNCOMMON, mage.cards.w.WallOfJunk.class)); + cards.add(new SetCardInfo("Waylay", 56, Rarity.UNCOMMON, mage.cards.w.Waylay.class)); + cards.add(new SetCardInfo("Western Paladin", 168, Rarity.RARE, mage.cards.w.WesternPaladin.class)); + cards.add(new SetCardInfo("Whetstone", 316, Rarity.RARE, mage.cards.w.Whetstone.class)); + cards.add(new SetCardInfo("Whirlwind", 283, Rarity.RARE, mage.cards.w.Whirlwind.class)); + cards.add(new SetCardInfo("Wild Dogs", 284, Rarity.COMMON, mage.cards.w.WildDogs.class)); + cards.add(new SetCardInfo("Wildfire", 228, Rarity.RARE, mage.cards.w.Wildfire.class)); + cards.add(new SetCardInfo("Windfall", 111, Rarity.UNCOMMON, mage.cards.w.Windfall.class)); + cards.add(new SetCardInfo("Winding Wurm", 285, Rarity.COMMON, mage.cards.w.WindingWurm.class)); + cards.add(new SetCardInfo("Wirecat", 317, Rarity.UNCOMMON, mage.cards.w.Wirecat.class)); + cards.add(new SetCardInfo("Witch Engine", 169, Rarity.RARE, mage.cards.w.WitchEngine.class)); + cards.add(new SetCardInfo("Wizard Mentor", 112, Rarity.COMMON, mage.cards.w.WizardMentor.class)); + cards.add(new SetCardInfo("Worn Powerstone", 318, Rarity.UNCOMMON, mage.cards.w.WornPowerstone.class)); + cards.add(new SetCardInfo("Worship", 57, Rarity.RARE, mage.cards.w.Worship.class)); + cards.add(new SetCardInfo("Yawgmoth's Edict", 170, Rarity.UNCOMMON, mage.cards.y.YawgmothsEdict.class)); + cards.add(new SetCardInfo("Yawgmoth's Will", 171, Rarity.RARE, mage.cards.y.YawgmothsWill.class)); + cards.add(new SetCardInfo("Zephid", 113, Rarity.RARE, mage.cards.z.Zephid.class)); + cards.add(new SetCardInfo("Zephid's Embrace", 114, Rarity.UNCOMMON, mage.cards.z.ZephidsEmbrace.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Visions.java b/Mage.Sets/src/mage/sets/Visions.java index 31852388b5a..57c609947e4 100644 --- a/Mage.Sets/src/mage/sets/Visions.java +++ b/Mage.Sets/src/mage/sets/Visions.java @@ -1,192 +1,192 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author North - */ -public final class Visions extends ExpansionSet { - - private static final Visions instance = new Visions(); - - public static Visions getInstance() { - return instance; - } - - private Visions() { - super("Visions", "VIS", ExpansionSet.buildDate(1997, 1, 11), SetType.EXPANSION); - this.blockName = "Mirage"; - this.parentSet = Mirage.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Aku Djinn", 51, Rarity.RARE, mage.cards.a.AkuDjinn.class)); - cards.add(new SetCardInfo("Anvil of Bogardan", 141, Rarity.RARE, mage.cards.a.AnvilOfBogardan.class)); - cards.add(new SetCardInfo("Archangel", 1, Rarity.RARE, mage.cards.a.Archangel.class)); - cards.add(new SetCardInfo("Army Ants", 126, Rarity.UNCOMMON, mage.cards.a.ArmyAnts.class)); - cards.add(new SetCardInfo("Betrayal", 26, Rarity.COMMON, mage.cards.b.Betrayal.class)); - cards.add(new SetCardInfo("Blanket of Night", 52, Rarity.UNCOMMON, mage.cards.b.BlanketOfNight.class)); - cards.add(new SetCardInfo("Bogardan Phoenix", 76, Rarity.RARE, mage.cards.b.BogardanPhoenix.class)); - cards.add(new SetCardInfo("Brass-Talon Chimera", 142, Rarity.UNCOMMON, mage.cards.b.BrassTalonChimera.class)); - cards.add(new SetCardInfo("Breathstealer's Crypt", 127, Rarity.RARE, mage.cards.b.BreathstealersCrypt.class)); - cards.add(new SetCardInfo("Breezekeeper", 27, Rarity.COMMON, mage.cards.b.Breezekeeper.class)); - cards.add(new SetCardInfo("Brood of Cockroaches", 53, Rarity.UNCOMMON, mage.cards.b.BroodOfCockroaches.class)); - cards.add(new SetCardInfo("Bull Elephant", 101, Rarity.COMMON, mage.cards.b.BullElephant.class)); - cards.add(new SetCardInfo("Chronatog", 28, Rarity.RARE, mage.cards.c.Chronatog.class)); - cards.add(new SetCardInfo("City of Solitude", 102, Rarity.RARE, mage.cards.c.CityOfSolitude.class)); - cards.add(new SetCardInfo("Cloud Elemental", 29, Rarity.COMMON, mage.cards.c.CloudElemental.class)); - cards.add(new SetCardInfo("Coercion", 54, Rarity.COMMON, mage.cards.c.Coercion.class)); - cards.add(new SetCardInfo("Coral Atoll", 160, Rarity.UNCOMMON, mage.cards.c.CoralAtoll.class)); - cards.add(new SetCardInfo("Corrosion", 128, Rarity.RARE, mage.cards.c.Corrosion.class)); - cards.add(new SetCardInfo("Creeping Mold", 103, Rarity.UNCOMMON, mage.cards.c.CreepingMold.class)); - cards.add(new SetCardInfo("Crypt Rats", 55, Rarity.COMMON, mage.cards.c.CryptRats.class)); - cards.add(new SetCardInfo("Daraja Griffin", 2, Rarity.UNCOMMON, mage.cards.d.DarajaGriffin.class)); - cards.add(new SetCardInfo("Dark Privilege", 56, Rarity.COMMON, mage.cards.d.DarkPrivilege.class)); - cards.add(new SetCardInfo("Death Watch", 57, Rarity.COMMON, mage.cards.d.DeathWatch.class)); - cards.add(new SetCardInfo("Desertion", 30, Rarity.RARE, mage.cards.d.Desertion.class)); - cards.add(new SetCardInfo("Desolation", 58, Rarity.UNCOMMON, mage.cards.d.Desolation.class)); - cards.add(new SetCardInfo("Diamond Kaleidoscope", 143, Rarity.RARE, mage.cards.d.DiamondKaleidoscope.class)); - cards.add(new SetCardInfo("Dormant Volcano", 161, Rarity.UNCOMMON, mage.cards.d.DormantVolcano.class)); - cards.add(new SetCardInfo("Dragon Mask", 144, Rarity.UNCOMMON, mage.cards.d.DragonMask.class)); - cards.add(new SetCardInfo("Dream Tides", 31, Rarity.UNCOMMON, mage.cards.d.DreamTides.class)); - cards.add(new SetCardInfo("Dwarven Vigilantes", 77, Rarity.COMMON, mage.cards.d.DwarvenVigilantes.class)); - cards.add(new SetCardInfo("Elephant Grass", 104, Rarity.UNCOMMON, mage.cards.e.ElephantGrass.class)); - cards.add(new SetCardInfo("Elkin Lair", 78, Rarity.RARE, mage.cards.e.ElkinLair.class)); - cards.add(new SetCardInfo("Elven Cache", 105, Rarity.COMMON, mage.cards.e.ElvenCache.class)); - cards.add(new SetCardInfo("Emerald Charm", 106, Rarity.COMMON, mage.cards.e.EmeraldCharm.class)); - cards.add(new SetCardInfo("Equipoise", 3, Rarity.RARE, mage.cards.e.Equipoise.class)); - cards.add(new SetCardInfo("Everglades", 162, Rarity.UNCOMMON, mage.cards.e.Everglades.class)); - cards.add(new SetCardInfo("Eye of Singularity", 4, Rarity.RARE, mage.cards.e.EyeOfSingularity.class)); - cards.add(new SetCardInfo("Fallen Askari", 59, Rarity.COMMON, mage.cards.f.FallenAskari.class)); - cards.add(new SetCardInfo("Femeref Enchantress", 129, Rarity.RARE, mage.cards.f.FemerefEnchantress.class)); - cards.add(new SetCardInfo("Feral Instinct", 107, Rarity.COMMON, mage.cards.f.FeralInstinct.class)); - cards.add(new SetCardInfo("Fireblast", 79, Rarity.COMMON, mage.cards.f.Fireblast.class)); - cards.add(new SetCardInfo("Firestorm Hellkite", 130, Rarity.RARE, mage.cards.f.FirestormHellkite.class)); - cards.add(new SetCardInfo("Flooded Shoreline", 32, Rarity.RARE, mage.cards.f.FloodedShoreline.class)); - cards.add(new SetCardInfo("Foreshadow", 33, Rarity.UNCOMMON, mage.cards.f.Foreshadow.class)); - cards.add(new SetCardInfo("Freewind Falcon", 5, Rarity.COMMON, mage.cards.f.FreewindFalcon.class)); - cards.add(new SetCardInfo("Funeral Charm", 61, Rarity.COMMON, mage.cards.f.FuneralCharm.class)); - cards.add(new SetCardInfo("Giant Caterpillar", 108, Rarity.COMMON, mage.cards.g.GiantCaterpillar.class)); - cards.add(new SetCardInfo("Goblin Recruiter", 80, Rarity.UNCOMMON, mage.cards.g.GoblinRecruiter.class)); - cards.add(new SetCardInfo("Goblin Swine-Rider", 81, Rarity.COMMON, mage.cards.g.GoblinSwineRider.class)); - cards.add(new SetCardInfo("Gossamer Chains", 6, Rarity.COMMON, mage.cards.g.GossamerChains.class)); - cards.add(new SetCardInfo("Griffin Canyon", 163, Rarity.RARE, mage.cards.g.GriffinCanyon.class)); - cards.add(new SetCardInfo("Guiding Spirit", 131, Rarity.RARE, mage.cards.g.GuidingSpirit.class)); - cards.add(new SetCardInfo("Hearth Charm", 82, Rarity.COMMON, mage.cards.h.HearthCharm.class)); - cards.add(new SetCardInfo("Helm of Awakening", 145, Rarity.UNCOMMON, mage.cards.h.HelmOfAwakening.class)); - cards.add(new SetCardInfo("Honorable Passage", 7, Rarity.UNCOMMON, mage.cards.h.HonorablePassage.class)); - cards.add(new SetCardInfo("Hope Charm", 8, Rarity.COMMON, mage.cards.h.HopeCharm.class)); - cards.add(new SetCardInfo("Hulking Cyclops", 84, Rarity.UNCOMMON, mage.cards.h.HulkingCyclops.class)); - cards.add(new SetCardInfo("Impulse", 34, Rarity.COMMON, mage.cards.i.Impulse.class)); - cards.add(new SetCardInfo("Infantry Veteran", 9, Rarity.COMMON, mage.cards.i.InfantryVeteran.class)); - cards.add(new SetCardInfo("Infernal Harvest", 62, Rarity.COMMON, mage.cards.i.InfernalHarvest.class)); - cards.add(new SetCardInfo("Inspiration", 35, Rarity.COMMON, mage.cards.i.Inspiration.class)); - cards.add(new SetCardInfo("Iron-Heart Chimera", 146, Rarity.UNCOMMON, mage.cards.i.IronHeartChimera.class)); - cards.add(new SetCardInfo("Jamuraan Lion", 10, Rarity.COMMON, mage.cards.j.JamuraanLion.class)); - cards.add(new SetCardInfo("Juju Bubble", 147, Rarity.UNCOMMON, mage.cards.j.JujuBubble.class)); - cards.add(new SetCardInfo("Jungle Basin", 164, Rarity.UNCOMMON, mage.cards.j.JungleBasin.class)); - cards.add(new SetCardInfo("Kaervek's Spite", 63, Rarity.RARE, mage.cards.k.KaerveksSpite.class)); - cards.add(new SetCardInfo("Karoo", 165, Rarity.UNCOMMON, mage.cards.k.Karoo.class)); - cards.add(new SetCardInfo("Katabatic Winds", 109, Rarity.RARE, mage.cards.k.KatabaticWinds.class)); - cards.add(new SetCardInfo("Keeper of Kookus", 85, Rarity.COMMON, mage.cards.k.KeeperOfKookus.class)); - cards.add(new SetCardInfo("King Cheetah", 110, Rarity.COMMON, mage.cards.k.KingCheetah.class)); - cards.add(new SetCardInfo("Knight of the Mists", 36, Rarity.COMMON, mage.cards.k.KnightOfTheMists.class)); - cards.add(new SetCardInfo("Knight of Valor", 11, Rarity.COMMON, mage.cards.k.KnightOfValor.class)); - cards.add(new SetCardInfo("Kookus", 86, Rarity.RARE, mage.cards.k.Kookus.class)); - cards.add(new SetCardInfo("Kyscu Drake", 111, Rarity.RARE, mage.cards.k.KyscuDrake.class)); - cards.add(new SetCardInfo("Lead-Belly Chimera", 148, Rarity.UNCOMMON, mage.cards.l.LeadBellyChimera.class)); - cards.add(new SetCardInfo("Lichenthrope", 112, Rarity.RARE, mage.cards.l.Lichenthrope.class)); - cards.add(new SetCardInfo("Lightning Cloud", 87, Rarity.RARE, mage.cards.l.LightningCloud.class)); - cards.add(new SetCardInfo("Longbow Archer", 12, Rarity.UNCOMMON, mage.cards.l.LongbowArcher.class)); - cards.add(new SetCardInfo("Magma Mine", 149, Rarity.UNCOMMON, mage.cards.m.MagmaMine.class)); - cards.add(new SetCardInfo("Man-o'-War", 37, Rarity.COMMON, mage.cards.m.ManOWar.class)); - cards.add(new SetCardInfo("Miraculous Recovery", 13, Rarity.UNCOMMON, mage.cards.m.MiraculousRecovery.class)); - cards.add(new SetCardInfo("Mob Mentality", 88, Rarity.UNCOMMON, mage.cards.m.MobMentality.class)); - cards.add(new SetCardInfo("Mortal Wound", 113, Rarity.COMMON, mage.cards.m.MortalWound.class)); - cards.add(new SetCardInfo("Mundungu", 132, Rarity.UNCOMMON, mage.cards.m.Mundungu.class)); - cards.add(new SetCardInfo("Mystic Veil", 38, Rarity.COMMON, mage.cards.m.MysticVeil.class)); - cards.add(new SetCardInfo("Natural Order", 114, Rarity.RARE, mage.cards.n.NaturalOrder.class)); - cards.add(new SetCardInfo("Necromancy", 64, Rarity.UNCOMMON, mage.cards.n.Necromancy.class)); - cards.add(new SetCardInfo("Necrosavant", 65, Rarity.RARE, mage.cards.n.Necrosavant.class)); - cards.add(new SetCardInfo("Nekrataal", 66, Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); - cards.add(new SetCardInfo("Ovinomancer", 39, Rarity.UNCOMMON, mage.cards.o.Ovinomancer.class)); - cards.add(new SetCardInfo("Panther Warriors", 115, Rarity.COMMON, mage.cards.p.PantherWarriors.class)); - cards.add(new SetCardInfo("Parapet", 14, Rarity.COMMON, mage.cards.p.Parapet.class)); - cards.add(new SetCardInfo("Peace Talks", 15, Rarity.UNCOMMON, mage.cards.p.PeaceTalks.class)); - cards.add(new SetCardInfo("Phyrexian Marauder", 151, Rarity.RARE, mage.cards.p.PhyrexianMarauder.class)); - cards.add(new SetCardInfo("Phyrexian Walker", 152, Rarity.COMMON, mage.cards.p.PhyrexianWalker.class)); - cards.add(new SetCardInfo("Pillar Tombs of Aku", 67, Rarity.RARE, mage.cards.p.PillarTombsOfAku.class)); - cards.add(new SetCardInfo("Prosperity", 40, Rarity.UNCOMMON, mage.cards.p.Prosperity.class)); - cards.add(new SetCardInfo("Python", 68, Rarity.COMMON, mage.cards.p.Python.class)); - cards.add(new SetCardInfo("Quicksand", 166, Rarity.UNCOMMON, mage.cards.q.Quicksand.class)); - cards.add(new SetCardInfo("Quirion Druid", 116, Rarity.RARE, mage.cards.q.QuirionDruid.class)); - cards.add(new SetCardInfo("Quirion Ranger", 117, Rarity.COMMON, mage.cards.q.QuirionRanger.class)); - cards.add(new SetCardInfo("Raging Gorilla", 90, Rarity.COMMON, mage.cards.r.RagingGorilla.class)); - cards.add(new SetCardInfo("Rainbow Efreet", 41, Rarity.RARE, mage.cards.r.RainbowEfreet.class)); - cards.add(new SetCardInfo("Relentless Assault", 91, Rarity.RARE, mage.cards.r.RelentlessAssault.class)); - cards.add(new SetCardInfo("Relic Ward", 16, Rarity.UNCOMMON, mage.cards.r.RelicWard.class)); - cards.add(new SetCardInfo("Remedy", 17, Rarity.COMMON, mage.cards.r.Remedy.class)); - cards.add(new SetCardInfo("Resistance Fighter", 18, Rarity.COMMON, mage.cards.r.ResistanceFighter.class)); - cards.add(new SetCardInfo("Retribution of the Meek", 19, Rarity.RARE, mage.cards.r.RetributionOfTheMeek.class)); - cards.add(new SetCardInfo("Righteous Aura", 20, Rarity.COMMON, mage.cards.r.RighteousAura.class)); - cards.add(new SetCardInfo("Righteous War", 134, Rarity.RARE, mage.cards.r.RighteousWar.class)); - cards.add(new SetCardInfo("River Boa", 118, Rarity.COMMON, mage.cards.r.RiverBoa.class)); - cards.add(new SetCardInfo("Rock Slide", 92, Rarity.COMMON, mage.cards.r.RockSlide.class)); - cards.add(new SetCardInfo("Rowen", 119, Rarity.RARE, mage.cards.r.Rowen.class)); - cards.add(new SetCardInfo("Sands of Time", 153, Rarity.RARE, mage.cards.s.SandsOfTime.class)); - cards.add(new SetCardInfo("Scalebane's Elite", 135, Rarity.UNCOMMON, mage.cards.s.ScalebanesElite.class)); - cards.add(new SetCardInfo("Shimmering Efreet", 42, Rarity.UNCOMMON, mage.cards.s.ShimmeringEfreet.class)); - cards.add(new SetCardInfo("Shrieking Drake", 43, Rarity.COMMON, mage.cards.s.ShriekingDrake.class)); - cards.add(new SetCardInfo("Simoon", 136, Rarity.UNCOMMON, mage.cards.s.Simoon.class)); - cards.add(new SetCardInfo("Sisay's Ring", 154, Rarity.COMMON, mage.cards.s.SisaysRing.class)); - cards.add(new SetCardInfo("Snake Basket", 155, Rarity.RARE, mage.cards.s.SnakeBasket.class)); - cards.add(new SetCardInfo("Solfatara", 93, Rarity.COMMON, mage.cards.s.Solfatara.class)); - cards.add(new SetCardInfo("Song of Blood", 94, Rarity.COMMON, mage.cards.s.SongOfBlood.class)); - cards.add(new SetCardInfo("Spider Climb", 120, Rarity.COMMON, mage.cards.s.SpiderClimb.class)); - cards.add(new SetCardInfo("Spitting Drake", 95, Rarity.UNCOMMON, mage.cards.s.SpittingDrake.class)); - cards.add(new SetCardInfo("Squandered Resources", 137, Rarity.RARE, mage.cards.s.SquanderedResources.class)); - cards.add(new SetCardInfo("Stampeding Wildebeests", 121, Rarity.UNCOMMON, mage.cards.s.StampedingWildebeests.class)); - cards.add(new SetCardInfo("Suleiman's Legacy", 138, Rarity.RARE, mage.cards.s.SuleimansLegacy.class)); - cards.add(new SetCardInfo("Summer Bloom", 122, Rarity.UNCOMMON, mage.cards.s.SummerBloom.class)); - cards.add(new SetCardInfo("Sun Clasp", 21, Rarity.COMMON, mage.cards.s.SunClasp.class)); - cards.add(new SetCardInfo("Suq'Ata Assassin", 69, Rarity.UNCOMMON, mage.cards.s.SuqAtaAssassin.class)); - cards.add(new SetCardInfo("Suq'Ata Lancer", 96, Rarity.COMMON, mage.cards.s.SuqAtaLancer.class)); - cards.add(new SetCardInfo("Talruum Champion", 97, Rarity.COMMON, mage.cards.t.TalruumChampion.class)); - cards.add(new SetCardInfo("Talruum Piper", 98, Rarity.UNCOMMON, mage.cards.t.TalruumPiper.class)); - cards.add(new SetCardInfo("Tar Pit Warrior", 70, Rarity.COMMON, mage.cards.t.TarPitWarrior.class)); - cards.add(new SetCardInfo("Teferi's Honor Guard", 22, Rarity.UNCOMMON, mage.cards.t.TeferisHonorGuard.class)); - cards.add(new SetCardInfo("Teferi's Puzzle Box", 156, Rarity.RARE, mage.cards.t.TeferisPuzzleBox.class)); - cards.add(new SetCardInfo("Teferi's Realm", 44, Rarity.RARE, mage.cards.t.TeferisRealm.class)); - cards.add(new SetCardInfo("Tempest Drake", 139, Rarity.UNCOMMON, mage.cards.t.TempestDrake.class)); - cards.add(new SetCardInfo("Three Wishes", 45, Rarity.RARE, mage.cards.t.ThreeWishes.class)); - cards.add(new SetCardInfo("Tin-Wing Chimera", 157, Rarity.UNCOMMON, mage.cards.t.TinWingChimera.class)); - cards.add(new SetCardInfo("Tithe", 23, Rarity.RARE, mage.cards.t.Tithe.class)); - cards.add(new SetCardInfo("Tremor", 99, Rarity.COMMON, mage.cards.t.Tremor.class)); - cards.add(new SetCardInfo("Triangle of War", 158, Rarity.RARE, mage.cards.t.TriangleOfWar.class)); - cards.add(new SetCardInfo("Uktabi Orangutan", 123, Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class)); - cards.add(new SetCardInfo("Undiscovered Paradise", 167, Rarity.RARE, mage.cards.u.UndiscoveredParadise.class)); - cards.add(new SetCardInfo("Undo", 47, Rarity.COMMON, mage.cards.u.Undo.class)); - cards.add(new SetCardInfo("Urborg Mindsucker", 71, Rarity.COMMON, mage.cards.u.UrborgMindsucker.class)); - cards.add(new SetCardInfo("Vampiric Tutor", 72, Rarity.RARE, mage.cards.v.VampiricTutor.class)); - cards.add(new SetCardInfo("Vampirism", 73, Rarity.UNCOMMON, mage.cards.v.Vampirism.class)); - cards.add(new SetCardInfo("Vanishing", 48, Rarity.COMMON, mage.cards.v.Vanishing.class)); - cards.add(new SetCardInfo("Viashino Sandstalker", 100, Rarity.UNCOMMON, mage.cards.v.ViashinoSandstalker.class)); - cards.add(new SetCardInfo("Viashivan Dragon", 140, Rarity.RARE, mage.cards.v.ViashivanDragon.class)); - cards.add(new SetCardInfo("Vision Charm", 49, Rarity.COMMON, mage.cards.v.VisionCharm.class)); - cards.add(new SetCardInfo("Wake of Vultures", 74, Rarity.COMMON, mage.cards.w.WakeOfVultures.class)); - cards.add(new SetCardInfo("Wand of Denial", 159, Rarity.RARE, mage.cards.w.WandOfDenial.class)); - cards.add(new SetCardInfo("Warrior's Honor", 24, Rarity.COMMON, mage.cards.w.WarriorsHonor.class)); - cards.add(new SetCardInfo("Warthog", 124, Rarity.COMMON, mage.cards.w.Warthog.class)); - cards.add(new SetCardInfo("Waterspout Djinn", 50, Rarity.UNCOMMON, mage.cards.w.WaterspoutDjinn.class)); - cards.add(new SetCardInfo("Wicked Reward", 75, Rarity.COMMON, mage.cards.w.WickedReward.class)); - cards.add(new SetCardInfo("Wind Shear", 125, Rarity.UNCOMMON, mage.cards.w.WindShear.class)); - cards.add(new SetCardInfo("Zhalfirin Crusader", 25, Rarity.RARE, mage.cards.z.ZhalfirinCrusader.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author North + */ +public final class Visions extends ExpansionSet { + + private static final Visions instance = new Visions(); + + public static Visions getInstance() { + return instance; + } + + private Visions() { + super("Visions", "VIS", ExpansionSet.buildDate(1997, 1, 11), SetType.EXPANSION); + this.blockName = "Mirage"; + this.parentSet = Mirage.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Aku Djinn", 51, Rarity.RARE, mage.cards.a.AkuDjinn.class)); + cards.add(new SetCardInfo("Anvil of Bogardan", 141, Rarity.RARE, mage.cards.a.AnvilOfBogardan.class)); + cards.add(new SetCardInfo("Archangel", 1, Rarity.RARE, mage.cards.a.Archangel.class)); + cards.add(new SetCardInfo("Army Ants", 126, Rarity.UNCOMMON, mage.cards.a.ArmyAnts.class)); + cards.add(new SetCardInfo("Betrayal", 26, Rarity.COMMON, mage.cards.b.Betrayal.class)); + cards.add(new SetCardInfo("Blanket of Night", 52, Rarity.UNCOMMON, mage.cards.b.BlanketOfNight.class)); + cards.add(new SetCardInfo("Bogardan Phoenix", 76, Rarity.RARE, mage.cards.b.BogardanPhoenix.class)); + cards.add(new SetCardInfo("Brass-Talon Chimera", 142, Rarity.UNCOMMON, mage.cards.b.BrassTalonChimera.class)); + cards.add(new SetCardInfo("Breathstealer's Crypt", 127, Rarity.RARE, mage.cards.b.BreathstealersCrypt.class)); + cards.add(new SetCardInfo("Breezekeeper", 27, Rarity.COMMON, mage.cards.b.Breezekeeper.class)); + cards.add(new SetCardInfo("Brood of Cockroaches", 53, Rarity.UNCOMMON, mage.cards.b.BroodOfCockroaches.class)); + cards.add(new SetCardInfo("Bull Elephant", 101, Rarity.COMMON, mage.cards.b.BullElephant.class)); + cards.add(new SetCardInfo("Chronatog", 28, Rarity.RARE, mage.cards.c.Chronatog.class)); + cards.add(new SetCardInfo("City of Solitude", 102, Rarity.RARE, mage.cards.c.CityOfSolitude.class)); + cards.add(new SetCardInfo("Cloud Elemental", 29, Rarity.COMMON, mage.cards.c.CloudElemental.class)); + cards.add(new SetCardInfo("Coercion", 54, Rarity.COMMON, mage.cards.c.Coercion.class)); + cards.add(new SetCardInfo("Coral Atoll", 160, Rarity.UNCOMMON, mage.cards.c.CoralAtoll.class)); + cards.add(new SetCardInfo("Corrosion", 128, Rarity.RARE, mage.cards.c.Corrosion.class)); + cards.add(new SetCardInfo("Creeping Mold", 103, Rarity.UNCOMMON, mage.cards.c.CreepingMold.class)); + cards.add(new SetCardInfo("Crypt Rats", 55, Rarity.COMMON, mage.cards.c.CryptRats.class)); + cards.add(new SetCardInfo("Daraja Griffin", 2, Rarity.UNCOMMON, mage.cards.d.DarajaGriffin.class)); + cards.add(new SetCardInfo("Dark Privilege", 56, Rarity.COMMON, mage.cards.d.DarkPrivilege.class)); + cards.add(new SetCardInfo("Death Watch", 57, Rarity.COMMON, mage.cards.d.DeathWatch.class)); + cards.add(new SetCardInfo("Desertion", 30, Rarity.RARE, mage.cards.d.Desertion.class)); + cards.add(new SetCardInfo("Desolation", 58, Rarity.UNCOMMON, mage.cards.d.Desolation.class)); + cards.add(new SetCardInfo("Diamond Kaleidoscope", 143, Rarity.RARE, mage.cards.d.DiamondKaleidoscope.class)); + cards.add(new SetCardInfo("Dormant Volcano", 161, Rarity.UNCOMMON, mage.cards.d.DormantVolcano.class)); + cards.add(new SetCardInfo("Dragon Mask", 144, Rarity.UNCOMMON, mage.cards.d.DragonMask.class)); + cards.add(new SetCardInfo("Dream Tides", 31, Rarity.UNCOMMON, mage.cards.d.DreamTides.class)); + cards.add(new SetCardInfo("Dwarven Vigilantes", 77, Rarity.COMMON, mage.cards.d.DwarvenVigilantes.class)); + cards.add(new SetCardInfo("Elephant Grass", 104, Rarity.UNCOMMON, mage.cards.e.ElephantGrass.class)); + cards.add(new SetCardInfo("Elkin Lair", 78, Rarity.RARE, mage.cards.e.ElkinLair.class)); + cards.add(new SetCardInfo("Elven Cache", 105, Rarity.COMMON, mage.cards.e.ElvenCache.class)); + cards.add(new SetCardInfo("Emerald Charm", 106, Rarity.COMMON, mage.cards.e.EmeraldCharm.class)); + cards.add(new SetCardInfo("Equipoise", 3, Rarity.RARE, mage.cards.e.Equipoise.class)); + cards.add(new SetCardInfo("Everglades", 162, Rarity.UNCOMMON, mage.cards.e.Everglades.class)); + cards.add(new SetCardInfo("Eye of Singularity", 4, Rarity.RARE, mage.cards.e.EyeOfSingularity.class)); + cards.add(new SetCardInfo("Fallen Askari", 59, Rarity.COMMON, mage.cards.f.FallenAskari.class)); + cards.add(new SetCardInfo("Femeref Enchantress", 129, Rarity.RARE, mage.cards.f.FemerefEnchantress.class)); + cards.add(new SetCardInfo("Feral Instinct", 107, Rarity.COMMON, mage.cards.f.FeralInstinct.class)); + cards.add(new SetCardInfo("Fireblast", 79, Rarity.COMMON, mage.cards.f.Fireblast.class)); + cards.add(new SetCardInfo("Firestorm Hellkite", 130, Rarity.RARE, mage.cards.f.FirestormHellkite.class)); + cards.add(new SetCardInfo("Flooded Shoreline", 32, Rarity.RARE, mage.cards.f.FloodedShoreline.class)); + cards.add(new SetCardInfo("Foreshadow", 33, Rarity.UNCOMMON, mage.cards.f.Foreshadow.class)); + cards.add(new SetCardInfo("Freewind Falcon", 5, Rarity.COMMON, mage.cards.f.FreewindFalcon.class)); + cards.add(new SetCardInfo("Funeral Charm", 61, Rarity.COMMON, mage.cards.f.FuneralCharm.class)); + cards.add(new SetCardInfo("Giant Caterpillar", 108, Rarity.COMMON, mage.cards.g.GiantCaterpillar.class)); + cards.add(new SetCardInfo("Goblin Recruiter", 80, Rarity.UNCOMMON, mage.cards.g.GoblinRecruiter.class)); + cards.add(new SetCardInfo("Goblin Swine-Rider", 81, Rarity.COMMON, mage.cards.g.GoblinSwineRider.class)); + cards.add(new SetCardInfo("Gossamer Chains", 6, Rarity.COMMON, mage.cards.g.GossamerChains.class)); + cards.add(new SetCardInfo("Griffin Canyon", 163, Rarity.RARE, mage.cards.g.GriffinCanyon.class)); + cards.add(new SetCardInfo("Guiding Spirit", 131, Rarity.RARE, mage.cards.g.GuidingSpirit.class)); + cards.add(new SetCardInfo("Hearth Charm", 82, Rarity.COMMON, mage.cards.h.HearthCharm.class)); + cards.add(new SetCardInfo("Helm of Awakening", 145, Rarity.UNCOMMON, mage.cards.h.HelmOfAwakening.class)); + cards.add(new SetCardInfo("Honorable Passage", 7, Rarity.UNCOMMON, mage.cards.h.HonorablePassage.class)); + cards.add(new SetCardInfo("Hope Charm", 8, Rarity.COMMON, mage.cards.h.HopeCharm.class)); + cards.add(new SetCardInfo("Hulking Cyclops", 84, Rarity.UNCOMMON, mage.cards.h.HulkingCyclops.class)); + cards.add(new SetCardInfo("Impulse", 34, Rarity.COMMON, mage.cards.i.Impulse.class)); + cards.add(new SetCardInfo("Infantry Veteran", 9, Rarity.COMMON, mage.cards.i.InfantryVeteran.class)); + cards.add(new SetCardInfo("Infernal Harvest", 62, Rarity.COMMON, mage.cards.i.InfernalHarvest.class)); + cards.add(new SetCardInfo("Inspiration", 35, Rarity.COMMON, mage.cards.i.Inspiration.class)); + cards.add(new SetCardInfo("Iron-Heart Chimera", 146, Rarity.UNCOMMON, mage.cards.i.IronHeartChimera.class)); + cards.add(new SetCardInfo("Jamuraan Lion", 10, Rarity.COMMON, mage.cards.j.JamuraanLion.class)); + cards.add(new SetCardInfo("Juju Bubble", 147, Rarity.UNCOMMON, mage.cards.j.JujuBubble.class)); + cards.add(new SetCardInfo("Jungle Basin", 164, Rarity.UNCOMMON, mage.cards.j.JungleBasin.class)); + cards.add(new SetCardInfo("Kaervek's Spite", 63, Rarity.RARE, mage.cards.k.KaerveksSpite.class)); + cards.add(new SetCardInfo("Karoo", 165, Rarity.UNCOMMON, mage.cards.k.Karoo.class)); + cards.add(new SetCardInfo("Katabatic Winds", 109, Rarity.RARE, mage.cards.k.KatabaticWinds.class)); + cards.add(new SetCardInfo("Keeper of Kookus", 85, Rarity.COMMON, mage.cards.k.KeeperOfKookus.class)); + cards.add(new SetCardInfo("King Cheetah", 110, Rarity.COMMON, mage.cards.k.KingCheetah.class)); + cards.add(new SetCardInfo("Knight of the Mists", 36, Rarity.COMMON, mage.cards.k.KnightOfTheMists.class)); + cards.add(new SetCardInfo("Knight of Valor", 11, Rarity.COMMON, mage.cards.k.KnightOfValor.class)); + cards.add(new SetCardInfo("Kookus", 86, Rarity.RARE, mage.cards.k.Kookus.class)); + cards.add(new SetCardInfo("Kyscu Drake", 111, Rarity.RARE, mage.cards.k.KyscuDrake.class)); + cards.add(new SetCardInfo("Lead-Belly Chimera", 148, Rarity.UNCOMMON, mage.cards.l.LeadBellyChimera.class)); + cards.add(new SetCardInfo("Lichenthrope", 112, Rarity.RARE, mage.cards.l.Lichenthrope.class)); + cards.add(new SetCardInfo("Lightning Cloud", 87, Rarity.RARE, mage.cards.l.LightningCloud.class)); + cards.add(new SetCardInfo("Longbow Archer", 12, Rarity.UNCOMMON, mage.cards.l.LongbowArcher.class)); + cards.add(new SetCardInfo("Magma Mine", 149, Rarity.UNCOMMON, mage.cards.m.MagmaMine.class)); + cards.add(new SetCardInfo("Man-o'-War", 37, Rarity.COMMON, mage.cards.m.ManOWar.class)); + cards.add(new SetCardInfo("Miraculous Recovery", 13, Rarity.UNCOMMON, mage.cards.m.MiraculousRecovery.class)); + cards.add(new SetCardInfo("Mob Mentality", 88, Rarity.UNCOMMON, mage.cards.m.MobMentality.class)); + cards.add(new SetCardInfo("Mortal Wound", 113, Rarity.COMMON, mage.cards.m.MortalWound.class)); + cards.add(new SetCardInfo("Mundungu", 132, Rarity.UNCOMMON, mage.cards.m.Mundungu.class)); + cards.add(new SetCardInfo("Mystic Veil", 38, Rarity.COMMON, mage.cards.m.MysticVeil.class)); + cards.add(new SetCardInfo("Natural Order", 114, Rarity.RARE, mage.cards.n.NaturalOrder.class)); + cards.add(new SetCardInfo("Necromancy", 64, Rarity.UNCOMMON, mage.cards.n.Necromancy.class)); + cards.add(new SetCardInfo("Necrosavant", 65, Rarity.RARE, mage.cards.n.Necrosavant.class)); + cards.add(new SetCardInfo("Nekrataal", 66, Rarity.UNCOMMON, mage.cards.n.Nekrataal.class)); + cards.add(new SetCardInfo("Ovinomancer", 39, Rarity.UNCOMMON, mage.cards.o.Ovinomancer.class)); + cards.add(new SetCardInfo("Panther Warriors", 115, Rarity.COMMON, mage.cards.p.PantherWarriors.class)); + cards.add(new SetCardInfo("Parapet", 14, Rarity.COMMON, mage.cards.p.Parapet.class)); + cards.add(new SetCardInfo("Peace Talks", 15, Rarity.UNCOMMON, mage.cards.p.PeaceTalks.class)); + cards.add(new SetCardInfo("Phyrexian Marauder", 151, Rarity.RARE, mage.cards.p.PhyrexianMarauder.class)); + cards.add(new SetCardInfo("Phyrexian Walker", 152, Rarity.COMMON, mage.cards.p.PhyrexianWalker.class)); + cards.add(new SetCardInfo("Pillar Tombs of Aku", 67, Rarity.RARE, mage.cards.p.PillarTombsOfAku.class)); + cards.add(new SetCardInfo("Prosperity", 40, Rarity.UNCOMMON, mage.cards.p.Prosperity.class)); + cards.add(new SetCardInfo("Python", 68, Rarity.COMMON, mage.cards.p.Python.class)); + cards.add(new SetCardInfo("Quicksand", 166, Rarity.UNCOMMON, mage.cards.q.Quicksand.class)); + cards.add(new SetCardInfo("Quirion Druid", 116, Rarity.RARE, mage.cards.q.QuirionDruid.class)); + cards.add(new SetCardInfo("Quirion Ranger", 117, Rarity.COMMON, mage.cards.q.QuirionRanger.class)); + cards.add(new SetCardInfo("Raging Gorilla", 90, Rarity.COMMON, mage.cards.r.RagingGorilla.class)); + cards.add(new SetCardInfo("Rainbow Efreet", 41, Rarity.RARE, mage.cards.r.RainbowEfreet.class)); + cards.add(new SetCardInfo("Relentless Assault", 91, Rarity.RARE, mage.cards.r.RelentlessAssault.class)); + cards.add(new SetCardInfo("Relic Ward", 16, Rarity.UNCOMMON, mage.cards.r.RelicWard.class)); + cards.add(new SetCardInfo("Remedy", 17, Rarity.COMMON, mage.cards.r.Remedy.class)); + cards.add(new SetCardInfo("Resistance Fighter", 18, Rarity.COMMON, mage.cards.r.ResistanceFighter.class)); + cards.add(new SetCardInfo("Retribution of the Meek", 19, Rarity.RARE, mage.cards.r.RetributionOfTheMeek.class)); + cards.add(new SetCardInfo("Righteous Aura", 20, Rarity.COMMON, mage.cards.r.RighteousAura.class)); + cards.add(new SetCardInfo("Righteous War", 134, Rarity.RARE, mage.cards.r.RighteousWar.class)); + cards.add(new SetCardInfo("River Boa", 118, Rarity.COMMON, mage.cards.r.RiverBoa.class)); + cards.add(new SetCardInfo("Rock Slide", 92, Rarity.COMMON, mage.cards.r.RockSlide.class)); + cards.add(new SetCardInfo("Rowen", 119, Rarity.RARE, mage.cards.r.Rowen.class)); + cards.add(new SetCardInfo("Sands of Time", 153, Rarity.RARE, mage.cards.s.SandsOfTime.class)); + cards.add(new SetCardInfo("Scalebane's Elite", 135, Rarity.UNCOMMON, mage.cards.s.ScalebanesElite.class)); + cards.add(new SetCardInfo("Shimmering Efreet", 42, Rarity.UNCOMMON, mage.cards.s.ShimmeringEfreet.class)); + cards.add(new SetCardInfo("Shrieking Drake", 43, Rarity.COMMON, mage.cards.s.ShriekingDrake.class)); + cards.add(new SetCardInfo("Simoon", 136, Rarity.UNCOMMON, mage.cards.s.Simoon.class)); + cards.add(new SetCardInfo("Sisay's Ring", 154, Rarity.COMMON, mage.cards.s.SisaysRing.class)); + cards.add(new SetCardInfo("Snake Basket", 155, Rarity.RARE, mage.cards.s.SnakeBasket.class)); + cards.add(new SetCardInfo("Solfatara", 93, Rarity.COMMON, mage.cards.s.Solfatara.class)); + cards.add(new SetCardInfo("Song of Blood", 94, Rarity.COMMON, mage.cards.s.SongOfBlood.class)); + cards.add(new SetCardInfo("Spider Climb", 120, Rarity.COMMON, mage.cards.s.SpiderClimb.class)); + cards.add(new SetCardInfo("Spitting Drake", 95, Rarity.UNCOMMON, mage.cards.s.SpittingDrake.class)); + cards.add(new SetCardInfo("Squandered Resources", 137, Rarity.RARE, mage.cards.s.SquanderedResources.class)); + cards.add(new SetCardInfo("Stampeding Wildebeests", 121, Rarity.UNCOMMON, mage.cards.s.StampedingWildebeests.class)); + cards.add(new SetCardInfo("Suleiman's Legacy", 138, Rarity.RARE, mage.cards.s.SuleimansLegacy.class)); + cards.add(new SetCardInfo("Summer Bloom", 122, Rarity.UNCOMMON, mage.cards.s.SummerBloom.class)); + cards.add(new SetCardInfo("Sun Clasp", 21, Rarity.COMMON, mage.cards.s.SunClasp.class)); + cards.add(new SetCardInfo("Suq'Ata Assassin", 69, Rarity.UNCOMMON, mage.cards.s.SuqAtaAssassin.class)); + cards.add(new SetCardInfo("Suq'Ata Lancer", 96, Rarity.COMMON, mage.cards.s.SuqAtaLancer.class)); + cards.add(new SetCardInfo("Talruum Champion", 97, Rarity.COMMON, mage.cards.t.TalruumChampion.class)); + cards.add(new SetCardInfo("Talruum Piper", 98, Rarity.UNCOMMON, mage.cards.t.TalruumPiper.class)); + cards.add(new SetCardInfo("Tar Pit Warrior", 70, Rarity.COMMON, mage.cards.t.TarPitWarrior.class)); + cards.add(new SetCardInfo("Teferi's Honor Guard", 22, Rarity.UNCOMMON, mage.cards.t.TeferisHonorGuard.class)); + cards.add(new SetCardInfo("Teferi's Puzzle Box", 156, Rarity.RARE, mage.cards.t.TeferisPuzzleBox.class)); + cards.add(new SetCardInfo("Teferi's Realm", 44, Rarity.RARE, mage.cards.t.TeferisRealm.class)); + cards.add(new SetCardInfo("Tempest Drake", 139, Rarity.UNCOMMON, mage.cards.t.TempestDrake.class)); + cards.add(new SetCardInfo("Three Wishes", 45, Rarity.RARE, mage.cards.t.ThreeWishes.class)); + cards.add(new SetCardInfo("Tin-Wing Chimera", 157, Rarity.UNCOMMON, mage.cards.t.TinWingChimera.class)); + cards.add(new SetCardInfo("Tithe", 23, Rarity.RARE, mage.cards.t.Tithe.class)); + cards.add(new SetCardInfo("Tremor", 99, Rarity.COMMON, mage.cards.t.Tremor.class)); + cards.add(new SetCardInfo("Triangle of War", 158, Rarity.RARE, mage.cards.t.TriangleOfWar.class)); + cards.add(new SetCardInfo("Uktabi Orangutan", 123, Rarity.UNCOMMON, mage.cards.u.UktabiOrangutan.class)); + cards.add(new SetCardInfo("Undiscovered Paradise", 167, Rarity.RARE, mage.cards.u.UndiscoveredParadise.class)); + cards.add(new SetCardInfo("Undo", 47, Rarity.COMMON, mage.cards.u.Undo.class)); + cards.add(new SetCardInfo("Urborg Mindsucker", 71, Rarity.COMMON, mage.cards.u.UrborgMindsucker.class)); + cards.add(new SetCardInfo("Vampiric Tutor", 72, Rarity.RARE, mage.cards.v.VampiricTutor.class)); + cards.add(new SetCardInfo("Vampirism", 73, Rarity.UNCOMMON, mage.cards.v.Vampirism.class)); + cards.add(new SetCardInfo("Vanishing", 48, Rarity.COMMON, mage.cards.v.Vanishing.class)); + cards.add(new SetCardInfo("Viashino Sandstalker", 100, Rarity.UNCOMMON, mage.cards.v.ViashinoSandstalker.class)); + cards.add(new SetCardInfo("Viashivan Dragon", 140, Rarity.RARE, mage.cards.v.ViashivanDragon.class)); + cards.add(new SetCardInfo("Vision Charm", 49, Rarity.COMMON, mage.cards.v.VisionCharm.class)); + cards.add(new SetCardInfo("Wake of Vultures", 74, Rarity.COMMON, mage.cards.w.WakeOfVultures.class)); + cards.add(new SetCardInfo("Wand of Denial", 159, Rarity.RARE, mage.cards.w.WandOfDenial.class)); + cards.add(new SetCardInfo("Warrior's Honor", 24, Rarity.COMMON, mage.cards.w.WarriorsHonor.class)); + cards.add(new SetCardInfo("Warthog", 124, Rarity.COMMON, mage.cards.w.Warthog.class)); + cards.add(new SetCardInfo("Waterspout Djinn", 50, Rarity.UNCOMMON, mage.cards.w.WaterspoutDjinn.class)); + cards.add(new SetCardInfo("Wicked Reward", 75, Rarity.COMMON, mage.cards.w.WickedReward.class)); + cards.add(new SetCardInfo("Wind Shear", 125, Rarity.UNCOMMON, mage.cards.w.WindShear.class)); + cards.add(new SetCardInfo("Zhalfirin Crusader", 25, Rarity.RARE, mage.cards.z.ZhalfirinCrusader.class)); + } +} diff --git a/Mage.Sets/src/mage/sets/Weatherlight.java b/Mage.Sets/src/mage/sets/Weatherlight.java index 081e00769bd..ad5e41d063a 100644 --- a/Mage.Sets/src/mage/sets/Weatherlight.java +++ b/Mage.Sets/src/mage/sets/Weatherlight.java @@ -1,197 +1,197 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author noxx - */ -public final class Weatherlight extends ExpansionSet { - - private static final Weatherlight instance = new Weatherlight(); - - public static Weatherlight getInstance() { - return instance; - } - - private Weatherlight() { - super("Weatherlight", "WTH", ExpansionSet.buildDate(1997, 5, 31), SetType.EXPANSION); - this.blockName = "Mirage"; - this.parentSet = Mirage.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Abduction", 30, Rarity.UNCOMMON, mage.cards.a.Abduction.class)); - cards.add(new SetCardInfo("Abeyance", 1, Rarity.RARE, mage.cards.a.Abeyance.class)); - cards.add(new SetCardInfo("Abjure", 31, Rarity.COMMON, mage.cards.a.Abjure.class)); - cards.add(new SetCardInfo("Aboroth", 117, Rarity.RARE, mage.cards.a.Aboroth.class)); - cards.add(new SetCardInfo("Abyssal Gatekeeper", 59, Rarity.COMMON, mage.cards.a.AbyssalGatekeeper.class)); - cards.add(new SetCardInfo("Aether Flash", 88, Rarity.UNCOMMON, mage.cards.a.AetherFlash.class)); - cards.add(new SetCardInfo("Agonizing Memories", 60, Rarity.UNCOMMON, mage.cards.a.AgonizingMemories.class)); - cards.add(new SetCardInfo("Alabaster Dragon", 2, Rarity.RARE, mage.cards.a.AlabasterDragon.class)); - cards.add(new SetCardInfo("Alms", 3, Rarity.COMMON, mage.cards.a.Alms.class)); - cards.add(new SetCardInfo("Ancestral Knowledge", 32, Rarity.RARE, mage.cards.a.AncestralKnowledge.class)); - cards.add(new SetCardInfo("Angelic Renewal", 4, Rarity.COMMON, mage.cards.a.AngelicRenewal.class)); - cards.add(new SetCardInfo("Apathy", 33, Rarity.COMMON, mage.cards.a.Apathy.class)); - cards.add(new SetCardInfo("Arctic Wolves", 118, Rarity.UNCOMMON, mage.cards.a.ArcticWolves.class)); - cards.add(new SetCardInfo("Ardent Militia", 5, Rarity.COMMON, mage.cards.a.ArdentMilitia.class)); - cards.add(new SetCardInfo("Argivian Find", 6, Rarity.UNCOMMON, mage.cards.a.ArgivianFind.class)); - cards.add(new SetCardInfo("Argivian Restoration", 34, Rarity.UNCOMMON, mage.cards.a.ArgivianRestoration.class)); - cards.add(new SetCardInfo("Aura of Silence", 7, Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class)); - cards.add(new SetCardInfo("Avizoa", 35, Rarity.RARE, mage.cards.a.Avizoa.class)); - cards.add(new SetCardInfo("Barishi", 119, Rarity.UNCOMMON, mage.cards.b.Barishi.class)); - cards.add(new SetCardInfo("Barrow Ghoul", 61, Rarity.COMMON, mage.cards.b.BarrowGhoul.class)); - cards.add(new SetCardInfo("Benalish Infantry", 8, Rarity.COMMON, mage.cards.b.BenalishInfantry.class)); - cards.add(new SetCardInfo("Benalish Knight", 9, Rarity.COMMON, mage.cards.b.BenalishKnight.class)); - cards.add(new SetCardInfo("Benalish Missionary", 10, Rarity.COMMON, mage.cards.b.BenalishMissionary.class)); - cards.add(new SetCardInfo("Betrothed of Fire", 89, Rarity.COMMON, mage.cards.b.BetrothedOfFire.class)); - cards.add(new SetCardInfo("Bloodrock Cyclops", 90, Rarity.COMMON, mage.cards.b.BloodrockCyclops.class)); - cards.add(new SetCardInfo("Blossoming Wreath", 120, Rarity.COMMON, mage.cards.b.BlossomingWreath.class)); - cards.add(new SetCardInfo("Bogardan Firefiend", 91, Rarity.COMMON, mage.cards.b.BogardanFirefiend.class)); - cards.add(new SetCardInfo("Boiling Blood", 92, Rarity.COMMON, mage.cards.b.BoilingBlood.class)); - cards.add(new SetCardInfo("Bone Dancer", 62, Rarity.RARE, mage.cards.b.BoneDancer.class)); - cards.add(new SetCardInfo("Bosium Strip", 147, Rarity.RARE, mage.cards.b.BosiumStrip.class)); - cards.add(new SetCardInfo("Briar Shield", 121, Rarity.COMMON, mage.cards.b.BriarShield.class)); - cards.add(new SetCardInfo("Bubble Matrix", 146, Rarity.RARE, mage.cards.b.BubbleMatrix.class)); - cards.add(new SetCardInfo("Buried Alive", 63, Rarity.UNCOMMON, mage.cards.b.BuriedAlive.class)); - cards.add(new SetCardInfo("Call of the Wild", 122, Rarity.RARE, mage.cards.c.CallOfTheWild.class)); - cards.add(new SetCardInfo("Chimeric Sphere", 148, Rarity.UNCOMMON, mage.cards.c.ChimericSphere.class)); - cards.add(new SetCardInfo("Choking Vines", 123, Rarity.COMMON, mage.cards.c.ChokingVines.class)); - cards.add(new SetCardInfo("Cinder Giant", 93, Rarity.UNCOMMON, mage.cards.c.CinderGiant.class)); - cards.add(new SetCardInfo("Cinder Wall", 94, Rarity.COMMON, mage.cards.c.CinderWall.class)); - cards.add(new SetCardInfo("Circling Vultures", 64, Rarity.UNCOMMON, mage.cards.c.CirclingVultures.class)); - cards.add(new SetCardInfo("Cloud Djinn", 36, Rarity.UNCOMMON, mage.cards.c.CloudDjinn.class)); - cards.add(new SetCardInfo("Coils of the Medusa", 65, Rarity.COMMON, mage.cards.c.CoilsOfTheMedusa.class)); - cards.add(new SetCardInfo("Cone of Flame", 95, Rarity.UNCOMMON, mage.cards.c.ConeOfFlame.class)); - cards.add(new SetCardInfo("Debt of Loyalty", 11, Rarity.RARE, mage.cards.d.DebtOfLoyalty.class)); - cards.add(new SetCardInfo("Dense Foliage", 124, Rarity.RARE, mage.cards.d.DenseFoliage.class)); - cards.add(new SetCardInfo("Desperate Gambit", 96, Rarity.UNCOMMON, mage.cards.d.DesperateGambit.class)); - cards.add(new SetCardInfo("Dingus Staff", 149, Rarity.UNCOMMON, mage.cards.d.DingusStaff.class)); - cards.add(new SetCardInfo("Disrupt", 37, Rarity.COMMON, mage.cards.d.Disrupt.class)); - cards.add(new SetCardInfo("Doomsday", 66, Rarity.RARE, mage.cards.d.Doomsday.class)); - cards.add(new SetCardInfo("Downdraft", 125, Rarity.UNCOMMON, mage.cards.d.Downdraft.class)); - cards.add(new SetCardInfo("Duskrider Falcon", 12, Rarity.COMMON, mage.cards.d.DuskriderFalcon.class)); - cards.add(new SetCardInfo("Dwarven Berserker", 97, Rarity.COMMON, mage.cards.d.DwarvenBerserker.class)); - cards.add(new SetCardInfo("Dwarven Thaumaturgist", 98, Rarity.RARE, mage.cards.d.DwarvenThaumaturgist.class)); - cards.add(new SetCardInfo("Empyrial Armor", 13, Rarity.COMMON, mage.cards.e.EmpyrialArmor.class)); - cards.add(new SetCardInfo("Fallow Wurm", 126, Rarity.UNCOMMON, mage.cards.f.FallowWurm.class)); - cards.add(new SetCardInfo("Familiar Ground", 127, Rarity.UNCOMMON, mage.cards.f.FamiliarGround.class)); - cards.add(new SetCardInfo("Fatal Blow", 67, Rarity.COMMON, mage.cards.f.FatalBlow.class)); - cards.add(new SetCardInfo("Fervor", 99, Rarity.RARE, mage.cards.f.Fervor.class)); - cards.add(new SetCardInfo("Festering Evil", 68, Rarity.UNCOMMON, mage.cards.f.FesteringEvil.class)); - cards.add(new SetCardInfo("Fire Whip", 100, Rarity.COMMON, mage.cards.f.FireWhip.class)); - cards.add(new SetCardInfo("Firestorm", 101, Rarity.RARE, mage.cards.f.Firestorm.class)); - cards.add(new SetCardInfo("Fit of Rage", 102, Rarity.COMMON, mage.cards.f.FitOfRage.class)); - cards.add(new SetCardInfo("Fledgling Djinn", 69, Rarity.COMMON, mage.cards.f.FledglingDjinn.class)); - cards.add(new SetCardInfo("Flux", 39, Rarity.COMMON, mage.cards.f.Flux.class)); - cards.add(new SetCardInfo("Fog Elemental", 40, Rarity.COMMON, mage.cards.f.FogElemental.class)); - cards.add(new SetCardInfo("Foriysian Brigade", 14, Rarity.UNCOMMON, mage.cards.f.ForiysianBrigade.class)); - cards.add(new SetCardInfo("Fungus Elemental", 128, Rarity.RARE, mage.cards.f.FungusElemental.class)); - cards.add(new SetCardInfo("Gaea's Blessing", 129, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); - cards.add(new SetCardInfo("Gallowbraid", 70, Rarity.RARE, mage.cards.g.Gallowbraid.class)); - cards.add(new SetCardInfo("Gemstone Mine", 164, Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class)); - cards.add(new SetCardInfo("Gerrard's Wisdom", 15, Rarity.UNCOMMON, mage.cards.g.GerrardsWisdom.class)); - cards.add(new SetCardInfo("Goblin Bomb", 103, Rarity.RARE, mage.cards.g.GoblinBomb.class)); - cards.add(new SetCardInfo("Goblin Grenadiers", 104, Rarity.UNCOMMON, mage.cards.g.GoblinGrenadiers.class)); - cards.add(new SetCardInfo("Goblin Vandal", 105, Rarity.COMMON, mage.cards.g.GoblinVandal.class)); - cards.add(new SetCardInfo("Guided Strike", 16, Rarity.COMMON, mage.cards.g.GuidedStrike.class)); - cards.add(new SetCardInfo("Harvest Wurm", 130, Rarity.COMMON, mage.cards.h.HarvestWurm.class)); - cards.add(new SetCardInfo("Haunting Misery", 71, Rarity.COMMON, mage.cards.h.HauntingMisery.class)); - cards.add(new SetCardInfo("Heart of Bogardan", 106, Rarity.RARE, mage.cards.h.HeartOfBogardan.class)); - cards.add(new SetCardInfo("Heat Stroke", 107, Rarity.RARE, mage.cards.h.HeatStroke.class)); - cards.add(new SetCardInfo("Heavy Ballista", 17, Rarity.COMMON, mage.cards.h.HeavyBallista.class)); - cards.add(new SetCardInfo("Hidden Horror", 72, Rarity.UNCOMMON, mage.cards.h.HiddenHorror.class)); - cards.add(new SetCardInfo("Hurloon Shaman", 108, Rarity.UNCOMMON, mage.cards.h.HurloonShaman.class)); - cards.add(new SetCardInfo("Infernal Tribute", 73, Rarity.RARE, mage.cards.i.InfernalTribute.class)); - cards.add(new SetCardInfo("Inner Sanctum", 18, Rarity.RARE, mage.cards.i.InnerSanctum.class)); - cards.add(new SetCardInfo("Jabari's Banner", 150, Rarity.UNCOMMON, mage.cards.j.JabarisBanner.class)); - cards.add(new SetCardInfo("Jangling Automaton", 151, Rarity.COMMON, mage.cards.j.JanglingAutomaton.class)); - cards.add(new SetCardInfo("Kithkin Armor", 19, Rarity.COMMON, mage.cards.k.KithkinArmor.class)); - cards.add(new SetCardInfo("Lava Hounds", 109, Rarity.UNCOMMON, mage.cards.l.LavaHounds.class)); - cards.add(new SetCardInfo("Lava Storm", 110, Rarity.COMMON, mage.cards.l.LavaStorm.class)); - cards.add(new SetCardInfo("Liege of the Hollows", 131, Rarity.RARE, mage.cards.l.LiegeOfTheHollows.class)); - cards.add(new SetCardInfo("Llanowar Behemoth", 132, Rarity.UNCOMMON, mage.cards.l.LlanowarBehemoth.class)); - cards.add(new SetCardInfo("Llanowar Druid", 133, Rarity.COMMON, mage.cards.l.LlanowarDruid.class)); - cards.add(new SetCardInfo("Llanowar Sentinel", 134, Rarity.COMMON, mage.cards.l.LlanowarSentinel.class)); - cards.add(new SetCardInfo("Lotus Vale", 165, Rarity.RARE, mage.cards.l.LotusVale.class)); - cards.add(new SetCardInfo("Mana Chains", 41, Rarity.COMMON, mage.cards.m.ManaChains.class)); - cards.add(new SetCardInfo("Mana Web", 152, Rarity.RARE, mage.cards.m.ManaWeb.class)); - cards.add(new SetCardInfo("Manta Ray", 42, Rarity.COMMON, mage.cards.m.MantaRay.class)); - cards.add(new SetCardInfo("Maraxus of Keld", 111, Rarity.RARE, mage.cards.m.MaraxusOfKeld.class)); - cards.add(new SetCardInfo("Master of Arms", 20, Rarity.UNCOMMON, mage.cards.m.MasterOfArms.class)); - cards.add(new SetCardInfo("Merfolk Traders", 43, Rarity.COMMON, mage.cards.m.MerfolkTraders.class)); - cards.add(new SetCardInfo("Mind Stone", 153, Rarity.COMMON, mage.cards.m.MindStone.class)); - cards.add(new SetCardInfo("Mischievous Poltergeist", 74, Rarity.UNCOMMON, mage.cards.m.MischievousPoltergeist.class)); - cards.add(new SetCardInfo("Mistmoon Griffin", 21, Rarity.UNCOMMON, mage.cards.m.MistmoonGriffin.class)); - cards.add(new SetCardInfo("Morinfen", 75, Rarity.RARE, mage.cards.m.Morinfen.class)); - cards.add(new SetCardInfo("Mwonvuli Ooze", 135, Rarity.RARE, mage.cards.m.MwonvuliOoze.class)); - cards.add(new SetCardInfo("Nature's Kiss", 136, Rarity.COMMON, mage.cards.n.NaturesKiss.class)); - cards.add(new SetCardInfo("Nature's Resurgence", 137, Rarity.RARE, mage.cards.n.NaturesResurgence.class)); - cards.add(new SetCardInfo("Necratog", 76, Rarity.UNCOMMON, mage.cards.n.Necratog.class)); - cards.add(new SetCardInfo("Noble Benefactor", 44, Rarity.UNCOMMON, mage.cards.n.NobleBenefactor.class)); - cards.add(new SetCardInfo("Null Rod", 154, Rarity.RARE, mage.cards.n.NullRod.class)); - cards.add(new SetCardInfo("Odylic Wraith", 77, Rarity.UNCOMMON, mage.cards.o.OdylicWraith.class)); - cards.add(new SetCardInfo("Ophidian", 45, Rarity.COMMON, mage.cards.o.Ophidian.class)); - cards.add(new SetCardInfo("Orcish Settlers", 112, Rarity.UNCOMMON, mage.cards.o.OrcishSettlers.class)); - cards.add(new SetCardInfo("Paradigm Shift", 46, Rarity.RARE, mage.cards.p.ParadigmShift.class)); - cards.add(new SetCardInfo("Peacekeeper", 22, Rarity.RARE, mage.cards.p.Peacekeeper.class)); - cards.add(new SetCardInfo("Pendrell Mists", 47, Rarity.RARE, mage.cards.p.PendrellMists.class)); - cards.add(new SetCardInfo("Phantom Warrior", 48, Rarity.UNCOMMON, mage.cards.p.PhantomWarrior.class)); - cards.add(new SetCardInfo("Phantom Wings", 49, Rarity.COMMON, mage.cards.p.PhantomWings.class)); - cards.add(new SetCardInfo("Phyrexian Furnace", 155, Rarity.UNCOMMON, mage.cards.p.PhyrexianFurnace.class)); - cards.add(new SetCardInfo("Psychic Vortex", 50, Rarity.RARE, mage.cards.p.PsychicVortex.class)); - cards.add(new SetCardInfo("Razortooth Rats", 78, Rarity.COMMON, mage.cards.r.RazortoothRats.class)); - cards.add(new SetCardInfo("Redwood Treefolk", 138, Rarity.COMMON, mage.cards.r.RedwoodTreefolk.class)); - cards.add(new SetCardInfo("Relearn", 51, Rarity.UNCOMMON, mage.cards.r.Relearn.class)); - cards.add(new SetCardInfo("Revered Unicorn", 23, Rarity.UNCOMMON, mage.cards.r.ReveredUnicorn.class)); - cards.add(new SetCardInfo("Roc Hatchling", 113, Rarity.UNCOMMON, mage.cards.r.RocHatchling.class)); - cards.add(new SetCardInfo("Rogue Elephant", 139, Rarity.COMMON, mage.cards.r.RogueElephant.class)); - cards.add(new SetCardInfo("Sage Owl", 52, Rarity.COMMON, mage.cards.s.SageOwl.class)); - cards.add(new SetCardInfo("Sawtooth Ogre", 114, Rarity.COMMON, mage.cards.s.SawtoothOgre.class)); - cards.add(new SetCardInfo("Scorched Ruins", 166, Rarity.RARE, mage.cards.s.ScorchedRuins.class)); - cards.add(new SetCardInfo("Serenity", 24, Rarity.RARE, mage.cards.s.Serenity.class)); - cards.add(new SetCardInfo("Serra's Blessing", 25, Rarity.UNCOMMON, mage.cards.s.SerrasBlessing.class)); - cards.add(new SetCardInfo("Serrated Biskelion", 156, Rarity.UNCOMMON, mage.cards.s.SerratedBiskelion.class)); - cards.add(new SetCardInfo("Shadow Rider", 79, Rarity.COMMON, mage.cards.s.ShadowRider.class)); - cards.add(new SetCardInfo("Shattered Crypt", 80, Rarity.COMMON, mage.cards.s.ShatteredCrypt.class)); - cards.add(new SetCardInfo("Soul Shepherd", 26, Rarity.COMMON, mage.cards.s.SoulShepherd.class)); - cards.add(new SetCardInfo("Southern Paladin", 27, Rarity.RARE, mage.cards.s.SouthernPaladin.class)); - cards.add(new SetCardInfo("Spinning Darkness", 81, Rarity.COMMON, mage.cards.s.SpinningDarkness.class)); - cards.add(new SetCardInfo("Steel Golem", 157, Rarity.UNCOMMON, mage.cards.s.SteelGolem.class)); - cards.add(new SetCardInfo("Strands of Night", 82, Rarity.UNCOMMON, mage.cards.s.StrandsOfNight.class)); - cards.add(new SetCardInfo("Straw Golem", 158, Rarity.UNCOMMON, mage.cards.s.StrawGolem.class)); - cards.add(new SetCardInfo("Striped Bears", 140, Rarity.COMMON, mage.cards.s.StripedBears.class)); - cards.add(new SetCardInfo("Sylvan Hierophant", 141, Rarity.UNCOMMON, mage.cards.s.SylvanHierophant.class)); - cards.add(new SetCardInfo("Tariff", 28, Rarity.RARE, mage.cards.t.Tariff.class)); - cards.add(new SetCardInfo("Teferi's Veil", 53, Rarity.UNCOMMON, mage.cards.t.TeferisVeil.class)); - cards.add(new SetCardInfo("Tendrils of Despair", 83, Rarity.COMMON, mage.cards.t.TendrilsOfDespair.class)); - cards.add(new SetCardInfo("Thran Forge", 159, Rarity.UNCOMMON, mage.cards.t.ThranForge.class)); - cards.add(new SetCardInfo("Thran Tome", 160, Rarity.RARE, mage.cards.t.ThranTome.class)); - cards.add(new SetCardInfo("Thunderbolt", 115, Rarity.COMMON, mage.cards.t.Thunderbolt.class)); - cards.add(new SetCardInfo("Thundermare", 116, Rarity.RARE, mage.cards.t.Thundermare.class)); - cards.add(new SetCardInfo("Timid Drake", 54, Rarity.UNCOMMON, mage.cards.t.TimidDrake.class)); - cards.add(new SetCardInfo("Tolarian Drake", 55, Rarity.COMMON, mage.cards.t.TolarianDrake.class)); - cards.add(new SetCardInfo("Tolarian Entrancer", 56, Rarity.RARE, mage.cards.t.TolarianEntrancer.class)); - cards.add(new SetCardInfo("Tolarian Serpent", 57, Rarity.RARE, mage.cards.t.TolarianSerpent.class)); - cards.add(new SetCardInfo("Touchstone", 161, Rarity.UNCOMMON, mage.cards.t.Touchstone.class)); - cards.add(new SetCardInfo("Tranquil Grove", 142, Rarity.RARE, mage.cards.t.TranquilGrove.class)); - cards.add(new SetCardInfo("Uktabi Efreet", 143, Rarity.COMMON, mage.cards.u.UktabiEfreet.class)); - cards.add(new SetCardInfo("Urborg Justice", 84, Rarity.RARE, mage.cards.u.UrborgJustice.class)); - cards.add(new SetCardInfo("Urborg Stalker", 85, Rarity.RARE, mage.cards.u.UrborgStalker.class)); - cards.add(new SetCardInfo("Veteran Explorer", 144, Rarity.UNCOMMON, mage.cards.v.VeteranExplorer.class)); - cards.add(new SetCardInfo("Vitalize", 145, Rarity.COMMON, mage.cards.v.Vitalize.class)); - cards.add(new SetCardInfo("Vodalian Illusionist", 58, Rarity.UNCOMMON, mage.cards.v.VodalianIllusionist.class)); - cards.add(new SetCardInfo("Volunteer Reserves", 29, Rarity.UNCOMMON, mage.cards.v.VolunteerReserves.class)); - cards.add(new SetCardInfo("Wave of Terror", 86, Rarity.RARE, mage.cards.w.WaveOfTerror.class)); - cards.add(new SetCardInfo("Well of Knowledge", 162, Rarity.RARE, mage.cards.w.WellOfKnowledge.class)); - cards.add(new SetCardInfo("Winding Canyons", 167, Rarity.RARE, mage.cards.w.WindingCanyons.class)); - cards.add(new SetCardInfo("Xanthic Statue", 163, Rarity.RARE, mage.cards.x.XanthicStatue.class)); - cards.add(new SetCardInfo("Zombie Scavengers", 87, Rarity.COMMON, mage.cards.z.ZombieScavengers.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author noxx + */ +public final class Weatherlight extends ExpansionSet { + + private static final Weatherlight instance = new Weatherlight(); + + public static Weatherlight getInstance() { + return instance; + } + + private Weatherlight() { + super("Weatherlight", "WTH", ExpansionSet.buildDate(1997, 5, 31), SetType.EXPANSION); + this.blockName = "Mirage"; + this.parentSet = Mirage.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Abduction", 30, Rarity.UNCOMMON, mage.cards.a.Abduction.class)); + cards.add(new SetCardInfo("Abeyance", 1, Rarity.RARE, mage.cards.a.Abeyance.class)); + cards.add(new SetCardInfo("Abjure", 31, Rarity.COMMON, mage.cards.a.Abjure.class)); + cards.add(new SetCardInfo("Aboroth", 117, Rarity.RARE, mage.cards.a.Aboroth.class)); + cards.add(new SetCardInfo("Abyssal Gatekeeper", 59, Rarity.COMMON, mage.cards.a.AbyssalGatekeeper.class)); + cards.add(new SetCardInfo("Aether Flash", 88, Rarity.UNCOMMON, mage.cards.a.AetherFlash.class)); + cards.add(new SetCardInfo("Agonizing Memories", 60, Rarity.UNCOMMON, mage.cards.a.AgonizingMemories.class)); + cards.add(new SetCardInfo("Alabaster Dragon", 2, Rarity.RARE, mage.cards.a.AlabasterDragon.class)); + cards.add(new SetCardInfo("Alms", 3, Rarity.COMMON, mage.cards.a.Alms.class)); + cards.add(new SetCardInfo("Ancestral Knowledge", 32, Rarity.RARE, mage.cards.a.AncestralKnowledge.class)); + cards.add(new SetCardInfo("Angelic Renewal", 4, Rarity.COMMON, mage.cards.a.AngelicRenewal.class)); + cards.add(new SetCardInfo("Apathy", 33, Rarity.COMMON, mage.cards.a.Apathy.class)); + cards.add(new SetCardInfo("Arctic Wolves", 118, Rarity.UNCOMMON, mage.cards.a.ArcticWolves.class)); + cards.add(new SetCardInfo("Ardent Militia", 5, Rarity.COMMON, mage.cards.a.ArdentMilitia.class)); + cards.add(new SetCardInfo("Argivian Find", 6, Rarity.UNCOMMON, mage.cards.a.ArgivianFind.class)); + cards.add(new SetCardInfo("Argivian Restoration", 34, Rarity.UNCOMMON, mage.cards.a.ArgivianRestoration.class)); + cards.add(new SetCardInfo("Aura of Silence", 7, Rarity.UNCOMMON, mage.cards.a.AuraOfSilence.class)); + cards.add(new SetCardInfo("Avizoa", 35, Rarity.RARE, mage.cards.a.Avizoa.class)); + cards.add(new SetCardInfo("Barishi", 119, Rarity.UNCOMMON, mage.cards.b.Barishi.class)); + cards.add(new SetCardInfo("Barrow Ghoul", 61, Rarity.COMMON, mage.cards.b.BarrowGhoul.class)); + cards.add(new SetCardInfo("Benalish Infantry", 8, Rarity.COMMON, mage.cards.b.BenalishInfantry.class)); + cards.add(new SetCardInfo("Benalish Knight", 9, Rarity.COMMON, mage.cards.b.BenalishKnight.class)); + cards.add(new SetCardInfo("Benalish Missionary", 10, Rarity.COMMON, mage.cards.b.BenalishMissionary.class)); + cards.add(new SetCardInfo("Betrothed of Fire", 89, Rarity.COMMON, mage.cards.b.BetrothedOfFire.class)); + cards.add(new SetCardInfo("Bloodrock Cyclops", 90, Rarity.COMMON, mage.cards.b.BloodrockCyclops.class)); + cards.add(new SetCardInfo("Blossoming Wreath", 120, Rarity.COMMON, mage.cards.b.BlossomingWreath.class)); + cards.add(new SetCardInfo("Bogardan Firefiend", 91, Rarity.COMMON, mage.cards.b.BogardanFirefiend.class)); + cards.add(new SetCardInfo("Boiling Blood", 92, Rarity.COMMON, mage.cards.b.BoilingBlood.class)); + cards.add(new SetCardInfo("Bone Dancer", 62, Rarity.RARE, mage.cards.b.BoneDancer.class)); + cards.add(new SetCardInfo("Bosium Strip", 147, Rarity.RARE, mage.cards.b.BosiumStrip.class)); + cards.add(new SetCardInfo("Briar Shield", 121, Rarity.COMMON, mage.cards.b.BriarShield.class)); + cards.add(new SetCardInfo("Bubble Matrix", 146, Rarity.RARE, mage.cards.b.BubbleMatrix.class)); + cards.add(new SetCardInfo("Buried Alive", 63, Rarity.UNCOMMON, mage.cards.b.BuriedAlive.class)); + cards.add(new SetCardInfo("Call of the Wild", 122, Rarity.RARE, mage.cards.c.CallOfTheWild.class)); + cards.add(new SetCardInfo("Chimeric Sphere", 148, Rarity.UNCOMMON, mage.cards.c.ChimericSphere.class)); + cards.add(new SetCardInfo("Choking Vines", 123, Rarity.COMMON, mage.cards.c.ChokingVines.class)); + cards.add(new SetCardInfo("Cinder Giant", 93, Rarity.UNCOMMON, mage.cards.c.CinderGiant.class)); + cards.add(new SetCardInfo("Cinder Wall", 94, Rarity.COMMON, mage.cards.c.CinderWall.class)); + cards.add(new SetCardInfo("Circling Vultures", 64, Rarity.UNCOMMON, mage.cards.c.CirclingVultures.class)); + cards.add(new SetCardInfo("Cloud Djinn", 36, Rarity.UNCOMMON, mage.cards.c.CloudDjinn.class)); + cards.add(new SetCardInfo("Coils of the Medusa", 65, Rarity.COMMON, mage.cards.c.CoilsOfTheMedusa.class)); + cards.add(new SetCardInfo("Cone of Flame", 95, Rarity.UNCOMMON, mage.cards.c.ConeOfFlame.class)); + cards.add(new SetCardInfo("Debt of Loyalty", 11, Rarity.RARE, mage.cards.d.DebtOfLoyalty.class)); + cards.add(new SetCardInfo("Dense Foliage", 124, Rarity.RARE, mage.cards.d.DenseFoliage.class)); + cards.add(new SetCardInfo("Desperate Gambit", 96, Rarity.UNCOMMON, mage.cards.d.DesperateGambit.class)); + cards.add(new SetCardInfo("Dingus Staff", 149, Rarity.UNCOMMON, mage.cards.d.DingusStaff.class)); + cards.add(new SetCardInfo("Disrupt", 37, Rarity.COMMON, mage.cards.d.Disrupt.class)); + cards.add(new SetCardInfo("Doomsday", 66, Rarity.RARE, mage.cards.d.Doomsday.class)); + cards.add(new SetCardInfo("Downdraft", 125, Rarity.UNCOMMON, mage.cards.d.Downdraft.class)); + cards.add(new SetCardInfo("Duskrider Falcon", 12, Rarity.COMMON, mage.cards.d.DuskriderFalcon.class)); + cards.add(new SetCardInfo("Dwarven Berserker", 97, Rarity.COMMON, mage.cards.d.DwarvenBerserker.class)); + cards.add(new SetCardInfo("Dwarven Thaumaturgist", 98, Rarity.RARE, mage.cards.d.DwarvenThaumaturgist.class)); + cards.add(new SetCardInfo("Empyrial Armor", 13, Rarity.COMMON, mage.cards.e.EmpyrialArmor.class)); + cards.add(new SetCardInfo("Fallow Wurm", 126, Rarity.UNCOMMON, mage.cards.f.FallowWurm.class)); + cards.add(new SetCardInfo("Familiar Ground", 127, Rarity.UNCOMMON, mage.cards.f.FamiliarGround.class)); + cards.add(new SetCardInfo("Fatal Blow", 67, Rarity.COMMON, mage.cards.f.FatalBlow.class)); + cards.add(new SetCardInfo("Fervor", 99, Rarity.RARE, mage.cards.f.Fervor.class)); + cards.add(new SetCardInfo("Festering Evil", 68, Rarity.UNCOMMON, mage.cards.f.FesteringEvil.class)); + cards.add(new SetCardInfo("Fire Whip", 100, Rarity.COMMON, mage.cards.f.FireWhip.class)); + cards.add(new SetCardInfo("Firestorm", 101, Rarity.RARE, mage.cards.f.Firestorm.class)); + cards.add(new SetCardInfo("Fit of Rage", 102, Rarity.COMMON, mage.cards.f.FitOfRage.class)); + cards.add(new SetCardInfo("Fledgling Djinn", 69, Rarity.COMMON, mage.cards.f.FledglingDjinn.class)); + cards.add(new SetCardInfo("Flux", 39, Rarity.COMMON, mage.cards.f.Flux.class)); + cards.add(new SetCardInfo("Fog Elemental", 40, Rarity.COMMON, mage.cards.f.FogElemental.class)); + cards.add(new SetCardInfo("Foriysian Brigade", 14, Rarity.UNCOMMON, mage.cards.f.ForiysianBrigade.class)); + cards.add(new SetCardInfo("Fungus Elemental", 128, Rarity.RARE, mage.cards.f.FungusElemental.class)); + cards.add(new SetCardInfo("Gaea's Blessing", 129, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); + cards.add(new SetCardInfo("Gallowbraid", 70, Rarity.RARE, mage.cards.g.Gallowbraid.class)); + cards.add(new SetCardInfo("Gemstone Mine", 164, Rarity.UNCOMMON, mage.cards.g.GemstoneMine.class)); + cards.add(new SetCardInfo("Gerrard's Wisdom", 15, Rarity.UNCOMMON, mage.cards.g.GerrardsWisdom.class)); + cards.add(new SetCardInfo("Goblin Bomb", 103, Rarity.RARE, mage.cards.g.GoblinBomb.class)); + cards.add(new SetCardInfo("Goblin Grenadiers", 104, Rarity.UNCOMMON, mage.cards.g.GoblinGrenadiers.class)); + cards.add(new SetCardInfo("Goblin Vandal", 105, Rarity.COMMON, mage.cards.g.GoblinVandal.class)); + cards.add(new SetCardInfo("Guided Strike", 16, Rarity.COMMON, mage.cards.g.GuidedStrike.class)); + cards.add(new SetCardInfo("Harvest Wurm", 130, Rarity.COMMON, mage.cards.h.HarvestWurm.class)); + cards.add(new SetCardInfo("Haunting Misery", 71, Rarity.COMMON, mage.cards.h.HauntingMisery.class)); + cards.add(new SetCardInfo("Heart of Bogardan", 106, Rarity.RARE, mage.cards.h.HeartOfBogardan.class)); + cards.add(new SetCardInfo("Heat Stroke", 107, Rarity.RARE, mage.cards.h.HeatStroke.class)); + cards.add(new SetCardInfo("Heavy Ballista", 17, Rarity.COMMON, mage.cards.h.HeavyBallista.class)); + cards.add(new SetCardInfo("Hidden Horror", 72, Rarity.UNCOMMON, mage.cards.h.HiddenHorror.class)); + cards.add(new SetCardInfo("Hurloon Shaman", 108, Rarity.UNCOMMON, mage.cards.h.HurloonShaman.class)); + cards.add(new SetCardInfo("Infernal Tribute", 73, Rarity.RARE, mage.cards.i.InfernalTribute.class)); + cards.add(new SetCardInfo("Inner Sanctum", 18, Rarity.RARE, mage.cards.i.InnerSanctum.class)); + cards.add(new SetCardInfo("Jabari's Banner", 150, Rarity.UNCOMMON, mage.cards.j.JabarisBanner.class)); + cards.add(new SetCardInfo("Jangling Automaton", 151, Rarity.COMMON, mage.cards.j.JanglingAutomaton.class)); + cards.add(new SetCardInfo("Kithkin Armor", 19, Rarity.COMMON, mage.cards.k.KithkinArmor.class)); + cards.add(new SetCardInfo("Lava Hounds", 109, Rarity.UNCOMMON, mage.cards.l.LavaHounds.class)); + cards.add(new SetCardInfo("Lava Storm", 110, Rarity.COMMON, mage.cards.l.LavaStorm.class)); + cards.add(new SetCardInfo("Liege of the Hollows", 131, Rarity.RARE, mage.cards.l.LiegeOfTheHollows.class)); + cards.add(new SetCardInfo("Llanowar Behemoth", 132, Rarity.UNCOMMON, mage.cards.l.LlanowarBehemoth.class)); + cards.add(new SetCardInfo("Llanowar Druid", 133, Rarity.COMMON, mage.cards.l.LlanowarDruid.class)); + cards.add(new SetCardInfo("Llanowar Sentinel", 134, Rarity.COMMON, mage.cards.l.LlanowarSentinel.class)); + cards.add(new SetCardInfo("Lotus Vale", 165, Rarity.RARE, mage.cards.l.LotusVale.class)); + cards.add(new SetCardInfo("Mana Chains", 41, Rarity.COMMON, mage.cards.m.ManaChains.class)); + cards.add(new SetCardInfo("Mana Web", 152, Rarity.RARE, mage.cards.m.ManaWeb.class)); + cards.add(new SetCardInfo("Manta Ray", 42, Rarity.COMMON, mage.cards.m.MantaRay.class)); + cards.add(new SetCardInfo("Maraxus of Keld", 111, Rarity.RARE, mage.cards.m.MaraxusOfKeld.class)); + cards.add(new SetCardInfo("Master of Arms", 20, Rarity.UNCOMMON, mage.cards.m.MasterOfArms.class)); + cards.add(new SetCardInfo("Merfolk Traders", 43, Rarity.COMMON, mage.cards.m.MerfolkTraders.class)); + cards.add(new SetCardInfo("Mind Stone", 153, Rarity.COMMON, mage.cards.m.MindStone.class)); + cards.add(new SetCardInfo("Mischievous Poltergeist", 74, Rarity.UNCOMMON, mage.cards.m.MischievousPoltergeist.class)); + cards.add(new SetCardInfo("Mistmoon Griffin", 21, Rarity.UNCOMMON, mage.cards.m.MistmoonGriffin.class)); + cards.add(new SetCardInfo("Morinfen", 75, Rarity.RARE, mage.cards.m.Morinfen.class)); + cards.add(new SetCardInfo("Mwonvuli Ooze", 135, Rarity.RARE, mage.cards.m.MwonvuliOoze.class)); + cards.add(new SetCardInfo("Nature's Kiss", 136, Rarity.COMMON, mage.cards.n.NaturesKiss.class)); + cards.add(new SetCardInfo("Nature's Resurgence", 137, Rarity.RARE, mage.cards.n.NaturesResurgence.class)); + cards.add(new SetCardInfo("Necratog", 76, Rarity.UNCOMMON, mage.cards.n.Necratog.class)); + cards.add(new SetCardInfo("Noble Benefactor", 44, Rarity.UNCOMMON, mage.cards.n.NobleBenefactor.class)); + cards.add(new SetCardInfo("Null Rod", 154, Rarity.RARE, mage.cards.n.NullRod.class)); + cards.add(new SetCardInfo("Odylic Wraith", 77, Rarity.UNCOMMON, mage.cards.o.OdylicWraith.class)); + cards.add(new SetCardInfo("Ophidian", 45, Rarity.COMMON, mage.cards.o.Ophidian.class)); + cards.add(new SetCardInfo("Orcish Settlers", 112, Rarity.UNCOMMON, mage.cards.o.OrcishSettlers.class)); + cards.add(new SetCardInfo("Paradigm Shift", 46, Rarity.RARE, mage.cards.p.ParadigmShift.class)); + cards.add(new SetCardInfo("Peacekeeper", 22, Rarity.RARE, mage.cards.p.Peacekeeper.class)); + cards.add(new SetCardInfo("Pendrell Mists", 47, Rarity.RARE, mage.cards.p.PendrellMists.class)); + cards.add(new SetCardInfo("Phantom Warrior", 48, Rarity.UNCOMMON, mage.cards.p.PhantomWarrior.class)); + cards.add(new SetCardInfo("Phantom Wings", 49, Rarity.COMMON, mage.cards.p.PhantomWings.class)); + cards.add(new SetCardInfo("Phyrexian Furnace", 155, Rarity.UNCOMMON, mage.cards.p.PhyrexianFurnace.class)); + cards.add(new SetCardInfo("Psychic Vortex", 50, Rarity.RARE, mage.cards.p.PsychicVortex.class)); + cards.add(new SetCardInfo("Razortooth Rats", 78, Rarity.COMMON, mage.cards.r.RazortoothRats.class)); + cards.add(new SetCardInfo("Redwood Treefolk", 138, Rarity.COMMON, mage.cards.r.RedwoodTreefolk.class)); + cards.add(new SetCardInfo("Relearn", 51, Rarity.UNCOMMON, mage.cards.r.Relearn.class)); + cards.add(new SetCardInfo("Revered Unicorn", 23, Rarity.UNCOMMON, mage.cards.r.ReveredUnicorn.class)); + cards.add(new SetCardInfo("Roc Hatchling", 113, Rarity.UNCOMMON, mage.cards.r.RocHatchling.class)); + cards.add(new SetCardInfo("Rogue Elephant", 139, Rarity.COMMON, mage.cards.r.RogueElephant.class)); + cards.add(new SetCardInfo("Sage Owl", 52, Rarity.COMMON, mage.cards.s.SageOwl.class)); + cards.add(new SetCardInfo("Sawtooth Ogre", 114, Rarity.COMMON, mage.cards.s.SawtoothOgre.class)); + cards.add(new SetCardInfo("Scorched Ruins", 166, Rarity.RARE, mage.cards.s.ScorchedRuins.class)); + cards.add(new SetCardInfo("Serenity", 24, Rarity.RARE, mage.cards.s.Serenity.class)); + cards.add(new SetCardInfo("Serra's Blessing", 25, Rarity.UNCOMMON, mage.cards.s.SerrasBlessing.class)); + cards.add(new SetCardInfo("Serrated Biskelion", 156, Rarity.UNCOMMON, mage.cards.s.SerratedBiskelion.class)); + cards.add(new SetCardInfo("Shadow Rider", 79, Rarity.COMMON, mage.cards.s.ShadowRider.class)); + cards.add(new SetCardInfo("Shattered Crypt", 80, Rarity.COMMON, mage.cards.s.ShatteredCrypt.class)); + cards.add(new SetCardInfo("Soul Shepherd", 26, Rarity.COMMON, mage.cards.s.SoulShepherd.class)); + cards.add(new SetCardInfo("Southern Paladin", 27, Rarity.RARE, mage.cards.s.SouthernPaladin.class)); + cards.add(new SetCardInfo("Spinning Darkness", 81, Rarity.COMMON, mage.cards.s.SpinningDarkness.class)); + cards.add(new SetCardInfo("Steel Golem", 157, Rarity.UNCOMMON, mage.cards.s.SteelGolem.class)); + cards.add(new SetCardInfo("Strands of Night", 82, Rarity.UNCOMMON, mage.cards.s.StrandsOfNight.class)); + cards.add(new SetCardInfo("Straw Golem", 158, Rarity.UNCOMMON, mage.cards.s.StrawGolem.class)); + cards.add(new SetCardInfo("Striped Bears", 140, Rarity.COMMON, mage.cards.s.StripedBears.class)); + cards.add(new SetCardInfo("Sylvan Hierophant", 141, Rarity.UNCOMMON, mage.cards.s.SylvanHierophant.class)); + cards.add(new SetCardInfo("Tariff", 28, Rarity.RARE, mage.cards.t.Tariff.class)); + cards.add(new SetCardInfo("Teferi's Veil", 53, Rarity.UNCOMMON, mage.cards.t.TeferisVeil.class)); + cards.add(new SetCardInfo("Tendrils of Despair", 83, Rarity.COMMON, mage.cards.t.TendrilsOfDespair.class)); + cards.add(new SetCardInfo("Thran Forge", 159, Rarity.UNCOMMON, mage.cards.t.ThranForge.class)); + cards.add(new SetCardInfo("Thran Tome", 160, Rarity.RARE, mage.cards.t.ThranTome.class)); + cards.add(new SetCardInfo("Thunderbolt", 115, Rarity.COMMON, mage.cards.t.Thunderbolt.class)); + cards.add(new SetCardInfo("Thundermare", 116, Rarity.RARE, mage.cards.t.Thundermare.class)); + cards.add(new SetCardInfo("Timid Drake", 54, Rarity.UNCOMMON, mage.cards.t.TimidDrake.class)); + cards.add(new SetCardInfo("Tolarian Drake", 55, Rarity.COMMON, mage.cards.t.TolarianDrake.class)); + cards.add(new SetCardInfo("Tolarian Entrancer", 56, Rarity.RARE, mage.cards.t.TolarianEntrancer.class)); + cards.add(new SetCardInfo("Tolarian Serpent", 57, Rarity.RARE, mage.cards.t.TolarianSerpent.class)); + cards.add(new SetCardInfo("Touchstone", 161, Rarity.UNCOMMON, mage.cards.t.Touchstone.class)); + cards.add(new SetCardInfo("Tranquil Grove", 142, Rarity.RARE, mage.cards.t.TranquilGrove.class)); + cards.add(new SetCardInfo("Uktabi Efreet", 143, Rarity.COMMON, mage.cards.u.UktabiEfreet.class)); + cards.add(new SetCardInfo("Urborg Justice", 84, Rarity.RARE, mage.cards.u.UrborgJustice.class)); + cards.add(new SetCardInfo("Urborg Stalker", 85, Rarity.RARE, mage.cards.u.UrborgStalker.class)); + cards.add(new SetCardInfo("Veteran Explorer", 144, Rarity.UNCOMMON, mage.cards.v.VeteranExplorer.class)); + cards.add(new SetCardInfo("Vitalize", 145, Rarity.COMMON, mage.cards.v.Vitalize.class)); + cards.add(new SetCardInfo("Vodalian Illusionist", 58, Rarity.UNCOMMON, mage.cards.v.VodalianIllusionist.class)); + cards.add(new SetCardInfo("Volunteer Reserves", 29, Rarity.UNCOMMON, mage.cards.v.VolunteerReserves.class)); + cards.add(new SetCardInfo("Wave of Terror", 86, Rarity.RARE, mage.cards.w.WaveOfTerror.class)); + cards.add(new SetCardInfo("Well of Knowledge", 162, Rarity.RARE, mage.cards.w.WellOfKnowledge.class)); + cards.add(new SetCardInfo("Winding Canyons", 167, Rarity.RARE, mage.cards.w.WindingCanyons.class)); + cards.add(new SetCardInfo("Xanthic Statue", 163, Rarity.RARE, mage.cards.x.XanthicStatue.class)); + cards.add(new SetCardInfo("Zombie Scavengers", 87, Rarity.COMMON, mage.cards.z.ZombieScavengers.class)); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AftermathTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AftermathTest.java index 50d999743b6..c39bcc250ce 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AftermathTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/AftermathTest.java @@ -1,31 +1,31 @@ -package org.mage.test.cards.abilities.keywords; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author jeffwadsworth - */ -public class AftermathTest extends CardTestPlayerBase { - - @Test - public void testCastFromGraveyard() { - addCard(Zone.GRAVEYARD, playerA, "Spring // Mind", 1); - /* - Aftermath (Cast this spell only from your graveyard. Then exile it.) - Draw two cards. - */ - addCard(Zone.BATTLEFIELD, playerA, "Island", 6); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind"); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertExileCount(playerA, "Spring // Mind", 1); // card is exiled after casting from graveyard - assertHandCount(playerA, 2); // two cards drawn - - } -} +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author jeffwadsworth + */ +public class AftermathTest extends CardTestPlayerBase { + + @Test + public void testCastFromGraveyard() { + addCard(Zone.GRAVEYARD, playerA, "Spring // Mind", 1); + /* + Aftermath (Cast this spell only from your graveyard. Then exile it.) + Draw two cards. + */ + addCard(Zone.BATTLEFIELD, playerA, "Island", 6); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mind"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertExileCount(playerA, "Spring // Mind", 1); // card is exiled after casting from graveyard + assertHandCount(playerA, 2); // two cards drawn + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/CrewTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/CrewTest.java index 2dabdd22fb4..06a8fdda303 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/CrewTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/CrewTest.java @@ -1,82 +1,82 @@ - -package org.mage.test.cards.abilities.keywords; - -import mage.abilities.keyword.HasteAbility; -import mage.constants.CardType; -import mage.constants.PhaseStep; -import mage.constants.SubType; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -// http://magic.wizards.com/en/articles/archive/feature/kaladesh-mechanics-2016-09-02 -public class CrewTest extends CardTestPlayerBase { - - @Test - public void crewBasicTest() { - // {T}: Add one mana of any color. - // Crew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)"; - addCard(Zone.BATTLEFIELD, playerA, "Cultivator's Caravan", 1); - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 2); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crew 3"); - setChoice(playerA, "Silvercoat Lion^Silvercoat Lion"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertTappedCount("Silvercoat Lion", true, 2); - assertPowerToughness(playerA, "Cultivator's Caravan", 5, 5); - assertType("Cultivator's Caravan", CardType.CREATURE, SubType.VEHICLE); - } - - @Test - public void crewTriggerPilotTest() { - // Flying - // Whenever Smuggler's Copter attacks or blocks, you may draw a card. If you do, discard a card. - // Crew 1 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)"; - addCard(Zone.BATTLEFIELD, playerA, "Smuggler's Copter", 1); - - addCard(Zone.BATTLEFIELD, playerA, "Speedway Fanatic", 1); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crew 1"); - setChoice(playerA, "Speedway Fanatic"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertTappedCount("Speedway Fanatic", true, 1); - assertPowerToughness(playerA, "Smuggler's Copter", 3, 3); - assertAbility(playerA, "Smuggler's Copter", HasteAbility.getInstance(), true); - assertType("Smuggler's Copter", CardType.CREATURE, SubType.VEHICLE); - } - - @Test - public void testThatBouncingACrewedVehicleWillUncrewIt() { - addCard(Zone.BATTLEFIELD, playerA, "Smuggler's Copter", 1); - addCard(Zone.BATTLEFIELD, playerA, "Speedway Fanatic", 1); - addCard(Zone.BATTLEFIELD, playerA, "Island", 7); - addCard(Zone.HAND, playerA, "Evacuation", 1); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crew 1"); - setChoice(playerA, "Speedway Fanatic"); - - // Return all creatures to there owners hands - castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Evacuation"); - - // (Re)Cast Smugglers Copter - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Smuggler's Copter"); - - setStopAt(1, PhaseStep.END_TURN); - execute(); - - // Only crewed vehicles have card type creature - assertNotType("Smuggler's Copter", CardType.CREATURE); - } - -} + +package org.mage.test.cards.abilities.keywords; + +import mage.abilities.keyword.HasteAbility; +import mage.constants.CardType; +import mage.constants.PhaseStep; +import mage.constants.SubType; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +// http://magic.wizards.com/en/articles/archive/feature/kaladesh-mechanics-2016-09-02 +public class CrewTest extends CardTestPlayerBase { + + @Test + public void crewBasicTest() { + // {T}: Add one mana of any color. + // Crew 3 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)"; + addCard(Zone.BATTLEFIELD, playerA, "Cultivator's Caravan", 1); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 2); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crew 3"); + setChoice(playerA, "Silvercoat Lion^Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertTappedCount("Silvercoat Lion", true, 2); + assertPowerToughness(playerA, "Cultivator's Caravan", 5, 5); + assertType("Cultivator's Caravan", CardType.CREATURE, SubType.VEHICLE); + } + + @Test + public void crewTriggerPilotTest() { + // Flying + // Whenever Smuggler's Copter attacks or blocks, you may draw a card. If you do, discard a card. + // Crew 1 (Tap any number of creatures you control with total power 3 or more: This Vehicle becomes an artifact creature until end of turn.)"; + addCard(Zone.BATTLEFIELD, playerA, "Smuggler's Copter", 1); + + addCard(Zone.BATTLEFIELD, playerA, "Speedway Fanatic", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crew 1"); + setChoice(playerA, "Speedway Fanatic"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertTappedCount("Speedway Fanatic", true, 1); + assertPowerToughness(playerA, "Smuggler's Copter", 3, 3); + assertAbility(playerA, "Smuggler's Copter", HasteAbility.getInstance(), true); + assertType("Smuggler's Copter", CardType.CREATURE, SubType.VEHICLE); + } + + @Test + public void testThatBouncingACrewedVehicleWillUncrewIt() { + addCard(Zone.BATTLEFIELD, playerA, "Smuggler's Copter", 1); + addCard(Zone.BATTLEFIELD, playerA, "Speedway Fanatic", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 7); + addCard(Zone.HAND, playerA, "Evacuation", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Crew 1"); + setChoice(playerA, "Speedway Fanatic"); + + // Return all creatures to there owners hands + castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Evacuation"); + + // (Re)Cast Smugglers Copter + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Smuggler's Copter"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + // Only crewed vehicles have card type creature + assertNotType("Smuggler's Copter", CardType.CREATURE); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DeliriumTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DeliriumTest.java index 7f539189d1f..09485c1c5a3 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DeliriumTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/DeliriumTest.java @@ -1,167 +1,167 @@ -package org.mage.test.cards.abilities.keywords; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBaseWithAIHelps; - -/** - * - * @author LevelX2 - */ -public class DeliriumTest extends CardTestPlayerBaseWithAIHelps { - - // Delirium - if there are four or more card types among cards in your graveyard - @Test - public void noDeliriumTest() { - /** - * 4/8/2016 If you have three non-sorcery card types among cards in your - * graveyard at the time Descend upon the Sinful resolves, you won’t get - * an Angel token. Descend upon the Sinful isn’t put into your graveyard - * until after it’s finished resolving. - */ - - // Exile all creatures - // Delirium - Create a 4/4 white Angel creature token with flying if there are four or more card types among cards in your graveyard. - addCard(Zone.HAND, playerA, "Descend upon the Sinful", 1); // Sorcery {4}{W}{W} - - addCard(Zone.GRAVEYARD, playerA, "Thought Vessel", 2); // Artifact - addCard(Zone.GRAVEYARD, playerA, "Tempered Steel", 2); // Enchantment - addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion", 2); // Creature - - addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); - addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful"); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertAllCommandsUsed(); - - assertExileCount(playerA, "Balduvian Bears", 4); - assertGraveyardCount(playerA, "Descend upon the Sinful", 1); - - assertPermanentCount(playerA, "Angel", 0); - - } - - @Test - public void ItsDeliriumTest() { - /** - * 4/8/2016 The number of card types matters, not the number of cards. - * For example, Wicker Witch (an artifact creature) along with Catalog - * (an instant) and Chaplain’s Blessing (a sorcery) will enable - * delirium. - */ - // Exile all creatures - // Delirium - Create a 4/4 white Angel creature token with flying if there are four or more card types among cards in your graveyard. - addCard(Zone.HAND, playerA, "Descend upon the Sinful", 1); // Sorcery {4}{W}{W} - - addCard(Zone.GRAVEYARD, playerA, "Wicker Witch", 1); // Artifact Creature - addCard(Zone.GRAVEYARD, playerA, "Catalog", 1); // Instant - addCard(Zone.GRAVEYARD, playerA, "Chaplain's Blessing", 1); // Sorcery - - addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); - addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful"); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertAllCommandsUsed(); - - assertExileCount(playerA, "Balduvian Bears", 4); - assertGraveyardCount(playerA, "Descend upon the Sinful", 1); - - assertPermanentCount(playerA, "Angel", 1); - - } - - @Test - public void noDeliriumWithCreatureEnchantmentTest() { - - /** - * 4/8/2016 If one of those creatures was enchanted, its Aura won’t be - * put into a player’s graveyard until after Descend upon the Sinful has - * finished resolving. If the controller of Descend upon the Sinful - * owned the Aura, it won’t be in the graveyard in time to be counted - * for the delirium ability. - */ - // Exile all creatures - // Delirium - Create a 4/4 white Angel creature token with flying if there are four or more card types among cards in your graveyard. - addCard(Zone.HAND, playerA, "Descend upon the Sinful", 1); // Sorcery {4}{W}{W} - - // Enchant creature - // Enchanted creature gets +1/+1 and has protection from creatures. - addCard(Zone.HAND, playerA, "Spirit Mantle", 1); // Enchantment Aura {1}{W} - - addCard(Zone.GRAVEYARD, playerA, "Thought Vessel", 2); // Artifact - addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion", 2); // Creature - addCard(Zone.GRAVEYARD, playerA, "Plains", 2); // Land - - addCard(Zone.BATTLEFIELD, playerA, "Plains", 8); - addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spirit Mantle", "Balduvian Bears"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful"); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertAllCommandsUsed(); - - assertHandCount(playerA, 0); - assertExileCount(playerA, "Balduvian Bears", 4); - assertGraveyardCount(playerA, "Spirit Mantle", 1); - assertGraveyardCount(playerA, "Descend upon the Sinful", 1); - - assertPermanentCount(playerA, "Angel", 0); - - } - - @Test - public void noDeliriumWithDoubleFacedCardsTest() { - - /** - * 4/8/2016 Because you consider only the characteristics of a - * double-faced card’s front face while it’s not on the battlefield, the - * types of its back face won’t be counted for delirium. - */ - // Exile all creatures - // Delirium - Create a 4/4 white Angel creature token with flying if there are four or more card types among cards in your graveyard. - addCard(Zone.HAND, playerA, "Descend upon the Sinful", 1); // Sorcery {4}{W}{W} - - addCard(Zone.GRAVEYARD, playerA, "Elbrus, the Binding Blade", 1); // Artifact (not counted as Creature from Backside) - addCard(Zone.GRAVEYARD, playerA, "Catalog", 1); // Instant - addCard(Zone.GRAVEYARD, playerA, "Plains", 1); // Land - - addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); - addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful"); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertAllCommandsUsed(); - - assertHandCount(playerA, 0); - assertExileCount(playerA, "Balduvian Bears", 4); - assertGraveyardCount(playerA, "Descend upon the Sinful", 1); - - assertPermanentCount(playerA, "Angel", 0); - - } - - /** - * 4/8/2016 In some rare cases, you can have a token or a copy of a spell in - * your graveyard at the moment that an object’s delirium ability counts the - * card types among cards in your graveyard, before that token or copy - * ceases to exist. Because tokens and copies of spells are not cards, even - * if they are copies of cards, their types will never be counted. - */ - - // No test added yet -} +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBaseWithAIHelps; + +/** + * + * @author LevelX2 + */ +public class DeliriumTest extends CardTestPlayerBaseWithAIHelps { + + // Delirium - if there are four or more card types among cards in your graveyard + @Test + public void noDeliriumTest() { + /** + * 4/8/2016 If you have three non-sorcery card types among cards in your + * graveyard at the time Descend upon the Sinful resolves, you won’t get + * an Angel token. Descend upon the Sinful isn’t put into your graveyard + * until after it’s finished resolving. + */ + + // Exile all creatures + // Delirium - Create a 4/4 white Angel creature token with flying if there are four or more card types among cards in your graveyard. + addCard(Zone.HAND, playerA, "Descend upon the Sinful", 1); // Sorcery {4}{W}{W} + + addCard(Zone.GRAVEYARD, playerA, "Thought Vessel", 2); // Artifact + addCard(Zone.GRAVEYARD, playerA, "Tempered Steel", 2); // Enchantment + addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion", 2); // Creature + + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertExileCount(playerA, "Balduvian Bears", 4); + assertGraveyardCount(playerA, "Descend upon the Sinful", 1); + + assertPermanentCount(playerA, "Angel", 0); + + } + + @Test + public void ItsDeliriumTest() { + /** + * 4/8/2016 The number of card types matters, not the number of cards. + * For example, Wicker Witch (an artifact creature) along with Catalog + * (an instant) and Chaplain’s Blessing (a sorcery) will enable + * delirium. + */ + // Exile all creatures + // Delirium - Create a 4/4 white Angel creature token with flying if there are four or more card types among cards in your graveyard. + addCard(Zone.HAND, playerA, "Descend upon the Sinful", 1); // Sorcery {4}{W}{W} + + addCard(Zone.GRAVEYARD, playerA, "Wicker Witch", 1); // Artifact Creature + addCard(Zone.GRAVEYARD, playerA, "Catalog", 1); // Instant + addCard(Zone.GRAVEYARD, playerA, "Chaplain's Blessing", 1); // Sorcery + + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertExileCount(playerA, "Balduvian Bears", 4); + assertGraveyardCount(playerA, "Descend upon the Sinful", 1); + + assertPermanentCount(playerA, "Angel", 1); + + } + + @Test + public void noDeliriumWithCreatureEnchantmentTest() { + + /** + * 4/8/2016 If one of those creatures was enchanted, its Aura won’t be + * put into a player’s graveyard until after Descend upon the Sinful has + * finished resolving. If the controller of Descend upon the Sinful + * owned the Aura, it won’t be in the graveyard in time to be counted + * for the delirium ability. + */ + // Exile all creatures + // Delirium - Create a 4/4 white Angel creature token with flying if there are four or more card types among cards in your graveyard. + addCard(Zone.HAND, playerA, "Descend upon the Sinful", 1); // Sorcery {4}{W}{W} + + // Enchant creature + // Enchanted creature gets +1/+1 and has protection from creatures. + addCard(Zone.HAND, playerA, "Spirit Mantle", 1); // Enchantment Aura {1}{W} + + addCard(Zone.GRAVEYARD, playerA, "Thought Vessel", 2); // Artifact + addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion", 2); // Creature + addCard(Zone.GRAVEYARD, playerA, "Plains", 2); // Land + + addCard(Zone.BATTLEFIELD, playerA, "Plains", 8); + addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spirit Mantle", "Balduvian Bears"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertHandCount(playerA, 0); + assertExileCount(playerA, "Balduvian Bears", 4); + assertGraveyardCount(playerA, "Spirit Mantle", 1); + assertGraveyardCount(playerA, "Descend upon the Sinful", 1); + + assertPermanentCount(playerA, "Angel", 0); + + } + + @Test + public void noDeliriumWithDoubleFacedCardsTest() { + + /** + * 4/8/2016 Because you consider only the characteristics of a + * double-faced card’s front face while it’s not on the battlefield, the + * types of its back face won’t be counted for delirium. + */ + // Exile all creatures + // Delirium - Create a 4/4 white Angel creature token with flying if there are four or more card types among cards in your graveyard. + addCard(Zone.HAND, playerA, "Descend upon the Sinful", 1); // Sorcery {4}{W}{W} + + addCard(Zone.GRAVEYARD, playerA, "Elbrus, the Binding Blade", 1); // Artifact (not counted as Creature from Backside) + addCard(Zone.GRAVEYARD, playerA, "Catalog", 1); // Instant + addCard(Zone.GRAVEYARD, playerA, "Plains", 1); // Land + + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + addCard(Zone.BATTLEFIELD, playerA, "Balduvian Bears", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Descend upon the Sinful"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertHandCount(playerA, 0); + assertExileCount(playerA, "Balduvian Bears", 4); + assertGraveyardCount(playerA, "Descend upon the Sinful", 1); + + assertPermanentCount(playerA, "Angel", 0); + + } + + /** + * 4/8/2016 In some rare cases, you can have a token or a copy of a spell in + * your graveyard at the moment that an object’s delirium ability counts the + * card types among cards in your graveyard, before that token or copy + * ceases to exist. Because tokens and copies of spells are not cards, even + * if they are copies of cards, their types will never be counted. + */ + + // No test added yet +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EmergeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EmergeTest.java index 3e9cead7b58..b2f71f7e174 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EmergeTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EmergeTest.java @@ -1,40 +1,40 @@ - -package org.mage.test.cards.abilities.keywords; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class EmergeTest extends CardTestPlayerBase { - - /** - * Wretched Gryff is bugged. I could not use its Emerge ability. Clicking on - * the card did not give me the interaction menu. - */ - @Test - public void testCastWithEmerge() { - - addCard(Zone.BATTLEFIELD, playerA, "Island", 4); - // Emerge {5}{U} (You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost.) - // When you cast Wretched Gryff, draw a card. - // Flying - addCard(Zone.HAND, playerA, "Wretched Gryff"); // Creature - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wretched Gryff with emerge"); - setChoice(playerA, "Silvercoat Lion"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Silvercoat Lion", 1); - assertPermanentCount(playerA, "Wretched Gryff", 1); - } - -} + +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class EmergeTest extends CardTestPlayerBase { + + /** + * Wretched Gryff is bugged. I could not use its Emerge ability. Clicking on + * the card did not give me the interaction menu. + */ + @Test + public void testCastWithEmerge() { + + addCard(Zone.BATTLEFIELD, playerA, "Island", 4); + // Emerge {5}{U} (You may cast this spell by sacrificing a creature and paying the emerge cost reduced by that creature's converted mana cost.) + // When you cast Wretched Gryff, draw a card. + // Flying + addCard(Zone.HAND, playerA, "Wretched Gryff"); // Creature + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wretched Gryff with emerge"); + setChoice(playerA, "Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerA, "Wretched Gryff", 1); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EscalateTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EscalateTest.java index 6d70d44787e..02138f14975 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EscalateTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/EscalateTest.java @@ -1,134 +1,134 @@ - -package org.mage.test.cards.abilities.keywords; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Ignore; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class EscalateTest extends CardTestPlayerBase { - - @Test - public void testUseOneMode() { - - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); - // Escalate {1} (Pay this cost for each mode chosen beyond the first.) - // Choose one or more — - // Creatures target player controls gain trample until end of turn. - // Savage Alliance deals 2 damage to target creature; - // Savage Alliance deals 1 damage to each creature target opponent controls. - addCard(Zone.HAND, playerA, "Savage Alliance"); // Instant {2}{R} - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Savage Alliance", "mode=2Silvercoat Lion"); - setModeChoice(playerA, "2"); - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertGraveyardCount(playerB, "Silvercoat Lion", 1); - assertGraveyardCount(playerA, "Savage Alliance", 1); - } - - @Test - public void testGaddockTeegInteraction_ThreeCMC_OneMode() { - - // Noncreature spells with converted mana cost {4} or greater can't be cast. - // Noncreature spells with {X} in their mana costs can't be cast. - addCard(Zone.BATTLEFIELD, playerB, "Gaddock Teeg"); // {W}{G} 2/2 Legendary Kithkin - - // Escalate {1} (Pay this cost for each mode chosen beyond the first.) - // Choose one or more — - // * Target player discards all the cards in their hand, then draws that many cards. - // * Collective Defiance deals 4 damage to target creature. - // * Collective Defiance deals 3 damage to target opponent. - addCard(Zone.HAND, playerA, "Collective Defiance"); // {1}{R}{R} sorcery - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collective Defiance", playerB); - setModeChoice(playerA, "3"); // deal 3 dmg to opponent - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerB, "Gaddock Teeg", 1); - assertGraveyardCount(playerA, "Collective Defiance", 1); - assertLife(playerB, 17); - } - - // Reported bug: Escalate CMC is not calculated correctly when more than 1 mode chosen - // With 1 extra mode, the casting cost is {2}{R}{R} but the CMC should still be 3 - @Test - public void testGaddockTeegInteraction_ThreeCMC_TwoModes() { - - // Noncreature spells with converted mana cost {4} or greater can't be cast. - // Noncreature spells with {X} in their mana costs can't be cast. - addCard(Zone.BATTLEFIELD, playerB, "Gaddock Teeg"); // {W}{G} 2/2 Legendary Kithkin - - // Escalate {1} (Pay this cost for each mode chosen beyond the first.) - // Choose one or more — - // * Target player discards all the cards in their hand, then draws that many cards. - // * Collective Defiance deals 4 damage to target creature. - // * Collective Defiance deals 3 damage to target opponent. - addCard(Zone.HAND, playerA, "Collective Defiance"); // {1}{R}{R} sorcery - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collective Defiance", "mode=2Gaddock Teeg"); - setModeChoice(playerA, "2"); // deal 4 dmg to target creature (gaddock teeg) - setModeChoice(playerA, "3"); // deal 3 dmg to opponent - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Collective Defiance", 1); - assertGraveyardCount(playerB, "Gaddock Teeg", 1); - assertLife(playerB, 17); - } - - @Test - public void testSpellQuellerInteraction_ThreeCMC_ThreeModes() { - - // {1}{W}{U} Flash Flying 2/3 Spirit - // When Spell Queller enters the battlefield, exile target spell with converted mana cost 4 or less. - // When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost. - addCard(Zone.HAND, playerB, "Spell Queller"); - addCard(Zone.BATTLEFIELD, playerB, "Wall of Omens"); // {1}{W} 0/4 - addCard(Zone.BATTLEFIELD, playerB, "Island", 2); - addCard(Zone.BATTLEFIELD, playerB, "Plains", 1); - - // Escalate {1} (Pay this cost for each mode chosen beyond the first.) - // Choose one or more — - // * Target player discards all the cards in their hand, then draws that many cards. - // * Collective Defiance deals 4 damage to target creature. - // * Collective Defiance deals 3 damage to target opponent. - addCard(Zone.HAND, playerA, "Collective Defiance"); // {1}{R}{R} sorcery - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collective Defiance", "mode=2Wall of Omens"); - setModeChoice(playerA, "1"); // opponent discards hand and draws that many - setModeChoice(playerA, "2"); // deal 4 dmg to target creature (Wall of Omens) - setModeChoice(playerA, "3"); // deal 3 dmg to opponent - addTarget(playerA, playerB); // mode 1 - addTarget(playerA, playerB); // mode 3 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Spell Queller"); - addTarget(playerB, "Collective Defiance"); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerB, "Spell Queller", 1); - assertHandCount(playerA, "Collective Defiance", 0); - assertExileCount("Collective Defiance", 1); - assertGraveyardCount(playerA, "Collective Defiance", 0); - assertPermanentCount(playerB, "Wall of Omens", 1); - assertLife(playerA, 20); - assertLife(playerB, 20); - } - -} + +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class EscalateTest extends CardTestPlayerBase { + + @Test + public void testUseOneMode() { + + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + // Escalate {1} (Pay this cost for each mode chosen beyond the first.) + // Choose one or more — + // Creatures target player controls gain trample until end of turn. + // Savage Alliance deals 2 damage to target creature; + // Savage Alliance deals 1 damage to each creature target opponent controls. + addCard(Zone.HAND, playerA, "Savage Alliance"); // Instant {2}{R} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Savage Alliance", "mode=2Silvercoat Lion"); + setModeChoice(playerA, "2"); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerB, "Silvercoat Lion", 1); + assertGraveyardCount(playerA, "Savage Alliance", 1); + } + + @Test + public void testGaddockTeegInteraction_ThreeCMC_OneMode() { + + // Noncreature spells with converted mana cost {4} or greater can't be cast. + // Noncreature spells with {X} in their mana costs can't be cast. + addCard(Zone.BATTLEFIELD, playerB, "Gaddock Teeg"); // {W}{G} 2/2 Legendary Kithkin + + // Escalate {1} (Pay this cost for each mode chosen beyond the first.) + // Choose one or more — + // * Target player discards all the cards in their hand, then draws that many cards. + // * Collective Defiance deals 4 damage to target creature. + // * Collective Defiance deals 3 damage to target opponent. + addCard(Zone.HAND, playerA, "Collective Defiance"); // {1}{R}{R} sorcery + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collective Defiance", playerB); + setModeChoice(playerA, "3"); // deal 3 dmg to opponent + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerB, "Gaddock Teeg", 1); + assertGraveyardCount(playerA, "Collective Defiance", 1); + assertLife(playerB, 17); + } + + // Reported bug: Escalate CMC is not calculated correctly when more than 1 mode chosen + // With 1 extra mode, the casting cost is {2}{R}{R} but the CMC should still be 3 + @Test + public void testGaddockTeegInteraction_ThreeCMC_TwoModes() { + + // Noncreature spells with converted mana cost {4} or greater can't be cast. + // Noncreature spells with {X} in their mana costs can't be cast. + addCard(Zone.BATTLEFIELD, playerB, "Gaddock Teeg"); // {W}{G} 2/2 Legendary Kithkin + + // Escalate {1} (Pay this cost for each mode chosen beyond the first.) + // Choose one or more — + // * Target player discards all the cards in their hand, then draws that many cards. + // * Collective Defiance deals 4 damage to target creature. + // * Collective Defiance deals 3 damage to target opponent. + addCard(Zone.HAND, playerA, "Collective Defiance"); // {1}{R}{R} sorcery + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collective Defiance", "mode=2Gaddock Teeg"); + setModeChoice(playerA, "2"); // deal 4 dmg to target creature (gaddock teeg) + setModeChoice(playerA, "3"); // deal 3 dmg to opponent + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Collective Defiance", 1); + assertGraveyardCount(playerB, "Gaddock Teeg", 1); + assertLife(playerB, 17); + } + + @Test + public void testSpellQuellerInteraction_ThreeCMC_ThreeModes() { + + // {1}{W}{U} Flash Flying 2/3 Spirit + // When Spell Queller enters the battlefield, exile target spell with converted mana cost 4 or less. + // When Spell Queller leaves the battlefield, the exiled card's owner may cast that card without paying its mana cost. + addCard(Zone.HAND, playerB, "Spell Queller"); + addCard(Zone.BATTLEFIELD, playerB, "Wall of Omens"); // {1}{W} 0/4 + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 1); + + // Escalate {1} (Pay this cost for each mode chosen beyond the first.) + // Choose one or more — + // * Target player discards all the cards in their hand, then draws that many cards. + // * Collective Defiance deals 4 damage to target creature. + // * Collective Defiance deals 3 damage to target opponent. + addCard(Zone.HAND, playerA, "Collective Defiance"); // {1}{R}{R} sorcery + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collective Defiance", "mode=2Wall of Omens"); + setModeChoice(playerA, "1"); // opponent discards hand and draws that many + setModeChoice(playerA, "2"); // deal 4 dmg to target creature (Wall of Omens) + setModeChoice(playerA, "3"); // deal 3 dmg to opponent + addTarget(playerA, playerB); // mode 1 + addTarget(playerA, playerB); // mode 3 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Spell Queller"); + addTarget(playerB, "Collective Defiance"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerB, "Spell Queller", 1); + assertHandCount(playerA, "Collective Defiance", 0); + assertExileCount("Collective Defiance", 1); + assertGraveyardCount(playerA, "Collective Defiance", 0); + assertPermanentCount(playerB, "Wall of Omens", 1); + assertLife(playerA, 20); + assertLife(playerB, 20); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MeldTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MeldTest.java index 5daa529e90f..cc47c0511f9 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MeldTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/MeldTest.java @@ -1,183 +1,183 @@ - -package org.mage.test.cards.abilities.keywords; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class MeldTest extends CardTestPlayerBase { - - @Test - public void testMeldAndRestrict() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); - // When you cast Bruna, the Fading Light, you may return target Angel or Human creature card from your graveyard to the battlefield. - // Flying, Vigilance - // (Melds with Gisela, the Broken Blade.) - addCard(Zone.HAND, playerA, "Bruna, the Fading Light"); // {5}{W}{W} - // Flying, First strike, Lifelink - // At the beginning of your end step, if you both own and control Gisela, the Broken Blade and a - // creature named Bruna, the Fading Light, exile them, then meld them into Brisela, Voice of Nightmares. - addCard(Zone.HAND, playerA, "Gisela, the Broken Blade"); // {2}{W}{W} - // Brisela, Voice of Nightmares - // Flying, First strike, Vigilance, Lifelink - // Your opponents can't cast spells with converted mana cost 3 or less. - - addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); - addCard(Zone.HAND, playerB, "Silvercoat Lion", 2); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light"); - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade"); - castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); - - setStopAt(4, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Brisela, Voice of Nightmares", 1); - assertPermanentCount(playerA, "Bruna, the Fading Light", 0); - assertPermanentCount(playerA, "Gisela, the Broken Blade", 0); - - assertPermanentCount(playerB, "Silvercoat Lion", 1); - assertHandCount(playerB, "Silvercoat Lion", 1); - - } - - /** - * Brisela is bugged she is still "active" when dead - */ - @Test - public void testMeldAndStopRestrictIfMeldCreatureLeftBattlefield() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); - // When you cast Bruna, the Fading Light, you may return target Angel or Human creature card from your graveyard to the battlefield. - // Flying, Vigilance - // (Melds with Gisela, the Broken Blade.) - addCard(Zone.HAND, playerA, "Bruna, the Fading Light"); // {5}{W}{W} - // Flying, First strike, Lifelink - // At the beginning of your end step, if you both own and control Gisela, the Broken Blade and a - // creature named Bruna, the Fading Light, exile them, then meld them into Brisela, Voice of Nightmares. - addCard(Zone.HAND, playerA, "Gisela, the Broken Blade"); // {2}{W}{W} - // Brisela, Voice of Nightmares 9/10 - // Flying, First strike, Vigilance, Lifelink - // Your opponents can't cast spells with converted mana cost 3 or less. - - addCard(Zone.BATTLEFIELD, playerB, "Plains", 4); - addCard(Zone.BATTLEFIELD, playerB, "Island", 2); - addCard(Zone.HAND, playerB, "Silvercoat Lion", 2); - // Exile target creature. You draw cards equal to that creature's power. - // At the beginning of your next upkeep, return that card to the battlefield under its owner's control. - // If you do, discard cards equal to that creature's toughness. - addCard(Zone.HAND, playerB, "Vanish into Memory", 1); // Instant {2}{W}{U} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light"); - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade"); - castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Vanish into Memory", "Brisela, Voice of Nightmares"); - castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); - - setStopAt(4, PhaseStep.BEGIN_COMBAT); - execute(); - - assertExileCount("Bruna, the Fading Light", 1); - assertExileCount("Gisela, the Broken Blade", 1); - assertPermanentCount(playerA, "Brisela, Voice of Nightmares", 0); - - assertGraveyardCount(playerB, "Vanish into Memory", 1); - assertPermanentCount(playerB, "Silvercoat Lion", 2); - assertHandCount(playerB, 2 + 9); - - } - - /** - * Check that if the exiled parts return Brisela is created again - */ - @Test - public void testMeld3() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); - // When you cast Bruna, the Fading Light, you may return target Angel or Human creature card from your graveyard to the battlefield. - // Flying, Vigilance - // (Melds with Gisela, the Broken Blade.) - addCard(Zone.HAND, playerA, "Bruna, the Fading Light"); // Creature {5}{W}{W} 5/7 - // Flying, First strike, Lifelink - // At the beginning of your end step, if you both own and control Gisela, the Broken Blade and a - // creature named Bruna, the Fading Light, exile them, then meld them into Brisela, Voice of Nightmares. - addCard(Zone.HAND, playerA, "Gisela, the Broken Blade"); // Creature {2}{W}{W} 4/3 - // Brisela, Voice of Nightmares 9/10 - // Flying, First strike, Vigilance, Lifelink - // Your opponents can't cast spells with converted mana cost 3 or less. - - addCard(Zone.BATTLEFIELD, playerB, "Plains", 4); - addCard(Zone.BATTLEFIELD, playerB, "Island", 2); - addCard(Zone.HAND, playerB, "Silvercoat Lion", 2); - // Exile target creature. You draw cards equal to that creature's power. - // At the beginning of your next upkeep, return that card to the battlefield under its owner's control. - // If you do, discard cards equal to that creature's toughness. - addCard(Zone.HAND, playerB, "Vanish into Memory", 1); // Instant {2}{W}{U} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light"); - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade"); - castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Vanish into Memory", "Brisela, Voice of Nightmares"); - castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); - - // End step turn 7 the meld takes place again - setStopAt(8, PhaseStep.UPKEEP); - execute(); - - assertExileCount("Bruna, the Fading Light", 0); - assertExileCount("Gisela, the Broken Blade", 0); - assertPermanentCount(playerA, "Brisela, Voice of Nightmares", 1); - - assertGraveyardCount(playerB, "Vanish into Memory", 1); - assertPermanentCount(playerB, "Silvercoat Lion", 2); - assertHandCount(playerB, 1); // discard 10 upkeep turn 6 ==> 0 + draw 1 at draw phase turn 6 - - } - - /** - * With Hanweir Garrison and Hanweir Battlements in your control put Hanweir - * Battlements' ability in the stack to transform(i.e. meld). In answer to - * that, return to hand Hanweir Garrison. Resolve Hanweir Battlements - * ability. - * - * Expected result: The ability fizzles. - * - * Actual results: A NPE error is lauched. - */ - @Test - public void testReturnToHand() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); - - // Whenever Hanweir Garrison attacks, put two 1/1 red Human creature tokens onto the battlefield tapped and attacking. - // (Melds with Hanweir Battlements.) - addCard(Zone.BATTLEFIELD, playerA, "Hanweir Garrison"); // Creature 2/3 {2}{R} - - // {T}: Add {C}. - // {R},{T}: Target creature gains haste until end of turn. - // {3}{R}{R},{T}: If you both own and control Hanweir Battlements and a creature named Hanweir Garrison, exile them, then meld them into Hanweir, the Writhing Township. - addCard(Zone.BATTLEFIELD, playerA, "Hanweir Battlements"); // Land - - // Brisela, Voice of Nightmares 9/10 - // Flying, First strike, Vigilance, Lifelink - // Your opponents can't cast spells with converted mana cost 3 or less. - addCard(Zone.BATTLEFIELD, playerB, "Island", 1); - // Return target creature to its owner's hand. - addCard(Zone.HAND, playerB, "Unsummon", 1); // Instant {U} - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}{R}{R}"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Unsummon", "Hanweir Garrison", "{3}{R}{R}"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerB, "Unsummon", 1); - - assertPermanentCount(playerA, "Hanweir Battlements", 1); - assertHandCount(playerA, "Hanweir Garrison", 1); - - } -} + +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class MeldTest extends CardTestPlayerBase { + + @Test + public void testMeldAndRestrict() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); + // When you cast Bruna, the Fading Light, you may return target Angel or Human creature card from your graveyard to the battlefield. + // Flying, Vigilance + // (Melds with Gisela, the Broken Blade.) + addCard(Zone.HAND, playerA, "Bruna, the Fading Light"); // {5}{W}{W} + // Flying, First strike, Lifelink + // At the beginning of your end step, if you both own and control Gisela, the Broken Blade and a + // creature named Bruna, the Fading Light, exile them, then meld them into Brisela, Voice of Nightmares. + addCard(Zone.HAND, playerA, "Gisela, the Broken Blade"); // {2}{W}{W} + // Brisela, Voice of Nightmares + // Flying, First strike, Vigilance, Lifelink + // Your opponents can't cast spells with converted mana cost 3 or less. + + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + addCard(Zone.HAND, playerB, "Silvercoat Lion", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade"); + castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); + + setStopAt(4, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Brisela, Voice of Nightmares", 1); + assertPermanentCount(playerA, "Bruna, the Fading Light", 0); + assertPermanentCount(playerA, "Gisela, the Broken Blade", 0); + + assertPermanentCount(playerB, "Silvercoat Lion", 1); + assertHandCount(playerB, "Silvercoat Lion", 1); + + } + + /** + * Brisela is bugged she is still "active" when dead + */ + @Test + public void testMeldAndStopRestrictIfMeldCreatureLeftBattlefield() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); + // When you cast Bruna, the Fading Light, you may return target Angel or Human creature card from your graveyard to the battlefield. + // Flying, Vigilance + // (Melds with Gisela, the Broken Blade.) + addCard(Zone.HAND, playerA, "Bruna, the Fading Light"); // {5}{W}{W} + // Flying, First strike, Lifelink + // At the beginning of your end step, if you both own and control Gisela, the Broken Blade and a + // creature named Bruna, the Fading Light, exile them, then meld them into Brisela, Voice of Nightmares. + addCard(Zone.HAND, playerA, "Gisela, the Broken Blade"); // {2}{W}{W} + // Brisela, Voice of Nightmares 9/10 + // Flying, First strike, Vigilance, Lifelink + // Your opponents can't cast spells with converted mana cost 3 or less. + + addCard(Zone.BATTLEFIELD, playerB, "Plains", 4); + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.HAND, playerB, "Silvercoat Lion", 2); + // Exile target creature. You draw cards equal to that creature's power. + // At the beginning of your next upkeep, return that card to the battlefield under its owner's control. + // If you do, discard cards equal to that creature's toughness. + addCard(Zone.HAND, playerB, "Vanish into Memory", 1); // Instant {2}{W}{U} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade"); + castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Vanish into Memory", "Brisela, Voice of Nightmares"); + castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); + + setStopAt(4, PhaseStep.BEGIN_COMBAT); + execute(); + + assertExileCount("Bruna, the Fading Light", 1); + assertExileCount("Gisela, the Broken Blade", 1); + assertPermanentCount(playerA, "Brisela, Voice of Nightmares", 0); + + assertGraveyardCount(playerB, "Vanish into Memory", 1); + assertPermanentCount(playerB, "Silvercoat Lion", 2); + assertHandCount(playerB, 2 + 9); + + } + + /** + * Check that if the exiled parts return Brisela is created again + */ + @Test + public void testMeld3() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); + // When you cast Bruna, the Fading Light, you may return target Angel or Human creature card from your graveyard to the battlefield. + // Flying, Vigilance + // (Melds with Gisela, the Broken Blade.) + addCard(Zone.HAND, playerA, "Bruna, the Fading Light"); // Creature {5}{W}{W} 5/7 + // Flying, First strike, Lifelink + // At the beginning of your end step, if you both own and control Gisela, the Broken Blade and a + // creature named Bruna, the Fading Light, exile them, then meld them into Brisela, Voice of Nightmares. + addCard(Zone.HAND, playerA, "Gisela, the Broken Blade"); // Creature {2}{W}{W} 4/3 + // Brisela, Voice of Nightmares 9/10 + // Flying, First strike, Vigilance, Lifelink + // Your opponents can't cast spells with converted mana cost 3 or less. + + addCard(Zone.BATTLEFIELD, playerB, "Plains", 4); + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.HAND, playerB, "Silvercoat Lion", 2); + // Exile target creature. You draw cards equal to that creature's power. + // At the beginning of your next upkeep, return that card to the battlefield under its owner's control. + // If you do, discard cards equal to that creature's toughness. + addCard(Zone.HAND, playerB, "Vanish into Memory", 1); // Instant {2}{W}{U} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Bruna, the Fading Light"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Gisela, the Broken Blade"); + castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Vanish into Memory", "Brisela, Voice of Nightmares"); + castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Silvercoat Lion"); + + // End step turn 7 the meld takes place again + setStopAt(8, PhaseStep.UPKEEP); + execute(); + + assertExileCount("Bruna, the Fading Light", 0); + assertExileCount("Gisela, the Broken Blade", 0); + assertPermanentCount(playerA, "Brisela, Voice of Nightmares", 1); + + assertGraveyardCount(playerB, "Vanish into Memory", 1); + assertPermanentCount(playerB, "Silvercoat Lion", 2); + assertHandCount(playerB, 1); // discard 10 upkeep turn 6 ==> 0 + draw 1 at draw phase turn 6 + + } + + /** + * With Hanweir Garrison and Hanweir Battlements in your control put Hanweir + * Battlements' ability in the stack to transform(i.e. meld). In answer to + * that, return to hand Hanweir Garrison. Resolve Hanweir Battlements + * ability. + * + * Expected result: The ability fizzles. + * + * Actual results: A NPE error is lauched. + */ + @Test + public void testReturnToHand() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 5); + + // Whenever Hanweir Garrison attacks, put two 1/1 red Human creature tokens onto the battlefield tapped and attacking. + // (Melds with Hanweir Battlements.) + addCard(Zone.BATTLEFIELD, playerA, "Hanweir Garrison"); // Creature 2/3 {2}{R} + + // {T}: Add {C}. + // {R},{T}: Target creature gains haste until end of turn. + // {3}{R}{R},{T}: If you both own and control Hanweir Battlements and a creature named Hanweir Garrison, exile them, then meld them into Hanweir, the Writhing Township. + addCard(Zone.BATTLEFIELD, playerA, "Hanweir Battlements"); // Land + + // Brisela, Voice of Nightmares 9/10 + // Flying, First strike, Vigilance, Lifelink + // Your opponents can't cast spells with converted mana cost 3 or less. + addCard(Zone.BATTLEFIELD, playerB, "Island", 1); + // Return target creature to its owner's hand. + addCard(Zone.HAND, playerB, "Unsummon", 1); // Instant {U} + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}{R}{R}"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Unsummon", "Hanweir Garrison", "{3}{R}{R}"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Unsummon", 1); + + assertPermanentCount(playerA, "Hanweir Battlements", 1); + assertHandCount(playerA, "Hanweir Garrison", 1); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ScavengeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ScavengeTest.java index b71c2fd51c2..26ec57c58eb 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ScavengeTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/ScavengeTest.java @@ -1,122 +1,122 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.cards.abilities.keywords; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class ScavengeTest extends CardTestPlayerBase { - -// -// 702.95. Scavenge -// -// 702.95a Scavenge is an activated ability that functions only while the card -// with scavenge is in a graveyard. "Scavenge [cost]" means "[Cost], Exile this -// card from your graveyard: Put a number of +1/+1 counters equal to this card's -// power on target creature. Activate this ability only any time you could cast -// a sorcery." -// - @Test - public void SimpleScavenge() { - addCard(Zone.BATTLEFIELD, playerA, "Forest", 6); - - // Scavenge {4}{G}{G} ({4}{G}{G} , Exile this card from your graveyard: Put a number of +1/+1 counter's equal to this card's power on target creature. Scavenge only as a sorcery.) - addCard(Zone.GRAVEYARD, playerA, "Deadbridge Goliath"); // 5/5 - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scavenge", "Silvercoat Lion"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Deadbridge Goliath", 0); - assertExileCount(playerA, "Deadbridge Goliath", 1); - assertPowerToughness(playerA, "Silvercoat Lion", 7, 7); - } - - @Test - public void SimpleScavengeWithCostReduction() { - addCard(Zone.BATTLEFIELD, playerA, "Forest", 6); - - // Scavenge {4}{G}{G} ({4}{G}{G} , Exile this card from your graveyard: Put a number of +1/+1 counter's equal to this card's power on target creature. Scavenge only as a sorcery.) - addCard(Zone.GRAVEYARD, playerA, "Deadbridge Goliath"); // 5/5 - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - - // Activated abilities of creature cards in your graveyard cost {1} less to activate. - // Tap an untapped Zombie you control: Target player puts the top card of their library into their graveyard. - addCard(Zone.BATTLEFIELD, playerA, "Embalmer's Tools", 1); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scavenge", "Silvercoat Lion"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Deadbridge Goliath", 0); - assertExileCount(playerA, "Deadbridge Goliath", 1); - assertPowerToughness(playerA, "Silvercoat Lion", 7, 7); - assertTappedCount("Forest", true, 5); - assertTappedCount("Forest", false, 1); - } - - @Test - public void ScavengeWithVaroz() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); - - addCard(Zone.GRAVEYARD, playerA, "Pillarfield Ox"); // 2/4 - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - - // Each creature card in your graveyard has scavenge. The scavenge cost is equal to its mana cost. - // Sacrifice another creature: Regenerate Varolz, the Scar-Striped. - addCard(Zone.BATTLEFIELD, playerA, "Varolz, the Scar-Striped", 1); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scavenge", "Silvercoat Lion"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Pillarfield Ox", 0); - assertExileCount(playerA, "Pillarfield Ox", 1); - assertPowerToughness(playerA, "Silvercoat Lion", 4, 4); - assertTappedCount("Plains", true, 4); - } - - @Test - public void ScavengeWithVarozAndCostReduction() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); - - addCard(Zone.GRAVEYARD, playerA, "Pillarfield Ox"); // 2/4 - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - - // Each creature card in your graveyard has scavenge. The scavenge cost is equal to its mana cost. - // Sacrifice another creature: Regenerate Varolz, the Scar-Striped. - addCard(Zone.BATTLEFIELD, playerA, "Varolz, the Scar-Striped", 1); - - // Activated abilities of creature cards in your graveyard cost {1} less to activate. - // Tap an untapped Zombie you control: Target player puts the top card of their library into their graveyard. - addCard(Zone.BATTLEFIELD, playerA, "Embalmer's Tools", 1); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scavenge", "Silvercoat Lion"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Pillarfield Ox", 0); - assertExileCount(playerA, "Pillarfield Ox", 1); - assertPowerToughness(playerA, "Silvercoat Lion", 4, 4); - assertTappedCount("Plains", true, 3); - assertTappedCount("Plains", false, 1); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class ScavengeTest extends CardTestPlayerBase { + +// +// 702.95. Scavenge +// +// 702.95a Scavenge is an activated ability that functions only while the card +// with scavenge is in a graveyard. "Scavenge [cost]" means "[Cost], Exile this +// card from your graveyard: Put a number of +1/+1 counters equal to this card's +// power on target creature. Activate this ability only any time you could cast +// a sorcery." +// + @Test + public void SimpleScavenge() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 6); + + // Scavenge {4}{G}{G} ({4}{G}{G} , Exile this card from your graveyard: Put a number of +1/+1 counter's equal to this card's power on target creature. Scavenge only as a sorcery.) + addCard(Zone.GRAVEYARD, playerA, "Deadbridge Goliath"); // 5/5 + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scavenge", "Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Deadbridge Goliath", 0); + assertExileCount(playerA, "Deadbridge Goliath", 1); + assertPowerToughness(playerA, "Silvercoat Lion", 7, 7); + } + + @Test + public void SimpleScavengeWithCostReduction() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 6); + + // Scavenge {4}{G}{G} ({4}{G}{G} , Exile this card from your graveyard: Put a number of +1/+1 counter's equal to this card's power on target creature. Scavenge only as a sorcery.) + addCard(Zone.GRAVEYARD, playerA, "Deadbridge Goliath"); // 5/5 + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + // Activated abilities of creature cards in your graveyard cost {1} less to activate. + // Tap an untapped Zombie you control: Target player puts the top card of their library into their graveyard. + addCard(Zone.BATTLEFIELD, playerA, "Embalmer's Tools", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scavenge", "Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Deadbridge Goliath", 0); + assertExileCount(playerA, "Deadbridge Goliath", 1); + assertPowerToughness(playerA, "Silvercoat Lion", 7, 7); + assertTappedCount("Forest", true, 5); + assertTappedCount("Forest", false, 1); + } + + @Test + public void ScavengeWithVaroz() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + + addCard(Zone.GRAVEYARD, playerA, "Pillarfield Ox"); // 2/4 + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + // Each creature card in your graveyard has scavenge. The scavenge cost is equal to its mana cost. + // Sacrifice another creature: Regenerate Varolz, the Scar-Striped. + addCard(Zone.BATTLEFIELD, playerA, "Varolz, the Scar-Striped", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scavenge", "Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Pillarfield Ox", 0); + assertExileCount(playerA, "Pillarfield Ox", 1); + assertPowerToughness(playerA, "Silvercoat Lion", 4, 4); + assertTappedCount("Plains", true, 4); + } + + @Test + public void ScavengeWithVarozAndCostReduction() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + + addCard(Zone.GRAVEYARD, playerA, "Pillarfield Ox"); // 2/4 + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + // Each creature card in your graveyard has scavenge. The scavenge cost is equal to its mana cost. + // Sacrifice another creature: Regenerate Varolz, the Scar-Striped. + addCard(Zone.BATTLEFIELD, playerA, "Varolz, the Scar-Striped", 1); + + // Activated abilities of creature cards in your graveyard cost {1} less to activate. + // Tap an untapped Zombie you control: Target player puts the top card of their library into their graveyard. + addCard(Zone.BATTLEFIELD, playerA, "Embalmer's Tools", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scavenge", "Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Pillarfield Ox", 0); + assertExileCount(playerA, "Pillarfield Ox", 1); + assertPowerToughness(playerA, "Silvercoat Lion", 4, 4); + assertTappedCount("Plains", true, 3); + assertTappedCount("Plains", false, 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/TributeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/TributeTest.java index e18d3ec7dda..fa6817c02ff 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/TributeTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/keywords/TributeTest.java @@ -1,48 +1,48 @@ - -package org.mage.test.cards.abilities.keywords; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class TributeTest extends CardTestPlayerBase { - - /** - * When returning a Pharagax Giant from the graveyard to the battlefield via - * the ability of Ink-Eyes, Servant of Oni the Tribute mechanic did not - * trigger, even though it says 'enters the battlefield' and not 'cast' on - * the card. - */ - @Test - public void testPharagaxGiant() { - addCard(Zone.BATTLEFIELD, playerA, "Island", 3); - - // Ninjutsu {3}{B}{B} ({3}{B}{B}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.) - // Whenever Ink-Eyes, Servant of Oni deals combat damage to a player, you may put target creature card from that player's graveyard onto the battlefield under your control. - // {1}{B}: Regenerate Ink-Eyes. - addCard(Zone.BATTLEFIELD, playerA, "Ink-Eyes, Servant of Oni"); // 5/4 - - // Tribute 2 ((As this creature enters the battlefield, an opponent of your choice may put two +1/+1 counter on it.) - // When Pharagax Giant enters the battlefield, if tribute wasn't paid, Pharagax Giant deals 5 damage to each opponent. - addCard(Zone.GRAVEYARD, playerB, "Pharagax Giant"); // Creature 3/3 - - attack(1, playerA, "Ink-Eyes, Servant of Oni"); - setChoice(playerB, "Yes"); // pay tribute - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertTapped("Ink-Eyes, Servant of Oni", true); - assertLife(playerB, 15); - - assertPermanentCount(playerA, "Pharagax Giant", 1); - assertPowerToughness(playerA, "Pharagax Giant", 5, 5); - - } - -} + +package org.mage.test.cards.abilities.keywords; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class TributeTest extends CardTestPlayerBase { + + /** + * When returning a Pharagax Giant from the graveyard to the battlefield via + * the ability of Ink-Eyes, Servant of Oni the Tribute mechanic did not + * trigger, even though it says 'enters the battlefield' and not 'cast' on + * the card. + */ + @Test + public void testPharagaxGiant() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + + // Ninjutsu {3}{B}{B} ({3}{B}{B}, Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.) + // Whenever Ink-Eyes, Servant of Oni deals combat damage to a player, you may put target creature card from that player's graveyard onto the battlefield under your control. + // {1}{B}: Regenerate Ink-Eyes. + addCard(Zone.BATTLEFIELD, playerA, "Ink-Eyes, Servant of Oni"); // 5/4 + + // Tribute 2 ((As this creature enters the battlefield, an opponent of your choice may put two +1/+1 counter on it.) + // When Pharagax Giant enters the battlefield, if tribute wasn't paid, Pharagax Giant deals 5 damage to each opponent. + addCard(Zone.GRAVEYARD, playerB, "Pharagax Giant"); // Creature 3/3 + + attack(1, playerA, "Ink-Eyes, Servant of Oni"); + setChoice(playerB, "Yes"); // pay tribute + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertTapped("Ink-Eyes, Servant of Oni", true); + assertLife(playerB, 15); + + assertPermanentCount(playerA, "Pharagax Giant", 1); + assertPowerToughness(playerA, "Pharagax Giant", 5, 5); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/ConditionalOneShotEffectTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/ConditionalOneShotEffectTest.java index 3d1b8dca14e..cdb534c3f3c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/ConditionalOneShotEffectTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/ConditionalOneShotEffectTest.java @@ -1,78 +1,78 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.cards.abilities.oneshot; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class ConditionalOneShotEffectTest extends CardTestPlayerBase { - - @Test - public void testDisintegrationWithoutArtifact() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); - // Destroy target creature. If you control an artifact, Unlicensed Disintegration deals 3 damage to that creature's controller. - addCard(Zone.HAND, playerA, "Unlicensed Disintegration", 1); // Instant {1}{B}{R} - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Unlicensed Disintegration", "Silvercoat Lion"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - - setStrictChooseMode(true); - execute(); - assertAllCommandsUsed(); - - assertGraveyardCount(playerA, "Unlicensed Disintegration", 1); - assertGraveyardCount(playerB, "Silvercoat Lion", 1); - - assertLife(playerA, 20); - assertLife(playerB, 20); - } - - /** - * Noticed that everytime that i succesfully cast Unlicensed Disintigration - * with an artifact on the board the opponent wont lose 3 life. The creature - * dies but the last piece of text does not work - */ - @Test - public void testDisintegrationWithArtifact() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); - - // Whenever a player casts a red spell, you may gain 1 life. - addCard(Zone.BATTLEFIELD, playerA, "Dragon's Claw", 1); - - // Destroy target creature. If you control an artifact, Unlicensed Disintegration deals 3 damage to that creature's controller. - addCard(Zone.HAND, playerA, "Unlicensed Disintegration", 1); // Instant {1}{B}{R} - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Unlicensed Disintegration", "Silvercoat Lion"); - - setChoice(playerA, "Yes"); // Get life from Dragon's Claw - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - - setStrictChooseMode(true); - execute(); - assertAllCommandsUsed(); - - assertGraveyardCount(playerA, "Unlicensed Disintegration", 1); - assertGraveyardCount(playerB, "Silvercoat Lion", 1); - - assertLife(playerA, 21); - assertLife(playerB, 17); - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.abilities.oneshot; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class ConditionalOneShotEffectTest extends CardTestPlayerBase { + + @Test + public void testDisintegrationWithoutArtifact() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + // Destroy target creature. If you control an artifact, Unlicensed Disintegration deals 3 damage to that creature's controller. + addCard(Zone.HAND, playerA, "Unlicensed Disintegration", 1); // Instant {1}{B}{R} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Unlicensed Disintegration", "Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertGraveyardCount(playerA, "Unlicensed Disintegration", 1); + assertGraveyardCount(playerB, "Silvercoat Lion", 1); + + assertLife(playerA, 20); + assertLife(playerB, 20); + } + + /** + * Noticed that everytime that i succesfully cast Unlicensed Disintigration + * with an artifact on the board the opponent wont lose 3 life. The creature + * dies but the last piece of text does not work + */ + @Test + public void testDisintegrationWithArtifact() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + + // Whenever a player casts a red spell, you may gain 1 life. + addCard(Zone.BATTLEFIELD, playerA, "Dragon's Claw", 1); + + // Destroy target creature. If you control an artifact, Unlicensed Disintegration deals 3 damage to that creature's controller. + addCard(Zone.HAND, playerA, "Unlicensed Disintegration", 1); // Instant {1}{B}{R} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Unlicensed Disintegration", "Silvercoat Lion"); + + setChoice(playerA, "Yes"); // Get life from Dragon's Claw + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertGraveyardCount(playerA, "Unlicensed Disintegration", 1); + assertGraveyardCount(playerB, "Silvercoat Lion", 1); + + assertLife(playerA, 21); + assertLife(playerB, 17); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/IzzetStaticasterTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/IzzetStaticasterTest.java index b911b98ef6a..df86ccc6240 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/IzzetStaticasterTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/IzzetStaticasterTest.java @@ -1,40 +1,40 @@ - -package org.mage.test.cards.abilities.oneshot.damage; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class IzzetStaticasterTest extends CardTestPlayerBase { - - /** - * Izzet Staticaster killed 2 Birds of Paradise under my opponent control - * but it didn't kill my own Birds of Paradise. I remember this worked good - * on XMage but this time it just did not. Is it possibile because the 3 - * Birds come from different sets? (my opponent had those Ravnica, while - * mine was from M12). - */ - @Test - public void testAllReceiveDamage() { - // Flash (You may cast this spell any time you could cast an instant.) - // Haste - // {T}: Izzet Staticaster deals 1 damage to target creature and each other creature with the same name as that creature. - addCard(Zone.BATTLEFIELD, playerA, "Izzet Staticaster"); - addCard(Zone.BATTLEFIELD, playerA, "Birds of Paradise", 2); - addCard(Zone.BATTLEFIELD, playerB, "Birds of Paradise", 2); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {this} deals", "Birds of Paradise"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Birds of Paradise", 2); - assertGraveyardCount(playerB, "Birds of Paradise", 2); - - } -} + +package org.mage.test.cards.abilities.oneshot.damage; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class IzzetStaticasterTest extends CardTestPlayerBase { + + /** + * Izzet Staticaster killed 2 Birds of Paradise under my opponent control + * but it didn't kill my own Birds of Paradise. I remember this worked good + * on XMage but this time it just did not. Is it possibile because the 3 + * Birds come from different sets? (my opponent had those Ravnica, while + * mine was from M12). + */ + @Test + public void testAllReceiveDamage() { + // Flash (You may cast this spell any time you could cast an instant.) + // Haste + // {T}: Izzet Staticaster deals 1 damage to target creature and each other creature with the same name as that creature. + addCard(Zone.BATTLEFIELD, playerA, "Izzet Staticaster"); + addCard(Zone.BATTLEFIELD, playerA, "Birds of Paradise", 2); + addCard(Zone.BATTLEFIELD, playerB, "Birds of Paradise", 2); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {this} deals", "Birds of Paradise"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Birds of Paradise", 2); + assertGraveyardCount(playerB, "Birds of Paradise", 2); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/RuneflareTrapTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/RuneflareTrapTest.java index 5adec57b27a..02d2e982517 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/RuneflareTrapTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/RuneflareTrapTest.java @@ -1,38 +1,38 @@ - -package org.mage.test.cards.abilities.oneshot.damage; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class RuneflareTrapTest extends CardTestPlayerBase { - - /** - * Runeflare Trap counts the starting hand as card draw for the purpose of - * enabling its alternative casting cost, which allows for a turn 1 cast for - * 1 red mana dealing up to 7 damage. - */ - @Test - public void testDamageFromInstantToPlayer() { - // If an opponent drew three or more cards this turn, you may pay {R} rather than pay Runeflare Trap's mana cost. - // Runeflare Trap deals damage to target player equal to the number of cards in that player's hand. - addCard(Zone.HAND, playerB, "Runeflare Trap"); - addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Runeflare Trap", playerA); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertLife(playerA, 20); - assertLife(playerB, 20); - - assertHandCount(playerB, "Runeflare Trap", 1); - } - -} + +package org.mage.test.cards.abilities.oneshot.damage; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class RuneflareTrapTest extends CardTestPlayerBase { + + /** + * Runeflare Trap counts the starting hand as card draw for the purpose of + * enabling its alternative casting cost, which allows for a turn 1 cast for + * 1 red mana dealing up to 7 damage. + */ + @Test + public void testDamageFromInstantToPlayer() { + // If an opponent drew three or more cards this turn, you may pay {R} rather than pay Runeflare Trap's mana cost. + // Runeflare Trap deals damage to target player equal to the number of cards in that player's hand. + addCard(Zone.HAND, playerB, "Runeflare Trap"); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Runeflare Trap", playerA); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertHandCount(playerB, "Runeflare Trap", 1); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/SoulBurnTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/SoulBurnTest.java index 29140f0313e..017d4715f69 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/SoulBurnTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/damage/SoulBurnTest.java @@ -1,179 +1,179 @@ -package org.mage.test.cards.abilities.oneshot.damage; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * @author Johnny E. Hastings - */ -public class SoulBurnTest extends CardTestPlayerBase { - - @Test - public void testDamageOpponentAllBlackMana() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerB); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertLife(playerA, 22); - assertLife(playerB, 18); - } - - @Test - public void testDamageOpponentOneBlackFourRedMana() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerB); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertLife(playerA, 20); - assertLife(playerB, 18); - } - - @Test - public void testDamageOpponentAllKindsOfMana() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Island"); - addCard(Zone.BATTLEFIELD, playerA, "Plains"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerB); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertLife(playerA, 21); - assertLife(playerB, 17); - } - - @Test - public void testDamageSelfAllSwamps() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerA); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertLife(playerA, 20); - assertLife(playerB, 20); - } - - @Test - public void testDamageSelfWithSwampsAndMountains() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerA); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertLife(playerA, 18); - assertLife(playerB, 20); - } - - @Test - public void testDamageSmallCreatureAllSwamps() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - addCard(Zone.BATTLEFIELD, playerB, "Bog Imp"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", "Bog Imp"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertPermanentCount(playerB, "Bog Imp", 0); - assertLife(playerA, 21); - assertLife(playerB, 20); - } - - @Test - public void testDamageSmallCreatureSwampsAndMountains() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - addCard(Zone.BATTLEFIELD, playerB, "Bog Imp"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", "Bog Imp"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertPermanentCount(playerB, "Bog Imp", 0); - assertLife(playerA, 20); - assertLife(playerB, 20); - } - - @Test - public void testDamageBigCreatureAllSwamps() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", "Craw Wurm"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertPermanentCount(playerB, "Craw Wurm", 1); - assertLife(playerA, 22); - assertLife(playerB, 20); - } - - @Test - public void testDamageBigCreatureSwampsAndMountains() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); - addCard(Zone.BATTLEFIELD, playerA, "Swamp"); - addCard(Zone.HAND, playerA, "Soul Burn"); - - addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", "Craw Wurm"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertPermanentCount(playerB, "Craw Wurm", 1); - assertLife(playerA, 21); - assertLife(playerB, 20); - } - -} +package org.mage.test.cards.abilities.oneshot.damage; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author Johnny E. Hastings + */ +public class SoulBurnTest extends CardTestPlayerBase { + + @Test + public void testDamageOpponentAllBlackMana() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerB); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertLife(playerA, 22); + assertLife(playerB, 18); + } + + @Test + public void testDamageOpponentOneBlackFourRedMana() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerB); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertLife(playerA, 20); + assertLife(playerB, 18); + } + + @Test + public void testDamageOpponentAllKindsOfMana() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Island"); + addCard(Zone.BATTLEFIELD, playerA, "Plains"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerB); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertLife(playerA, 21); + assertLife(playerB, 17); + } + + @Test + public void testDamageSelfAllSwamps() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerA); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertLife(playerA, 20); + assertLife(playerB, 20); + } + + @Test + public void testDamageSelfWithSwampsAndMountains() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", playerA); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertLife(playerA, 18); + assertLife(playerB, 20); + } + + @Test + public void testDamageSmallCreatureAllSwamps() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + addCard(Zone.BATTLEFIELD, playerB, "Bog Imp"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", "Bog Imp"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertPermanentCount(playerB, "Bog Imp", 0); + assertLife(playerA, 21); + assertLife(playerB, 20); + } + + @Test + public void testDamageSmallCreatureSwampsAndMountains() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + addCard(Zone.BATTLEFIELD, playerB, "Bog Imp"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", "Bog Imp"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertPermanentCount(playerB, "Bog Imp", 0); + assertLife(playerA, 20); + assertLife(playerB, 20); + } + + @Test + public void testDamageBigCreatureAllSwamps() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", "Craw Wurm"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertPermanentCount(playerB, "Craw Wurm", 1); + assertLife(playerA, 22); + assertLife(playerB, 20); + } + + @Test + public void testDamageBigCreatureSwampsAndMountains() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); + addCard(Zone.BATTLEFIELD, playerA, "Swamp"); + addCard(Zone.HAND, playerA, "Soul Burn"); + + addCard(Zone.BATTLEFIELD, playerB, "Craw Wurm"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Burn", "Craw Wurm"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertPermanentCount(playerB, "Craw Wurm", 1); + assertLife(playerA, 21); + assertLife(playerB, 20); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/library/PutToLibraryTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/library/PutToLibraryTest.java index fbaf5f07ad0..6867ebb0182 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/library/PutToLibraryTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/oneshot/library/PutToLibraryTest.java @@ -1,76 +1,76 @@ -package org.mage.test.cards.abilities.oneshot.library; - -import java.util.ArrayList; -import mage.cards.Card; -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class PutToLibraryTest extends CardTestPlayerBase { - - @Test - public void testPutSecondFromTop() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); - // Put target creature into its owner's library second from the top. Its controller gains 3 life. - addCard(Zone.HAND, playerA, "Oust"); // Sorcery {W} - - addCard(Zone.BATTLEFIELD, playerB, "Dread Wanderer"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Oust", "Dread Wanderer"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Oust", 1); - assertLibraryCount(playerB, "Dread Wanderer", 1); - - assertLife(playerA, 20); - assertLife(playerB, 23); - - ArrayList cardArray = new ArrayList<>(playerB.getLibrary().getCards(currentGame)); - Assert.assertTrue("Library has no cards but should have", cardArray.size() > 1); - Card secondCard = cardArray.get(1); - Assert.assertTrue("Second card from top should be Dread Wanderer, but it isn't", - secondCard != null && secondCard.getName().equals("Dread Wanderer")); - - } - - // Unexpectedly Absent doesn't work properly, no matter how much you pay for X the card is always returned on top of the library. - @Test - public void testUnexpectedlyAbsent() { - // Flying - // At the beginning of combat on your turn, you may pay {G}{U}. When you do, put a +1/+1 counter on another target creature you control, and that creature gains flying until end of turn. - addCard(Zone.BATTLEFIELD, playerA, "Skyrider Patrol", 1); - - // Put target nonland permanent into its owner's library just beneath the top X cards of that library. - addCard(Zone.HAND, playerB, "Unexpectedly Absent"); // Instant {X}{W}{W} - addCard(Zone.BATTLEFIELD, playerB, "Plains", 5); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Unexpectedly Absent", "Skyrider Patrol"); - setChoice(playerB, "X=3"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerB, "Unexpectedly Absent", 1); - assertPermanentCount(playerA, "Skyrider Patrol", 0); - assertLibraryCount(playerA, "Skyrider Patrol", 1); - - ArrayList cardArray = new ArrayList<>(playerA.getLibrary().getCards(currentGame)); - Assert.assertTrue("Library has no cards but should have", cardArray.size() > 3); - Card fourthCard = cardArray.get(3);// get the 4th element - Assert.assertTrue("Fourth card from top should be Skyrider Patrol, but it isn't", - fourthCard != null && fourthCard.getName().equals("Skyrider Patrol")); - - assertLife(playerA, 20); - assertLife(playerB, 20); - - } - -} +package org.mage.test.cards.abilities.oneshot.library; + +import java.util.ArrayList; +import mage.cards.Card; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class PutToLibraryTest extends CardTestPlayerBase { + + @Test + public void testPutSecondFromTop() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); + // Put target creature into its owner's library second from the top. Its controller gains 3 life. + addCard(Zone.HAND, playerA, "Oust"); // Sorcery {W} + + addCard(Zone.BATTLEFIELD, playerB, "Dread Wanderer"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Oust", "Dread Wanderer"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Oust", 1); + assertLibraryCount(playerB, "Dread Wanderer", 1); + + assertLife(playerA, 20); + assertLife(playerB, 23); + + ArrayList cardArray = new ArrayList<>(playerB.getLibrary().getCards(currentGame)); + Assert.assertTrue("Library has no cards but should have", cardArray.size() > 1); + Card secondCard = cardArray.get(1); + Assert.assertTrue("Second card from top should be Dread Wanderer, but it isn't", + secondCard != null && secondCard.getName().equals("Dread Wanderer")); + + } + + // Unexpectedly Absent doesn't work properly, no matter how much you pay for X the card is always returned on top of the library. + @Test + public void testUnexpectedlyAbsent() { + // Flying + // At the beginning of combat on your turn, you may pay {G}{U}. When you do, put a +1/+1 counter on another target creature you control, and that creature gains flying until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Skyrider Patrol", 1); + + // Put target nonland permanent into its owner's library just beneath the top X cards of that library. + addCard(Zone.HAND, playerB, "Unexpectedly Absent"); // Instant {X}{W}{W} + addCard(Zone.BATTLEFIELD, playerB, "Plains", 5); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Unexpectedly Absent", "Skyrider Patrol"); + setChoice(playerB, "X=3"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Unexpectedly Absent", 1); + assertPermanentCount(playerA, "Skyrider Patrol", 0); + assertLibraryCount(playerA, "Skyrider Patrol", 1); + + ArrayList cardArray = new ArrayList<>(playerA.getLibrary().getCards(currentGame)); + Assert.assertTrue("Library has no cards but should have", cardArray.size() > 3); + Card fourthCard = cardArray.get(3);// get the 4th element + Assert.assertTrue("Fourth card from top should be Skyrider Patrol, but it isn't", + fourthCard != null && fourthCard.getName().equals("Skyrider Patrol")); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/optional/IdentityThiefTests.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/optional/IdentityThiefTests.java index 668521023a1..0f10103563a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/optional/IdentityThiefTests.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/optional/IdentityThiefTests.java @@ -1,39 +1,39 @@ -package org.mage.test.cards.abilities.optional; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -public class IdentityThiefTests extends CardTestPlayerBase { - - @Test - public void shouldntExileIfAbilityDeclined() { - addCard(Zone.BATTLEFIELD, playerA, "Identity Thief"); - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - attack(1, playerA, "Identity Thief"); - setChoice(playerA, "No"); - - setStopAt(1, PhaseStep.DECLARE_BLOCKERS); - execute(); - - assertExileCount("Silvercoat Lion", 0); - assertPermanentCount(playerB, "Silvercoat Lion", 1); - } - - @Test - public void shouldExileIfAbilityChosen() { - addCard(Zone.BATTLEFIELD, playerA, "Identity Thief"); - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - attack(1, playerA, "Identity Thief"); - setChoice(playerA, "Yes"); - - setStopAt(1, PhaseStep.DECLARE_BLOCKERS); - execute(); - - assertExileCount("Silvercoat Lion", 1); - assertPermanentCount(playerB, "Silvercoat Lion", 0); - } -} +package org.mage.test.cards.abilities.optional; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class IdentityThiefTests extends CardTestPlayerBase { + + @Test + public void shouldntExileIfAbilityDeclined() { + addCard(Zone.BATTLEFIELD, playerA, "Identity Thief"); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + attack(1, playerA, "Identity Thief"); + setChoice(playerA, "No"); + + setStopAt(1, PhaseStep.DECLARE_BLOCKERS); + execute(); + + assertExileCount("Silvercoat Lion", 0); + assertPermanentCount(playerB, "Silvercoat Lion", 1); + } + + @Test + public void shouldExileIfAbilityChosen() { + addCard(Zone.BATTLEFIELD, playerA, "Identity Thief"); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + attack(1, playerA, "Identity Thief"); + setChoice(playerA, "Yes"); + + setStopAt(1, PhaseStep.DECLARE_BLOCKERS); + execute(); + + assertExileCount("Silvercoat Lion", 1); + assertPermanentCount(playerB, "Silvercoat Lion", 0); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/AuratouchedMageTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/AuratouchedMageTest.java index 1d45c86ac01..f5dd0a2ee9c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/AuratouchedMageTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/abilities/other/AuratouchedMageTest.java @@ -1,90 +1,90 @@ - -package org.mage.test.cards.abilities.other; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Ignore; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author jeffwadsworth - */ -public class AuratouchedMageTest extends CardTestPlayerBase { - - /** - * Auratouched Mage Creature — Human Wizard 3/3, 5W When Auratouched Mage - * enters the battlefield, search your library for an Aura card that could - * enchant it. If Auratouched Mage is still on the battlefield, put that - * Aura card onto the battlefield attached to it. Otherwise, reveal the Aura - * card and put it into your hand. Then shuffle your library. - * - */ - - //If someone knows the way to elegantly handle the test mechanism in regards to no valid targets, please modify. The test works fine in practice. - @Ignore - public void testAuratouchedMageEffectHasMadeIntoTypeArtifact() { - //Any Aura card you find must be able to enchant Auratouched Mage as it currently exists, or as it most recently existed on the battlefield if it's no - //longer on the battlefield. If an effect has made the Mage an artifact, for example, you could search for an Aura with “enchant artifact.” - //Expected result: An effect has made Auratouched Mage into an artifact upon entering the battlefield. An aura that only works on artifacts should work. - addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); - addCard(Zone.BATTLEFIELD, playerA, "Island", 7); - addCard(Zone.HAND, playerA, "Auratouched Mage"); //5W cost - addCard(Zone.HAND, playerA, "Argent Mutation"); //2U cost. Target is an artifact until end of turn - addCard(Zone.LIBRARY, playerA, "Relic Ward"); //Only enchants an artifact permanent - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Auratouched Mage"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Argent Mutation", "Auratouched Mage"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - - execute(); - - assertPermanentCount(playerA, "Auratouched Mage", 1); - assertPermanentCount(playerA, "Relic Ward", 1); - - } - - @Test - public void testGainsLegalAura() { - // Expected result: Brainwash gets placed on Auratouched Mage - addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); - addCard(Zone.HAND, playerA, "Auratouched Mage"); - addCard(Zone.LIBRARY, playerA, "Brainwash");//legal aura for Auratouched Mage - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Auratouched Mage"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - - execute(); - - assertPermanentCount(playerA, "Auratouched Mage", 1); - assertPermanentCount(playerA, "Brainwash", 1); - - } - - //If someone knows the way to elegantly handle the test mechanism in regards to no valid targets, please modify. The test works fine in practice. - @Test - public void testAuratouchedMageNotOnBattlefield() { - // Expected result: Auratouched Mage is exiled immediately after entering the battlefield, the legal aura (Brainwash) gets put into controller's hand - addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); - addCard(Zone.HAND, playerA, "Auratouched Mage"); - addCard(Zone.HAND, playerA, "Swords to Plowshares"); //exiles Auratouched Mage - addCard(Zone.LIBRARY, playerA, "Brainwash"); //valid aura for Auratouched Mage - addCard(Zone.LIBRARY, playerA, "Animate Wall"); //not a valid aura for the Auratouched Mage - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Auratouched Mage"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Swords to Plowshares", "Auratouched Mage"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - - execute(); - - assertPermanentCount(playerA, "Auratouched Mage", 0); - assertPermanentCount(playerA, "Brainwash", 0); - assertHandCount(playerA, "Brainwash", 1); - assertLibraryCount(playerA, "Animate Wall", 1); - - } -} + +package org.mage.test.cards.abilities.other; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author jeffwadsworth + */ +public class AuratouchedMageTest extends CardTestPlayerBase { + + /** + * Auratouched Mage Creature — Human Wizard 3/3, 5W When Auratouched Mage + * enters the battlefield, search your library for an Aura card that could + * enchant it. If Auratouched Mage is still on the battlefield, put that + * Aura card onto the battlefield attached to it. Otherwise, reveal the Aura + * card and put it into your hand. Then shuffle your library. + * + */ + + //If someone knows the way to elegantly handle the test mechanism in regards to no valid targets, please modify. The test works fine in practice. + @Ignore + public void testAuratouchedMageEffectHasMadeIntoTypeArtifact() { + //Any Aura card you find must be able to enchant Auratouched Mage as it currently exists, or as it most recently existed on the battlefield if it's no + //longer on the battlefield. If an effect has made the Mage an artifact, for example, you could search for an Aura with “enchant artifact.” + //Expected result: An effect has made Auratouched Mage into an artifact upon entering the battlefield. An aura that only works on artifacts should work. + addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); + addCard(Zone.BATTLEFIELD, playerA, "Island", 7); + addCard(Zone.HAND, playerA, "Auratouched Mage"); //5W cost + addCard(Zone.HAND, playerA, "Argent Mutation"); //2U cost. Target is an artifact until end of turn + addCard(Zone.LIBRARY, playerA, "Relic Ward"); //Only enchants an artifact permanent + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Auratouched Mage"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Argent Mutation", "Auratouched Mage"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + execute(); + + assertPermanentCount(playerA, "Auratouched Mage", 1); + assertPermanentCount(playerA, "Relic Ward", 1); + + } + + @Test + public void testGainsLegalAura() { + // Expected result: Brainwash gets placed on Auratouched Mage + addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); + addCard(Zone.HAND, playerA, "Auratouched Mage"); + addCard(Zone.LIBRARY, playerA, "Brainwash");//legal aura for Auratouched Mage + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Auratouched Mage"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + execute(); + + assertPermanentCount(playerA, "Auratouched Mage", 1); + assertPermanentCount(playerA, "Brainwash", 1); + + } + + //If someone knows the way to elegantly handle the test mechanism in regards to no valid targets, please modify. The test works fine in practice. + @Test + public void testAuratouchedMageNotOnBattlefield() { + // Expected result: Auratouched Mage is exiled immediately after entering the battlefield, the legal aura (Brainwash) gets put into controller's hand + addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); + addCard(Zone.HAND, playerA, "Auratouched Mage"); + addCard(Zone.HAND, playerA, "Swords to Plowshares"); //exiles Auratouched Mage + addCard(Zone.LIBRARY, playerA, "Brainwash"); //valid aura for Auratouched Mage + addCard(Zone.LIBRARY, playerA, "Animate Wall"); //not a valid aura for the Auratouched Mage + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Auratouched Mage"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Swords to Plowshares", "Auratouched Mage"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + execute(); + + assertPermanentCount(playerA, "Auratouched Mage", 0); + assertPermanentCount(playerA, "Brainwash", 0); + assertHandCount(playerA, "Brainwash", 1); + assertLibraryCount(playerA, "Animate Wall", 1); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/asthough/CastFromLibraryTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/asthough/CastFromLibraryTest.java index 63380c9cce5..99c4706b1d4 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/asthough/CastFromLibraryTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/asthough/CastFromLibraryTest.java @@ -1,69 +1,69 @@ -package org.mage.test.cards.asthough; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class CastFromLibraryTest extends CardTestPlayerBase { - - /** - * Any creature that you cast through Vizier of the Menagerie (ie the card - * on top of your deck) is cast-able at instant speed. This means that they - * can be cast on your opponent's turn, before you scry (and thus change the - * top card), or even right before the Vizier gets destroyed by a fatal push - * or similar. - */ - @Test - public void testVizierOfTheMenagerieWithGenericCreatures() { - addCard(Zone.BATTLEFIELD, playerA, "Forest", 8); - - addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 2); - // You may look at the top card of your library. (You may do this at any time.) - // You may cast the top card of your library if it's a creature card. - // You may spend mana as though it were mana of any type to cast creature spells. - addCard(Zone.HAND, playerA, "Vizier of the Menagerie", 1); // Creature 3/4 {3}{G} - - skipInitShuffling(); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vizier of the Menagerie"); - castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Silvercoat Lion"); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); - - setStopAt(1, PhaseStep.END_TURN); - execute(); - - assertPermanentCount(playerA, "Vizier of the Menagerie", 1); - assertPermanentCount(playerA, "Silvercoat Lion", 1); - assertLibraryCount(playerA, "Silvercoat Lion", 1); - - } - - @Test - public void testVizierOfTheMenagerieWithDryadArbor() { - addCard(Zone.BATTLEFIELD, playerA, "Forest", 8); - addCard(Zone.LIBRARY, playerA, "Dryad Arbor", 2); - // You may look at the top card of your library. (You may do this at any time.) - // You may cast the top card of your library if it's a creature card. - // You may spend mana as though it were mana of any type to cast creature spells. - addCard(Zone.HAND, playerA, "Vizier of the Menagerie", 1); // Creature 3/4 {3}{G} - - skipInitShuffling(); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vizier of the Menagerie"); - castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Dryad Arbor"); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Dryad Arbor"); - - setStopAt(1, PhaseStep.END_TURN); - execute(); - - assertPermanentCount(playerA, "Vizier of the Menagerie", 1); - assertPermanentCount(playerA, "Dryad Arbor", 0); // can't be cast, only played - assertLibraryCount(playerA, "Dryad Arbor", 2); - - } -} +package org.mage.test.cards.asthough; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class CastFromLibraryTest extends CardTestPlayerBase { + + /** + * Any creature that you cast through Vizier of the Menagerie (ie the card + * on top of your deck) is cast-able at instant speed. This means that they + * can be cast on your opponent's turn, before you scry (and thus change the + * top card), or even right before the Vizier gets destroyed by a fatal push + * or similar. + */ + @Test + public void testVizierOfTheMenagerieWithGenericCreatures() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 8); + + addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 2); + // You may look at the top card of your library. (You may do this at any time.) + // You may cast the top card of your library if it's a creature card. + // You may spend mana as though it were mana of any type to cast creature spells. + addCard(Zone.HAND, playerA, "Vizier of the Menagerie", 1); // Creature 3/4 {3}{G} + + skipInitShuffling(); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vizier of the Menagerie"); + castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Silvercoat Lion"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Vizier of the Menagerie", 1); + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertLibraryCount(playerA, "Silvercoat Lion", 1); + + } + + @Test + public void testVizierOfTheMenagerieWithDryadArbor() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 8); + addCard(Zone.LIBRARY, playerA, "Dryad Arbor", 2); + // You may look at the top card of your library. (You may do this at any time.) + // You may cast the top card of your library if it's a creature card. + // You may spend mana as though it were mana of any type to cast creature spells. + addCard(Zone.HAND, playerA, "Vizier of the Menagerie", 1); // Creature 3/4 {3}{G} + + skipInitShuffling(); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vizier of the Menagerie"); + castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Dryad Arbor"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Dryad Arbor"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Vizier of the Menagerie", 1); + assertPermanentCount(playerA, "Dryad Arbor", 0); // can't be cast, only played + assertLibraryCount(playerA, "Dryad Arbor", 2); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/EightAndAHalfTailsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/EightAndAHalfTailsTest.java index a304256f441..dbb31c56236 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/EightAndAHalfTailsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/EightAndAHalfTailsTest.java @@ -1,82 +1,82 @@ - -package org.mage.test.cards.continuous; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.game.permanent.Permanent; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class EightAndAHalfTailsTest extends CardTestPlayerBase { - - @Test - public void testColorChange() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); - - // {1}{W}: Target permanent you control gains protection from white until end of turn. - // {1}: Target spell or permanent becomes white until end of turn. - addCard(Zone.BATTLEFIELD, playerA, "Eight-and-a-Half-Tails", 1); // Creature 2/2 - - addCard(Zone.BATTLEFIELD, playerB, "Nekusar, the Mindrazer", 1); - - // At the beginning of each player's draw step, that player draws an additional card. - // Whenever an opponent draws a card, Nekusar, the Mindrazer deals 1 damage to that player. - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}:", "Nekusar, the Mindrazer"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerB, "Nekusar, the Mindrazer", 1); - Permanent nekusar = getPermanent("Nekusar, the Mindrazer"); - - Assert.assertTrue("Nekusar should be white", nekusar.getColor(currentGame).isWhite()); - Assert.assertFalse("Nekusar should not be blue", nekusar.getColor(currentGame).isBlue()); - Assert.assertFalse("Nekusar should not be black", nekusar.getColor(currentGame).isBlack()); - Assert.assertFalse("Nekusar should not be red", nekusar.getColor(currentGame).isRed()); - - } - - /** - * I made opponent's Nekusar white with 8.5 tails and when Nekusar was - * recast he was still white. - */ - @Test - public void testColorChangeIsReset() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); - - // {1}{W}: Target permanent you control gains protection from white until end of turn. - // {1}: Target spell or permanent becomes white until end of turn. - addCard(Zone.BATTLEFIELD, playerA, "Eight-and-a-Half-Tails", 1); // Creature 2/2 - - // At the beginning of each player's draw step, that player draws an additional card. - // Whenever an opponent draws a card, Nekusar, the Mindrazer deals 1 damage to that player. - addCard(Zone.BATTLEFIELD, playerB, "Nekusar, the Mindrazer", 1); - - // Exile target creature you control, then return it to the battlefield under its owner's control. - // Flashback {3}{U} - addCard(Zone.HAND, playerB, "Momentary Blink", 1); // Instant {1}{W} - addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}:", "Nekusar, the Mindrazer"); - castSpell(1, PhaseStep.BEGIN_COMBAT, playerB, "Momentary Blink", "Nekusar, the Mindrazer"); - - setStopAt(1, PhaseStep.END_COMBAT); - execute(); - - assertPermanentCount(playerB, "Nekusar, the Mindrazer", 1); - Permanent nekusar = getPermanent("Nekusar, the Mindrazer"); - - assertGraveyardCount(playerB, "Momentary Blink", 1); - Assert.assertFalse("Nekusar should not be white", nekusar.getColor(currentGame).isWhite()); - Assert.assertTrue("Nekusar should be blue", nekusar.getColor(currentGame).isBlue()); - Assert.assertTrue("Nekusar should be black", nekusar.getColor(currentGame).isBlack()); - Assert.assertTrue("Nekusar should be red", nekusar.getColor(currentGame).isRed()); - - } - -} + +package org.mage.test.cards.continuous; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class EightAndAHalfTailsTest extends CardTestPlayerBase { + + @Test + public void testColorChange() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); + + // {1}{W}: Target permanent you control gains protection from white until end of turn. + // {1}: Target spell or permanent becomes white until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Eight-and-a-Half-Tails", 1); // Creature 2/2 + + addCard(Zone.BATTLEFIELD, playerB, "Nekusar, the Mindrazer", 1); + + // At the beginning of each player's draw step, that player draws an additional card. + // Whenever an opponent draws a card, Nekusar, the Mindrazer deals 1 damage to that player. + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}:", "Nekusar, the Mindrazer"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerB, "Nekusar, the Mindrazer", 1); + Permanent nekusar = getPermanent("Nekusar, the Mindrazer"); + + Assert.assertTrue("Nekusar should be white", nekusar.getColor(currentGame).isWhite()); + Assert.assertFalse("Nekusar should not be blue", nekusar.getColor(currentGame).isBlue()); + Assert.assertFalse("Nekusar should not be black", nekusar.getColor(currentGame).isBlack()); + Assert.assertFalse("Nekusar should not be red", nekusar.getColor(currentGame).isRed()); + + } + + /** + * I made opponent's Nekusar white with 8.5 tails and when Nekusar was + * recast he was still white. + */ + @Test + public void testColorChangeIsReset() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); + + // {1}{W}: Target permanent you control gains protection from white until end of turn. + // {1}: Target spell or permanent becomes white until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Eight-and-a-Half-Tails", 1); // Creature 2/2 + + // At the beginning of each player's draw step, that player draws an additional card. + // Whenever an opponent draws a card, Nekusar, the Mindrazer deals 1 damage to that player. + addCard(Zone.BATTLEFIELD, playerB, "Nekusar, the Mindrazer", 1); + + // Exile target creature you control, then return it to the battlefield under its owner's control. + // Flashback {3}{U} + addCard(Zone.HAND, playerB, "Momentary Blink", 1); // Instant {1}{W} + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{1}:", "Nekusar, the Mindrazer"); + castSpell(1, PhaseStep.BEGIN_COMBAT, playerB, "Momentary Blink", "Nekusar, the Mindrazer"); + + setStopAt(1, PhaseStep.END_COMBAT); + execute(); + + assertPermanentCount(playerB, "Nekusar, the Mindrazer", 1); + Permanent nekusar = getPermanent("Nekusar, the Mindrazer"); + + assertGraveyardCount(playerB, "Momentary Blink", 1); + Assert.assertFalse("Nekusar should not be white", nekusar.getColor(currentGame).isWhite()); + Assert.assertTrue("Nekusar should be blue", nekusar.getColor(currentGame).isBlue()); + Assert.assertTrue("Nekusar should be black", nekusar.getColor(currentGame).isBlack()); + Assert.assertTrue("Nekusar should be red", nekusar.getColor(currentGame).isRed()); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ErsatzGnomesTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ErsatzGnomesTest.java index a46c95b3882..4f6a30eb322 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ErsatzGnomesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/ErsatzGnomesTest.java @@ -1,136 +1,136 @@ - -package org.mage.test.cards.continuous; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.game.permanent.Permanent; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class ErsatzGnomesTest extends CardTestPlayerBase { - - /** - * Ersatz Gnomes is incorrectly used I targeted a spell which is a permanent - * to colorless. When it enters the field its suppose to be colorless not go - * back to normal. It's colorless until it leaves the battlefield when you - * make a permanent spell colorless when you cast it. - */ - @Test - public void testColorlessSpellCreatesColorlessPermanent() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); - - // {T}: Target spell becomes colorless. - // {T}: Target permanent becomes colorless until end of turn. - addCard(Zone.BATTLEFIELD, playerA, "Ersatz Gnomes"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target spell", "Silvercoat Lion"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Silvercoat Lion", 1); - assertTapped("Ersatz Gnomes", true); - Permanent lion = getPermanent("Silvercoat Lion", playerA); - Assert.assertTrue("Silvercoat lion has to be colorless", lion.getColor(currentGame).isColorless()); - } - - @Test - public void testColorlessSpellCreatesColorlessPermanentUntilItBattlefieldLeft() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); - addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); - - // {T}: Target spell becomes colorless. - // {T}: Target permanent becomes colorless until end of turn. - addCard(Zone.BATTLEFIELD, playerA, "Ersatz Gnomes"); - - addCard(Zone.BATTLEFIELD, playerB, "Island", 1); - addCard(Zone.HAND, playerB, "Unsummon"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target spell", "Silvercoat Lion"); - - castSpell(1, PhaseStep.END_COMBAT, playerB, "Unsummon", "Silvercoat Lion"); - - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); - - setStopAt(1, PhaseStep.END_TURN); - execute(); - - assertGraveyardCount(playerB, "Unsummon", 1); - assertHandCount(playerA, "Silvercoat Lion", 0); - assertPermanentCount(playerA, "Silvercoat Lion", 1); - assertTapped("Ersatz Gnomes", true); - Permanent lion = getPermanent("Silvercoat Lion", playerA); - Assert.assertTrue("Silvercoat lion has to be white", lion.getColor(currentGame).isWhite()); - } - - @Test - public void testChangeColorOfBestowSpell() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); - // Bestow {3}{W} - // Lifelink - // Echanted creature gets +1/+1 and has lifelink. - addCard(Zone.HAND, playerA, "Hopeful Eidolon");// Creature {W} - - // {T}: Target spell becomes colorless. - // {T}: Target permanent becomes colorless until end of turn. - addCard(Zone.BATTLEFIELD, playerA, "Ersatz Gnomes"); - - addCard(Zone.BATTLEFIELD, playerB, "Island", 1); - addCard(Zone.HAND, playerB, "Unsummon"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Silvercoat Lion"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target spell", "Hopeful Eidolon"); - - setStopAt(1, PhaseStep.END_TURN); - execute(); - - assertHandCount(playerA, "Hopeful Eidolon", 0); - assertPermanentCount(playerA, "Hopeful Eidolon", 1); - assertPowerToughness(playerA, "Silvercoat Lion", 3, 3); - assertTapped("Ersatz Gnomes", true); - Permanent eidolon = getPermanent("Hopeful Eidolon", playerA); - Assert.assertTrue("Hopeful Eidolon Enchantment has to be colorless", eidolon.getColor(currentGame).isColorless()); - } - - @Test - public void testChangeColorOfBestowSpellUnsummon() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - // Bestow {3}{W} - // Lifelink - // Echanted creature gets +1/+1 and has lifelink. - addCard(Zone.HAND, playerA, "Hopeful Eidolon");// Creature {W} - - // {T}: Target spell becomes colorless. - // {T}: Target permanent becomes colorless until end of turn. - addCard(Zone.BATTLEFIELD, playerA, "Ersatz Gnomes"); - - addCard(Zone.BATTLEFIELD, playerB, "Island", 1); - addCard(Zone.HAND, playerB, "Unsummon"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target spell", "Hopeful Eidolon"); - - castSpell(1, PhaseStep.END_COMBAT, playerB, "Unsummon", "Hopeful Eidolon"); - - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Hopeful Eidolon"); - - setStopAt(1, PhaseStep.END_TURN); - execute(); - - assertGraveyardCount(playerB, "Unsummon", 1); - assertHandCount(playerA, "Hopeful Eidolon", 0); - assertPermanentCount(playerA, "Hopeful Eidolon", 1); - assertTapped("Ersatz Gnomes", true); - Permanent lion = getPermanent("Hopeful Eidolon", playerA); - Assert.assertTrue("Hopeful Eidolon has to be white", lion.getColor(currentGame).isWhite()); - } -} + +package org.mage.test.cards.continuous; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class ErsatzGnomesTest extends CardTestPlayerBase { + + /** + * Ersatz Gnomes is incorrectly used I targeted a spell which is a permanent + * to colorless. When it enters the field its suppose to be colorless not go + * back to normal. It's colorless until it leaves the battlefield when you + * make a permanent spell colorless when you cast it. + */ + @Test + public void testColorlessSpellCreatesColorlessPermanent() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); + + // {T}: Target spell becomes colorless. + // {T}: Target permanent becomes colorless until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Ersatz Gnomes"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target spell", "Silvercoat Lion"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertTapped("Ersatz Gnomes", true); + Permanent lion = getPermanent("Silvercoat Lion", playerA); + Assert.assertTrue("Silvercoat lion has to be colorless", lion.getColor(currentGame).isColorless()); + } + + @Test + public void testColorlessSpellCreatesColorlessPermanentUntilItBattlefieldLeft() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); + + // {T}: Target spell becomes colorless. + // {T}: Target permanent becomes colorless until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Ersatz Gnomes"); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 1); + addCard(Zone.HAND, playerB, "Unsummon"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target spell", "Silvercoat Lion"); + + castSpell(1, PhaseStep.END_COMBAT, playerB, "Unsummon", "Silvercoat Lion"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerB, "Unsummon", 1); + assertHandCount(playerA, "Silvercoat Lion", 0); + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertTapped("Ersatz Gnomes", true); + Permanent lion = getPermanent("Silvercoat Lion", playerA); + Assert.assertTrue("Silvercoat lion has to be white", lion.getColor(currentGame).isWhite()); + } + + @Test + public void testChangeColorOfBestowSpell() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + // Bestow {3}{W} + // Lifelink + // Echanted creature gets +1/+1 and has lifelink. + addCard(Zone.HAND, playerA, "Hopeful Eidolon");// Creature {W} + + // {T}: Target spell becomes colorless. + // {T}: Target permanent becomes colorless until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Ersatz Gnomes"); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 1); + addCard(Zone.HAND, playerB, "Unsummon"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon using bestow", "Silvercoat Lion"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target spell", "Hopeful Eidolon"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertHandCount(playerA, "Hopeful Eidolon", 0); + assertPermanentCount(playerA, "Hopeful Eidolon", 1); + assertPowerToughness(playerA, "Silvercoat Lion", 3, 3); + assertTapped("Ersatz Gnomes", true); + Permanent eidolon = getPermanent("Hopeful Eidolon", playerA); + Assert.assertTrue("Hopeful Eidolon Enchantment has to be colorless", eidolon.getColor(currentGame).isColorless()); + } + + @Test + public void testChangeColorOfBestowSpellUnsummon() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + // Bestow {3}{W} + // Lifelink + // Echanted creature gets +1/+1 and has lifelink. + addCard(Zone.HAND, playerA, "Hopeful Eidolon");// Creature {W} + + // {T}: Target spell becomes colorless. + // {T}: Target permanent becomes colorless until end of turn. + addCard(Zone.BATTLEFIELD, playerA, "Ersatz Gnomes"); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 1); + addCard(Zone.HAND, playerB, "Unsummon"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hopeful Eidolon"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Target spell", "Hopeful Eidolon"); + + castSpell(1, PhaseStep.END_COMBAT, playerB, "Unsummon", "Hopeful Eidolon"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Hopeful Eidolon"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerB, "Unsummon", 1); + assertHandCount(playerA, "Hopeful Eidolon", 0); + assertPermanentCount(playerA, "Hopeful Eidolon", 1); + assertTapped("Ersatz Gnomes", true); + Permanent lion = getPermanent("Hopeful Eidolon", playerA); + Assert.assertTrue("Hopeful Eidolon has to be white", lion.getColor(currentGame).isWhite()); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LayerTests.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LayerTests.java index bc1b83802f4..42cbe4458eb 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LayerTests.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/LayerTests.java @@ -1,196 +1,196 @@ - - -package org.mage.test.cards.continuous; - -import mage.constants.CardType; -import mage.constants.PhaseStep; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.Filter; -import org.junit.Ignore; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author jeffwadsworth - */ -public class LayerTests extends CardTestPlayerBase { - - @Test - public void testMultipleLayeredDependency() { - //Conspiracy->Opalescence->Enchanted Evening - //Conspiracy is dependent on Opalescence - //Opalescence is dependent on Enchanted Evening - //So, the effects should be applied as follows: - //Enchanted Evening->Opalescence->Conspiracy - - addCard(Zone.HAND, playerA, "Conspiracy"); // creatures get chosen subtype - addCard(Zone.HAND, playerA, "Opalescence"); // enchantments become creatures P/T equal to CMC - addCard(Zone.HAND, playerA, "Enchanted Evening"); // all permanents become enchantments - - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); - addCard(Zone.BATTLEFIELD, playerA, "Island", 5); - addCard(Zone.BATTLEFIELD, playerA, "Glorious Anthem", 1); // keep lands alive // all creatures +1/+1 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Conspiracy"); - setChoice(playerA, "Advisor"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enchanted Evening"); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - assertAllCommandsUsed(); - - assertType("Swamp", CardType.LAND, SubType.ADVISOR); // Subtype changed with Conspiracy - assertPowerToughness(playerA, "Swamp", 1, 1); // boosted with Glorious Anthem - assertType("Enchanted Evening", CardType.ENCHANTMENT, SubType.ADVISOR); // Subtype changed with Conspiracy - assertPowerToughness(playerA, "Enchanted Evening", 6, 6); // boosted with Glorious Anthem - - } - - @Test - public void testMycosynthLatticeAndMarchOfTheMachinesAndHumility() { - // example from Reddit - /* - This came up in a recent EDH game and we had no idea how to progress. - Player A cast a Humility, then a March of the Machines, and finally - a Mycosynth Lattice. - Does the game get stuck in an endless loop of each card gaining and - losing its respective creature-ness and abilities? - Answer: No, they all die - */ - - addCard(Zone.HAND, playerA, "Mycosynth Lattice"); // all permanents are artifacts - addCard(Zone.HAND, playerA, "March of the Machines"); // artifacts become creatures - addCard(Zone.HAND, playerA, "Humility"); // all creatures lose abilities and P/T is 1/1 - - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 10); - addCard(Zone.BATTLEFIELD, playerA, "Island", 10); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Humility"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "March of the Machines"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mycosynth Lattice"); - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - assertAllCommandsUsed(); - - // everything dies - assertPermanentCount(playerA, "Humility", 0); - assertPermanentCount(playerA, "March of the Machines", 0); - assertPermanentCount(playerA, "Mycosynth Lattice", 0); - assertPermanentCount(playerA, "Island", 0); - - } - - @Test - public void testBloodMoon_UrborgTombOfYawgmothInteraction() { - // Blood Moon : Nonbasic lands are Mountains. - // Urborg, Tomb of Yawgmoth : Each land is a Swamp in addition to its other types. - // Expected behavior: Urborg loses all abilities and becomes a Mountain. The Plains does not have subtype Swamp due to this effect. - addCard(Zone.BATTLEFIELD, playerA, "Blood Moon"); - addCard(Zone.BATTLEFIELD, playerA, "Urborg, Tomb of Yawgmoth", 1); // non-basic land - addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertType("Urborg, Tomb of Yawgmoth", CardType.LAND, SubType.MOUNTAIN); // Urborg is a Mountain now - assertPermanentCount(playerA, "Swamp", 0); // no Swamp subtypes on the battlefield - assertPermanentCount(playerA, "Plains", 1); // the Plains is not affected by the Urborg - assertType("Plains", CardType.LAND, SubType.PLAINS); - - } - - @Test - @Ignore //Works fine in the game. Test fails, though. - public void complexExampleFromLayersArticle() { - /*In play there is a Grizzly Bears which has already been Giant Growthed, - a Bog Wraith enchanted by a Lignify, and Figure of Destiny with its 3rd ability activated. - I then cast a Mirrorweave targeting the Figure of Destiny. What does each creature look like? - */ - addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears", 1); - addCard(Zone.HAND, playerA, "Giant Growth", 1); - addCard(Zone.BATTLEFIELD, playerA, "Bog Wraith", 1); - addCard(Zone.HAND, playerA, "Lignify", 1); - addCard(Zone.BATTLEFIELD, playerA, "Figure of Destiny", 1); - addCard(Zone.HAND, playerA, "Mirrorweave", 1); - - addCard(Zone.BATTLEFIELD, playerA, "Forest", 20); - addCard(Zone.BATTLEFIELD, playerA, "Island", 20); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 20); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lignify", "Bog Wrath"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}:"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}{R/W}{R/W}:"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}{R/W}{R/W}{R/W}{R/W}{R/W}:"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mirrorweave", "Figure of Destiny"); - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertPermanentCount(playerA, "Figure of Destiny", 3); - assertPowerToughness(playerA, "Figure of Destiny", 4, 4, Filter.ComparisonScope.All); - assertPowerToughness(playerA, "Figure of Destiny", 8, 8, Filter.ComparisonScope.All); - assertPowerToughness(playerA, "Figure of Destiny", 0, 4, Filter.ComparisonScope.All); - - } - - @Test - public void testUrborgWithAnimateLandAndOvinize() { - // Animate Land: target land is a 3/3 until end of turn and is still a land. - // Ovinize: target creature becomes 0/1 and loses all abilities until end of turn. - // Urborg, Tomb of Yawgmoth : Each land is a Swamp in addition to its other types. - // Expected behavior: Urborg loses all abilities and becomes a 0/1 creature. - addCard(Zone.HAND, playerA, "Animate Land", 1); - addCard(Zone.HAND, playerA, "Ovinize", 1); - addCard(Zone.BATTLEFIELD, playerA, "Urborg, Tomb of Yawgmoth", 1); - addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); - addCard(Zone.BATTLEFIELD, playerA, "Island", 2); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Animate Land", "Urborg, Tomb of Yawgmoth"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ovinize", "Urborg, Tomb of Yawgmoth"); - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertType("Urborg, Tomb of Yawgmoth", CardType.CREATURE, SubType.SWAMP); // Urborg is a creature - assertPowerToughness(playerA, "Urborg, Tomb of Yawgmoth", 0, 1); // Urborg is a 0/1 creature - - } - - @Test - @Ignore //This works fine in the game. Test fails. - public void testFromAnArticle() { - /* - Aiden has a Battlegate Mimic on the battlefield. Nick controls two Wilderness Hypnotists. - Aiden casts a Scourge of the Nobilis, targeting the Mimic; after that resolves Nick activates - one of his Hypnotist's abilities, targeting the Mimic. Aiden attacks with the Mimic, and - casts Inside Out before the damage step. Once Inside Out resolves, Nick activates the ability - of his other Hypnotist. How much damage will the Mimic deal? - */ - addCard(Zone.HAND, playerA, "Scourge of the Nobilis", 1); - addCard(Zone.HAND, playerA, "Inside Out", 1); - addCard(Zone.BATTLEFIELD, playerA, "Battlegate Mimic", 1); - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 8); - addCard(Zone.BATTLEFIELD, playerA, "Island", 8); - - addCard(Zone.BATTLEFIELD, playerB, "Wilderness Hypnotist", 2); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scourge of the Nobilis", "Battlegate Mimic"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}:", "Battlegate Mimic"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Inside Out", "Battlegate Mimic"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}:", "Battlegate Mimic"); - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertPowerToughness(playerA, "Battlegate Mimic", 4, 2); - - } - -} + + +package org.mage.test.cards.continuous; + +import mage.constants.CardType; +import mage.constants.PhaseStep; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.Filter; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author jeffwadsworth + */ +public class LayerTests extends CardTestPlayerBase { + + @Test + public void testMultipleLayeredDependency() { + //Conspiracy->Opalescence->Enchanted Evening + //Conspiracy is dependent on Opalescence + //Opalescence is dependent on Enchanted Evening + //So, the effects should be applied as follows: + //Enchanted Evening->Opalescence->Conspiracy + + addCard(Zone.HAND, playerA, "Conspiracy"); // creatures get chosen subtype + addCard(Zone.HAND, playerA, "Opalescence"); // enchantments become creatures P/T equal to CMC + addCard(Zone.HAND, playerA, "Enchanted Evening"); // all permanents become enchantments + + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); + addCard(Zone.BATTLEFIELD, playerA, "Island", 5); + addCard(Zone.BATTLEFIELD, playerA, "Glorious Anthem", 1); // keep lands alive // all creatures +1/+1 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Conspiracy"); + setChoice(playerA, "Advisor"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Opalescence"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Enchanted Evening"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + + assertType("Swamp", CardType.LAND, SubType.ADVISOR); // Subtype changed with Conspiracy + assertPowerToughness(playerA, "Swamp", 1, 1); // boosted with Glorious Anthem + assertType("Enchanted Evening", CardType.ENCHANTMENT, SubType.ADVISOR); // Subtype changed with Conspiracy + assertPowerToughness(playerA, "Enchanted Evening", 6, 6); // boosted with Glorious Anthem + + } + + @Test + public void testMycosynthLatticeAndMarchOfTheMachinesAndHumility() { + // example from Reddit + /* + This came up in a recent EDH game and we had no idea how to progress. + Player A cast a Humility, then a March of the Machines, and finally + a Mycosynth Lattice. + Does the game get stuck in an endless loop of each card gaining and + losing its respective creature-ness and abilities? + Answer: No, they all die + */ + + addCard(Zone.HAND, playerA, "Mycosynth Lattice"); // all permanents are artifacts + addCard(Zone.HAND, playerA, "March of the Machines"); // artifacts become creatures + addCard(Zone.HAND, playerA, "Humility"); // all creatures lose abilities and P/T is 1/1 + + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 10); + addCard(Zone.BATTLEFIELD, playerA, "Island", 10); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Humility"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "March of the Machines"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mycosynth Lattice"); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + assertAllCommandsUsed(); + + // everything dies + assertPermanentCount(playerA, "Humility", 0); + assertPermanentCount(playerA, "March of the Machines", 0); + assertPermanentCount(playerA, "Mycosynth Lattice", 0); + assertPermanentCount(playerA, "Island", 0); + + } + + @Test + public void testBloodMoon_UrborgTombOfYawgmothInteraction() { + // Blood Moon : Nonbasic lands are Mountains. + // Urborg, Tomb of Yawgmoth : Each land is a Swamp in addition to its other types. + // Expected behavior: Urborg loses all abilities and becomes a Mountain. The Plains does not have subtype Swamp due to this effect. + addCard(Zone.BATTLEFIELD, playerA, "Blood Moon"); + addCard(Zone.BATTLEFIELD, playerA, "Urborg, Tomb of Yawgmoth", 1); // non-basic land + addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertType("Urborg, Tomb of Yawgmoth", CardType.LAND, SubType.MOUNTAIN); // Urborg is a Mountain now + assertPermanentCount(playerA, "Swamp", 0); // no Swamp subtypes on the battlefield + assertPermanentCount(playerA, "Plains", 1); // the Plains is not affected by the Urborg + assertType("Plains", CardType.LAND, SubType.PLAINS); + + } + + @Test + @Ignore //Works fine in the game. Test fails, though. + public void complexExampleFromLayersArticle() { + /*In play there is a Grizzly Bears which has already been Giant Growthed, + a Bog Wraith enchanted by a Lignify, and Figure of Destiny with its 3rd ability activated. + I then cast a Mirrorweave targeting the Figure of Destiny. What does each creature look like? + */ + addCard(Zone.BATTLEFIELD, playerA, "Grizzly Bears", 1); + addCard(Zone.HAND, playerA, "Giant Growth", 1); + addCard(Zone.BATTLEFIELD, playerA, "Bog Wraith", 1); + addCard(Zone.HAND, playerA, "Lignify", 1); + addCard(Zone.BATTLEFIELD, playerA, "Figure of Destiny", 1); + addCard(Zone.HAND, playerA, "Mirrorweave", 1); + + addCard(Zone.BATTLEFIELD, playerA, "Forest", 20); + addCard(Zone.BATTLEFIELD, playerA, "Island", 20); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 20); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Giant Growth", "Grizzly Bears"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lignify", "Bog Wrath"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}:"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}{R/W}{R/W}:"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{R/W}{R/W}{R/W}{R/W}{R/W}{R/W}:"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mirrorweave", "Figure of Destiny"); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Figure of Destiny", 3); + assertPowerToughness(playerA, "Figure of Destiny", 4, 4, Filter.ComparisonScope.All); + assertPowerToughness(playerA, "Figure of Destiny", 8, 8, Filter.ComparisonScope.All); + assertPowerToughness(playerA, "Figure of Destiny", 0, 4, Filter.ComparisonScope.All); + + } + + @Test + public void testUrborgWithAnimateLandAndOvinize() { + // Animate Land: target land is a 3/3 until end of turn and is still a land. + // Ovinize: target creature becomes 0/1 and loses all abilities until end of turn. + // Urborg, Tomb of Yawgmoth : Each land is a Swamp in addition to its other types. + // Expected behavior: Urborg loses all abilities and becomes a 0/1 creature. + addCard(Zone.HAND, playerA, "Animate Land", 1); + addCard(Zone.HAND, playerA, "Ovinize", 1); + addCard(Zone.BATTLEFIELD, playerA, "Urborg, Tomb of Yawgmoth", 1); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Animate Land", "Urborg, Tomb of Yawgmoth"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ovinize", "Urborg, Tomb of Yawgmoth"); + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertType("Urborg, Tomb of Yawgmoth", CardType.CREATURE, SubType.SWAMP); // Urborg is a creature + assertPowerToughness(playerA, "Urborg, Tomb of Yawgmoth", 0, 1); // Urborg is a 0/1 creature + + } + + @Test + @Ignore //This works fine in the game. Test fails. + public void testFromAnArticle() { + /* + Aiden has a Battlegate Mimic on the battlefield. Nick controls two Wilderness Hypnotists. + Aiden casts a Scourge of the Nobilis, targeting the Mimic; after that resolves Nick activates + one of his Hypnotist's abilities, targeting the Mimic. Aiden attacks with the Mimic, and + casts Inside Out before the damage step. Once Inside Out resolves, Nick activates the ability + of his other Hypnotist. How much damage will the Mimic deal? + */ + addCard(Zone.HAND, playerA, "Scourge of the Nobilis", 1); + addCard(Zone.HAND, playerA, "Inside Out", 1); + addCard(Zone.BATTLEFIELD, playerA, "Battlegate Mimic", 1); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 8); + addCard(Zone.BATTLEFIELD, playerA, "Island", 8); + + addCard(Zone.BATTLEFIELD, playerB, "Wilderness Hypnotist", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scourge of the Nobilis", "Battlegate Mimic"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}:", "Battlegate Mimic"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Inside Out", "Battlegate Mimic"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{T}:", "Battlegate Mimic"); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPowerToughness(playerA, "Battlegate Mimic", 4, 2); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/control/BronzeBombshellTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/control/BronzeBombshellTest.java index ec4a08bfbe3..501204af159 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/control/BronzeBombshellTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/control/BronzeBombshellTest.java @@ -1,44 +1,44 @@ - -package org.mage.test.cards.control; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX - */ -public class BronzeBombshellTest extends CardTestPlayerBase { - - @Test - public void testEndlessWhispers() { - // When a player other than Bronze Bombshell's owner controls it, that player sacrifices it. - // If the player does, Bronze Bombshell deals 7 damage to the player. - addCard(Zone.BATTLEFIELD, playerA, "Bronze Bombshell", 1); - - // Each creature has "When this creature dies, choose target opponent. - // That player puts this card from its owner's graveyard onto the battlefield - // under their control at the beginning of the next end step." - addCard(Zone.BATTLEFIELD, playerA, "Endless Whispers", 1); - - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); - // Destroy target creature or planeswalker.. - addCard(Zone.HAND, playerA, "Hero's Downfall"); // {1}{B}{B} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hero's Downfall", "Bronze Bombshell"); - addTarget(playerA, playerB); - - setStopAt(2, PhaseStep.UPKEEP); - execute(); - - assertGraveyardCount(playerA, "Hero's Downfall", 1); - assertGraveyardCount(playerA, "Bronze Bombshell", 1); - - assertLife(playerA, 20); - assertLife(playerB, 13); - - } - -} + +package org.mage.test.cards.control; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX + */ +public class BronzeBombshellTest extends CardTestPlayerBase { + + @Test + public void testEndlessWhispers() { + // When a player other than Bronze Bombshell's owner controls it, that player sacrifices it. + // If the player does, Bronze Bombshell deals 7 damage to the player. + addCard(Zone.BATTLEFIELD, playerA, "Bronze Bombshell", 1); + + // Each creature has "When this creature dies, choose target opponent. + // That player puts this card from its owner's graveyard onto the battlefield + // under their control at the beginning of the next end step." + addCard(Zone.BATTLEFIELD, playerA, "Endless Whispers", 1); + + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); + // Destroy target creature or planeswalker.. + addCard(Zone.HAND, playerA, "Hero's Downfall"); // {1}{B}{B} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hero's Downfall", "Bronze Bombshell"); + addTarget(playerA, playerB); + + setStopAt(2, PhaseStep.UPKEEP); + execute(); + + assertGraveyardCount(playerA, "Hero's Downfall", 1); + assertGraveyardCount(playerA, "Bronze Bombshell", 1); + + assertLife(playerA, 20); + assertLife(playerB, 13); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/control/GainControlOfOwnedCreaturesTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/control/GainControlOfOwnedCreaturesTest.java index 83d0e02d3f3..d5cc75e6017 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/control/GainControlOfOwnedCreaturesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/control/GainControlOfOwnedCreaturesTest.java @@ -1,115 +1,115 @@ -package org.mage.test.cards.control; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class GainControlOfOwnedCreaturesTest extends CardTestPlayerBase { - - /** - * - * - */ - @Test - public void TrostaniDiscordantTest() { - // Other creatures you control get +1/+1. - // When Trostani Discordant enters the battlefield, create two 1/1 white Soldier creature tokens with lifelink. - // At the beginning of your end step, each player gains control of all creatures they own. - addCard(Zone.LIBRARY, playerA, "Trostani Discordant", 1); // Creature {3}{G}{W} 1/4 - - // Your opponent can't cast spells with even converted mana costs. (Zero is even.) - // Your opponents can't block with creatures with even converted mana costs. - addCard(Zone.LIBRARY, playerA, "Void Winnower", 1); // Creature 11/9 - skipInitShuffling(); - - // Look at the top ten cards of your library, exile up to two creature cards from among them, then shuffle your library. - // Target opponent may choose one of the exiled cards and put it onto the battlefield under their control. Put the rest onto the battlefield under your control. - addCard(Zone.HAND, playerA, "Dubious Challenge", 1); // Sorcery {3}{G} - addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dubious Challenge"); - setChoice(playerA, "Trostani Discordant^Void Winnower"); - - addTarget(playerA, playerB); - - setChoice(playerB, "Trostani Discordant"); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertAllCommandsUsed(); - - assertGraveyardCount(playerA, "Dubious Challenge", 1); - assertPermanentCount(playerA, "Void Winnower", 1); - assertPowerToughness(playerA, "Void Winnower", 11, 9); - assertPermanentCount(playerB, "Trostani Discordant", 1); - assertPowerToughness(playerB, "Trostani Discordant", 1, 4); - - assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); - assertPowerToughness(playerB, "Silvercoat Lion", 3, 3); - } - - /** - * https://www.slightlymagic.net/forum/viewtopic.php?f=70&t=29805&p=243997#p243989 - * - * I was playing a Dubious Challenge Pionner deck. In my game, Trostani - * Discordant was put on the battlefield after Ive launched a Dubious - * Challenge sorcery. My opponent took the Trostani Discordant and I took a - * Void Winnower . Unfortnately, at the end step, the Trostani Discordant - * ability that makes all players gain control of the creatures they OWN - * doesn't happened. - */ - @Test - public void TrostaniDiscordantTriggerTest() { - // Other creatures you control get +1/+1. - // When Trostani Discordant enters the battlefield, create two 1/1 white Soldier creature tokens with lifelink. - // At the beginning of your end step, each player gains control of all creatures they own. - addCard(Zone.LIBRARY, playerA, "Trostani Discordant", 1); // Creature {3}{G}{W} 1/4 - - // Your opponent can't cast spells with even converted mana costs. (Zero is even.) - // Your opponents can't block with creatures with even converted mana costs. - addCard(Zone.LIBRARY, playerA, "Void Winnower", 1); // Creature 11/9 - skipInitShuffling(); - - // Look at the top ten cards of your library, exile up to two creature cards from among them, then shuffle your library. - // Target opponent may choose one of the exiled cards and put it onto the battlefield under their control. Put the rest onto the battlefield under your control. - addCard(Zone.HAND, playerA, "Dubious Challenge", 1); // Sorcery {3}{G} - addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dubious Challenge"); - setChoice(playerA, "Trostani Discordant^Void Winnower"); - - addTarget(playerA, playerB); - - setChoice(playerB, "Trostani Discordant"); - - setStrictChooseMode(true); - setStopAt(8, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertAllCommandsUsed(); - - assertGraveyardCount(playerA, "Dubious Challenge", 1); - assertPermanentCount(playerA, "Void Winnower", 1); - assertPowerToughness(playerA, "Void Winnower", 12, 10); - assertPermanentCount(playerA, "Trostani Discordant", 1); - assertPowerToughness(playerA, "Trostani Discordant", 1, 4); - - assertPowerToughness(playerA, "Silvercoat Lion", 3, 3); - assertPowerToughness(playerB, "Silvercoat Lion", 2, 2); - } -} +package org.mage.test.cards.control; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class GainControlOfOwnedCreaturesTest extends CardTestPlayerBase { + + /** + * + * + */ + @Test + public void TrostaniDiscordantTest() { + // Other creatures you control get +1/+1. + // When Trostani Discordant enters the battlefield, create two 1/1 white Soldier creature tokens with lifelink. + // At the beginning of your end step, each player gains control of all creatures they own. + addCard(Zone.LIBRARY, playerA, "Trostani Discordant", 1); // Creature {3}{G}{W} 1/4 + + // Your opponent can't cast spells with even converted mana costs. (Zero is even.) + // Your opponents can't block with creatures with even converted mana costs. + addCard(Zone.LIBRARY, playerA, "Void Winnower", 1); // Creature 11/9 + skipInitShuffling(); + + // Look at the top ten cards of your library, exile up to two creature cards from among them, then shuffle your library. + // Target opponent may choose one of the exiled cards and put it onto the battlefield under their control. Put the rest onto the battlefield under your control. + addCard(Zone.HAND, playerA, "Dubious Challenge", 1); // Sorcery {3}{G} + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dubious Challenge"); + setChoice(playerA, "Trostani Discordant^Void Winnower"); + + addTarget(playerA, playerB); + + setChoice(playerB, "Trostani Discordant"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertAllCommandsUsed(); + + assertGraveyardCount(playerA, "Dubious Challenge", 1); + assertPermanentCount(playerA, "Void Winnower", 1); + assertPowerToughness(playerA, "Void Winnower", 11, 9); + assertPermanentCount(playerB, "Trostani Discordant", 1); + assertPowerToughness(playerB, "Trostani Discordant", 1, 4); + + assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); + assertPowerToughness(playerB, "Silvercoat Lion", 3, 3); + } + + /** + * https://www.slightlymagic.net/forum/viewtopic.php?f=70&t=29805&p=243997#p243989 + * + * I was playing a Dubious Challenge Pionner deck. In my game, Trostani + * Discordant was put on the battlefield after Ive launched a Dubious + * Challenge sorcery. My opponent took the Trostani Discordant and I took a + * Void Winnower . Unfortnately, at the end step, the Trostani Discordant + * ability that makes all players gain control of the creatures they OWN + * doesn't happened. + */ + @Test + public void TrostaniDiscordantTriggerTest() { + // Other creatures you control get +1/+1. + // When Trostani Discordant enters the battlefield, create two 1/1 white Soldier creature tokens with lifelink. + // At the beginning of your end step, each player gains control of all creatures they own. + addCard(Zone.LIBRARY, playerA, "Trostani Discordant", 1); // Creature {3}{G}{W} 1/4 + + // Your opponent can't cast spells with even converted mana costs. (Zero is even.) + // Your opponents can't block with creatures with even converted mana costs. + addCard(Zone.LIBRARY, playerA, "Void Winnower", 1); // Creature 11/9 + skipInitShuffling(); + + // Look at the top ten cards of your library, exile up to two creature cards from among them, then shuffle your library. + // Target opponent may choose one of the exiled cards and put it onto the battlefield under their control. Put the rest onto the battlefield under your control. + addCard(Zone.HAND, playerA, "Dubious Challenge", 1); // Sorcery {3}{G} + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dubious Challenge"); + setChoice(playerA, "Trostani Discordant^Void Winnower"); + + addTarget(playerA, playerB); + + setChoice(playerB, "Trostani Discordant"); + + setStrictChooseMode(true); + setStopAt(8, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertAllCommandsUsed(); + + assertGraveyardCount(playerA, "Dubious Challenge", 1); + assertPermanentCount(playerA, "Void Winnower", 1); + assertPowerToughness(playerA, "Void Winnower", 12, 10); + assertPermanentCount(playerA, "Trostani Discordant", 1); + assertPowerToughness(playerA, "Trostani Discordant", 1, 4); + + assertPowerToughness(playerA, "Silvercoat Lion", 3, 3); + assertPowerToughness(playerB, "Silvercoat Lion", 2, 2); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/control/GontiLordOfLuxuryEffectTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/control/GontiLordOfLuxuryEffectTest.java index 3f3ae2b4395..1877430ba45 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/control/GontiLordOfLuxuryEffectTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/control/GontiLordOfLuxuryEffectTest.java @@ -1,202 +1,202 @@ - -package org.mage.test.cards.control; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class GontiLordOfLuxuryEffectTest extends CardTestPlayerBase { - - /** - * Returning to your hand a creature you own but is controlled by an - * opponent doesn't let you replay it. Happened after I Aether Tradewinded - * my Rashmi that an opponent cast with Gonti, Lord of Luxury (the exile - * part could have something to do with this?). Then on my turn I couldn't - * replay it. - */ - @Test - public void testCanBeCastAgain() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 8); - // Deathtouch - // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, - // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, - // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. - addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature {2}{B}{B} - - addCard(Zone.LIBRARY, playerB, "Rashmi, Eternities Crafter"); // Creature {2}{G}{U} - skipInitShuffling(); - addCard(Zone.BATTLEFIELD, playerB, "Island", 2); - addCard(Zone.BATTLEFIELD, playerB, "Forest", 2); - // Return target permanent you control and target permanent you don't control to their owners' hands. - addCard(Zone.HAND, playerB, "Aether Tradewinds", 1); // Intant {2}{U} - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); - addTarget(playerA, playerB); - setChoice(playerA, "Rashmi, Eternities Crafter"); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Rashmi, Eternities Crafter"); - - castSpell(1, PhaseStep.END_TURN, playerB, "Aether Tradewinds", "Silvercoat Lion^Rashmi, Eternities Crafter"); - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Rashmi, Eternities Crafter"); - - setStopAt(2, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerB, "Aether Tradewinds", 1); - assertHandCount(playerB, "Silvercoat Lion", 1); - assertHandCount(playerB, "Rashmi, Eternities Crafter", 0); - assertPermanentCount(playerB, "Rashmi, Eternities Crafter", 1); - - } - - /** - * Opponent using Gonti, Lord of Luxury took Mirari's Wake out of my library - * and cast it. I cast Cyclonic Rift on Mirari's Wake to put it back in my - * hand and was unable to recast Mirari's Wake. - */ - @Test - public void testCanBeCastAgainCyclonicRift() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 9); - // Deathtouch - // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, - // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, - // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. - addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature 2/3 {2}{B}{B} - - // Creatures you control get +1/+1. - // Whenever you tap a land for mana, add one mana of any type that land produced. - addCard(Zone.LIBRARY, playerB, "Mirari's Wake"); // Enchantment {3}{G}{W} - skipInitShuffling(); - - addCard(Zone.BATTLEFIELD, playerB, "Island", 2); - addCard(Zone.BATTLEFIELD, playerB, "Forest", 2); - addCard(Zone.BATTLEFIELD, playerB, "Plains", 1); - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); - // Return target nonland permanent you don't control to its owner's hand. - // Overload {6}{U} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") - addCard(Zone.HAND, playerB, "Cyclonic Rift", 1); // Intant {1}{U} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); - addTarget(playerA, playerB); - setChoice(playerA, "Mirari's Wake"); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mirari's Wake"); - castSpell(1, PhaseStep.END_TURN, playerB, "Cyclonic Rift", "Mirari's Wake"); - - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Mirari's Wake"); - - setStopAt(2, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Gonti, Lord of Luxury", 1); - assertPowerToughness(playerA, "Gonti, Lord of Luxury", 2, 3); - assertGraveyardCount(playerB, "Cyclonic Rift", 1); - - assertPermanentCount(playerB, "Mirari's Wake", 1); - assertPowerToughness(playerB, "Silvercoat Lion", 3, 3); - - } - - /** - * I noticed in a game that when you cast Lingering Souls off of Gonti, Lord - * of Luxury and then the lingering souls goes to the graveyard it cannot be - * flashed back. The gonti was my opponent's and the lingering souls was - * mine for reference. - */ - @Test - public void testCanBeCastLaterWithFlashBack() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 7); - // Deathtouch - // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, - // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, - // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. - addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature 2/3 {2}{B}{B} - - // Create two 1/1 white Spirit creature tokens with flying. - // Flashback {1}{B} - addCard(Zone.LIBRARY, playerB, "Lingering Souls"); // Sorcery {2}{W} - skipInitShuffling(); - - addCard(Zone.BATTLEFIELD, playerB, "Swamp", 2); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); - addTarget(playerA, playerB); - setChoice(playerA, "Lingering Souls"); - - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lingering Souls"); - - activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Flashback"); - - setStopAt(2, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Gonti, Lord of Luxury", 1); - assertPowerToughness(playerA, "Gonti, Lord of Luxury", 2, 3); - assertPermanentCount(playerA, "Spirit", 2); - - assertPermanentCount(playerB, "Spirit", 2); - - assertExileCount("Lingering Souls", 1); - - } - - /** - * An opponent used a Gonti against me, and took my Ob Nixilis Reignited. He - * later played it, and I killed my Ob Nixilis. Then later, using Seasons - * Past, I got Ob Nixilis back in my hand. However, the Ob Nixilis was now - * uncastable. Has anyone else encountered this? - */ - @Test - public void testPlaneswalkerCanBeCastLaterFromHand() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 9); - // Deathtouch - // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, - // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, - // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. - addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature 2/3 {2}{B}{B} - - // +1: You draw a card and you lose 1 life. - // -3: Destroy target creature. - // -8: Target opponent gets an emblem with "Whenever a player draws a card, you lose 2 life." - addCard(Zone.LIBRARY, playerB, "Ob Nixilis Reignited"); // Planeswalker [5] {3}{B}{B} - skipInitShuffling(); - - addCard(Zone.BATTLEFIELD, playerB, "Swamp", 3); - addCard(Zone.BATTLEFIELD, playerB, "Forest", 3); - - // Return any number of cards with different converted mana costs from your graveyard to your hand. Put Seasons Past on the bottom of its owner's library. - addCard(Zone.HAND, playerB, "Seasons Past", 1); // Sorcery {4}{G}{G} - - addCard(Zone.BATTLEFIELD, playerB, "Dross Crocodile", 2); // Creature 5/1 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); - addTarget(playerA, playerB); - setChoice(playerA, "Ob Nixilis Reignited"); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Ob Nixilis Reignited"); - activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "-3:", "Dross Crocodile"); - - attack(2, playerB, "Dross Crocodile", "Ob Nixilis Reignited"); - - castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Seasons Past"); - setChoice(playerB, "Ob Nixilis Reignited"); - - castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Ob Nixilis Reignited"); - - setStopAt(4, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Gonti, Lord of Luxury", 1); - assertPermanentCount(playerB, "Dross Crocodile", 1); - assertGraveyardCount(playerB, "Dross Crocodile", 1); - - assertGraveyardCount(playerB, "Seasons Past", 0); - - assertHandCount(playerB, "Ob Nixilis Reignited", 0); - assertPermanentCount(playerB, "Ob Nixilis Reignited", 1); - - } -} + +package org.mage.test.cards.control; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class GontiLordOfLuxuryEffectTest extends CardTestPlayerBase { + + /** + * Returning to your hand a creature you own but is controlled by an + * opponent doesn't let you replay it. Happened after I Aether Tradewinded + * my Rashmi that an opponent cast with Gonti, Lord of Luxury (the exile + * part could have something to do with this?). Then on my turn I couldn't + * replay it. + */ + @Test + public void testCanBeCastAgain() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 8); + // Deathtouch + // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, + // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, + // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. + addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature {2}{B}{B} + + addCard(Zone.LIBRARY, playerB, "Rashmi, Eternities Crafter"); // Creature {2}{G}{U} + skipInitShuffling(); + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.BATTLEFIELD, playerB, "Forest", 2); + // Return target permanent you control and target permanent you don't control to their owners' hands. + addCard(Zone.HAND, playerB, "Aether Tradewinds", 1); // Intant {2}{U} + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); + addTarget(playerA, playerB); + setChoice(playerA, "Rashmi, Eternities Crafter"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Rashmi, Eternities Crafter"); + + castSpell(1, PhaseStep.END_TURN, playerB, "Aether Tradewinds", "Silvercoat Lion^Rashmi, Eternities Crafter"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Rashmi, Eternities Crafter"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Aether Tradewinds", 1); + assertHandCount(playerB, "Silvercoat Lion", 1); + assertHandCount(playerB, "Rashmi, Eternities Crafter", 0); + assertPermanentCount(playerB, "Rashmi, Eternities Crafter", 1); + + } + + /** + * Opponent using Gonti, Lord of Luxury took Mirari's Wake out of my library + * and cast it. I cast Cyclonic Rift on Mirari's Wake to put it back in my + * hand and was unable to recast Mirari's Wake. + */ + @Test + public void testCanBeCastAgainCyclonicRift() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 9); + // Deathtouch + // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, + // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, + // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. + addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature 2/3 {2}{B}{B} + + // Creatures you control get +1/+1. + // Whenever you tap a land for mana, add one mana of any type that land produced. + addCard(Zone.LIBRARY, playerB, "Mirari's Wake"); // Enchantment {3}{G}{W} + skipInitShuffling(); + + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + addCard(Zone.BATTLEFIELD, playerB, "Forest", 2); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 1); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + // Return target nonland permanent you don't control to its owner's hand. + // Overload {6}{U} (You may cast this spell for its overload cost. If you do, change its text by replacing all instances of "target" with "each.") + addCard(Zone.HAND, playerB, "Cyclonic Rift", 1); // Intant {1}{U} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); + addTarget(playerA, playerB); + setChoice(playerA, "Mirari's Wake"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Mirari's Wake"); + castSpell(1, PhaseStep.END_TURN, playerB, "Cyclonic Rift", "Mirari's Wake"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Mirari's Wake"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Gonti, Lord of Luxury", 1); + assertPowerToughness(playerA, "Gonti, Lord of Luxury", 2, 3); + assertGraveyardCount(playerB, "Cyclonic Rift", 1); + + assertPermanentCount(playerB, "Mirari's Wake", 1); + assertPowerToughness(playerB, "Silvercoat Lion", 3, 3); + + } + + /** + * I noticed in a game that when you cast Lingering Souls off of Gonti, Lord + * of Luxury and then the lingering souls goes to the graveyard it cannot be + * flashed back. The gonti was my opponent's and the lingering souls was + * mine for reference. + */ + @Test + public void testCanBeCastLaterWithFlashBack() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 7); + // Deathtouch + // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, + // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, + // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. + addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature 2/3 {2}{B}{B} + + // Create two 1/1 white Spirit creature tokens with flying. + // Flashback {1}{B} + addCard(Zone.LIBRARY, playerB, "Lingering Souls"); // Sorcery {2}{W} + skipInitShuffling(); + + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); + addTarget(playerA, playerB); + setChoice(playerA, "Lingering Souls"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lingering Souls"); + + activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Flashback"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Gonti, Lord of Luxury", 1); + assertPowerToughness(playerA, "Gonti, Lord of Luxury", 2, 3); + assertPermanentCount(playerA, "Spirit", 2); + + assertPermanentCount(playerB, "Spirit", 2); + + assertExileCount("Lingering Souls", 1); + + } + + /** + * An opponent used a Gonti against me, and took my Ob Nixilis Reignited. He + * later played it, and I killed my Ob Nixilis. Then later, using Seasons + * Past, I got Ob Nixilis back in my hand. However, the Ob Nixilis was now + * uncastable. Has anyone else encountered this? + */ + @Test + public void testPlaneswalkerCanBeCastLaterFromHand() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 9); + // Deathtouch + // When Gonti, Lord of Luxury enters the battlefield, look at the top four cards of target opponent's library, exile one of them face down, + // then put the rest on the bottom of that library in a random order. For as long as that card remains exiled, + // you may look at it, you may cast it, and you may spend mana as though it were mana of any type to cast it. + addCard(Zone.HAND, playerA, "Gonti, Lord of Luxury", 1); // Creature 2/3 {2}{B}{B} + + // +1: You draw a card and you lose 1 life. + // -3: Destroy target creature. + // -8: Target opponent gets an emblem with "Whenever a player draws a card, you lose 2 life." + addCard(Zone.LIBRARY, playerB, "Ob Nixilis Reignited"); // Planeswalker [5] {3}{B}{B} + skipInitShuffling(); + + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 3); + addCard(Zone.BATTLEFIELD, playerB, "Forest", 3); + + // Return any number of cards with different converted mana costs from your graveyard to your hand. Put Seasons Past on the bottom of its owner's library. + addCard(Zone.HAND, playerB, "Seasons Past", 1); // Sorcery {4}{G}{G} + + addCard(Zone.BATTLEFIELD, playerB, "Dross Crocodile", 2); // Creature 5/1 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Gonti, Lord of Luxury"); + addTarget(playerA, playerB); + setChoice(playerA, "Ob Nixilis Reignited"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Ob Nixilis Reignited"); + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "-3:", "Dross Crocodile"); + + attack(2, playerB, "Dross Crocodile", "Ob Nixilis Reignited"); + + castSpell(2, PhaseStep.POSTCOMBAT_MAIN, playerB, "Seasons Past"); + setChoice(playerB, "Ob Nixilis Reignited"); + + castSpell(4, PhaseStep.PRECOMBAT_MAIN, playerB, "Ob Nixilis Reignited"); + + setStopAt(4, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Gonti, Lord of Luxury", 1); + assertPermanentCount(playerB, "Dross Crocodile", 1); + assertGraveyardCount(playerB, "Dross Crocodile", 1); + + assertGraveyardCount(playerB, "Seasons Past", 0); + + assertHandCount(playerB, "Ob Nixilis Reignited", 0); + assertPermanentCount(playerB, "Ob Nixilis Reignited", 1); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/control/VengefulPharaohTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/control/VengefulPharaohTest.java index 9a543562b43..0e0ae36cb51 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/control/VengefulPharaohTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/control/VengefulPharaohTest.java @@ -1,48 +1,48 @@ - -package org.mage.test.cards.control; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class VengefulPharaohTest extends CardTestPlayerBase { - - @Test - public void controlledByOtherBeforeGraveyardTriggerTest() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - // Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.) - // Whenever combat damage is dealt to you or a planeswalker you control, if Vengeful Pharaoh is in your graveyard, destroy target attacking creature, then put Vengeful Pharaoh on top of your library. - addCard(Zone.HAND, playerA, "Vengeful Pharaoh", 1); // Creature 5/4 {2}{B}{B}{B} - // Destroy target permanent. - addCard(Zone.HAND, playerA, "Vindicate", 1); // Sorcery {1}{W}{B} - - addCard(Zone.HAND, playerB, "Control Magic", 1); // Enchantment - addCard(Zone.BATTLEFIELD, playerB, "Island", 4); - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vengeful Pharaoh"); - - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Control Magic", "Vengeful Pharaoh"); - - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Vindicate", "Vengeful Pharaoh"); - - attack(4, playerB, "Silvercoat Lion"); - - setStopAt(4, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertGraveyardCount(playerA, "Vindicate", 1); - assertGraveyardCount(playerB, "Control Magic", 1); - assertGraveyardCount(playerB, "Silvercoat Lion", 1); - assertGraveyardCount(playerA, "Vengeful Pharaoh", 0); - assertLibraryCount(playerA, "Vengeful Pharaoh", 1); - - assertLife(playerA, 18); - } -} + +package org.mage.test.cards.control; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class VengefulPharaohTest extends CardTestPlayerBase { + + @Test + public void controlledByOtherBeforeGraveyardTriggerTest() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + // Deathtouch (Any amount of damage this deals to a creature is enough to destroy it.) + // Whenever combat damage is dealt to you or a planeswalker you control, if Vengeful Pharaoh is in your graveyard, destroy target attacking creature, then put Vengeful Pharaoh on top of your library. + addCard(Zone.HAND, playerA, "Vengeful Pharaoh", 1); // Creature 5/4 {2}{B}{B}{B} + // Destroy target permanent. + addCard(Zone.HAND, playerA, "Vindicate", 1); // Sorcery {1}{W}{B} + + addCard(Zone.HAND, playerB, "Control Magic", 1); // Enchantment + addCard(Zone.BATTLEFIELD, playerB, "Island", 4); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vengeful Pharaoh"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Control Magic", "Vengeful Pharaoh"); + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Vindicate", "Vengeful Pharaoh"); + + attack(4, playerB, "Silvercoat Lion"); + + setStopAt(4, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerA, "Vindicate", 1); + assertGraveyardCount(playerB, "Control Magic", 1); + assertGraveyardCount(playerB, "Silvercoat Lion", 1); + assertGraveyardCount(playerA, "Vengeful Pharaoh", 0); + assertLibraryCount(playerA, "Vengeful Pharaoh", 1); + + assertLife(playerA, 18); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/FluctuatorTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/FluctuatorTest.java index 171e2190834..9209eeb6f56 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/FluctuatorTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/cost/modification/FluctuatorTest.java @@ -1,95 +1,95 @@ - -package org.mage.test.cards.cost.modification; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * @author noxx - */ -public class FluctuatorTest extends CardTestPlayerBase { - - /** - * NOTE: As of 4/19/2017 this test is failing due to a bug in code. - * See issue #3148 - * - * Fluctuator makes 'Akroma's Vengeance' cyclic cost reduced to {1} Test it - * with one Plains on battlefield. - */ - @Test - public void testFluctuatorReducedBy2() { - - // Destroy all artifacts, creatures, and enchantments. - // Cycling ({3}, Discard this card: Draw a card.) - addCard(Zone.HAND, playerA, "Akroma's Vengeance"); - - // Cycling abilities you activate cost you up to {2} less to activate. - addCard(Zone.BATTLEFIELD, playerA, "Fluctuator"); - - // One mana should be enough - addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling"); - setChoice(playerA, "2"); // reduce 2 generic mana - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Akroma's Vengeance", 1); - assertHandCount(playerA, 1); - } - - /** - * Fluctuator makes 'Akroma's Vengeance' cyclic cost reduced to {1} - * - * Make sure it wasn't reduced more than by two. - */ - @Test - public void testFluctuatorReducedNotBy3() { - - // Destroy all artifacts, creatures, and enchantments. - // Cycling ({3}, Discard this card: Draw a card.) - addCard(Zone.HAND, playerA, "Akroma's Vengeance"); - - // Cycling abilities you activate cost you up to {2} less to activate. - addCard(Zone.BATTLEFIELD, playerA, "Fluctuator"); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling"); - setChoice(playerA, "2"); // reduce 1 generic mana - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Akroma's Vengeance", 0); - assertHandCount(playerA, 1); - } - - /** - * NOTE: As of 4/19/2017 this test is failing due to a bug in code. - * See issue #3148 - * - * Test 2 Fluctuators reduce cycling cost up to 4. - */ - @Test - public void testTwoFluctuatorsReduceBy4() { - - // Destroy all artifacts, creatures, and enchantments. - // Cycling ({3}, Discard this card: Draw a card.) - addCard(Zone.HAND, playerA, "Akroma's Vengeance"); - - // Cycling abilities you activate cost you up to {2} less to activate. - addCard(Zone.BATTLEFIELD, playerA, "Fluctuator", 2); // 2 copies - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling"); - setChoice(playerA, "2"); // reduce 2 generic mana - setChoice(playerA, "1"); // reduce 1 generic mana - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Akroma's Vengeance", 1); - assertHandCount(playerA, 1); - } -} + +package org.mage.test.cards.cost.modification; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author noxx + */ +public class FluctuatorTest extends CardTestPlayerBase { + + /** + * NOTE: As of 4/19/2017 this test is failing due to a bug in code. + * See issue #3148 + * + * Fluctuator makes 'Akroma's Vengeance' cyclic cost reduced to {1} Test it + * with one Plains on battlefield. + */ + @Test + public void testFluctuatorReducedBy2() { + + // Destroy all artifacts, creatures, and enchantments. + // Cycling ({3}, Discard this card: Draw a card.) + addCard(Zone.HAND, playerA, "Akroma's Vengeance"); + + // Cycling abilities you activate cost you up to {2} less to activate. + addCard(Zone.BATTLEFIELD, playerA, "Fluctuator"); + + // One mana should be enough + addCard(Zone.BATTLEFIELD, playerA, "Plains", 1); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling"); + setChoice(playerA, "2"); // reduce 2 generic mana + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Akroma's Vengeance", 1); + assertHandCount(playerA, 1); + } + + /** + * Fluctuator makes 'Akroma's Vengeance' cyclic cost reduced to {1} + * + * Make sure it wasn't reduced more than by two. + */ + @Test + public void testFluctuatorReducedNotBy3() { + + // Destroy all artifacts, creatures, and enchantments. + // Cycling ({3}, Discard this card: Draw a card.) + addCard(Zone.HAND, playerA, "Akroma's Vengeance"); + + // Cycling abilities you activate cost you up to {2} less to activate. + addCard(Zone.BATTLEFIELD, playerA, "Fluctuator"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling"); + setChoice(playerA, "2"); // reduce 1 generic mana + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Akroma's Vengeance", 0); + assertHandCount(playerA, 1); + } + + /** + * NOTE: As of 4/19/2017 this test is failing due to a bug in code. + * See issue #3148 + * + * Test 2 Fluctuators reduce cycling cost up to 4. + */ + @Test + public void testTwoFluctuatorsReduceBy4() { + + // Destroy all artifacts, creatures, and enchantments. + // Cycling ({3}, Discard this card: Draw a card.) + addCard(Zone.HAND, playerA, "Akroma's Vengeance"); + + // Cycling abilities you activate cost you up to {2} less to activate. + addCard(Zone.BATTLEFIELD, playerA, "Fluctuator", 2); // 2 copies + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Cycling"); + setChoice(playerA, "2"); // reduce 2 generic mana + setChoice(playerA, "1"); // reduce 1 generic mana + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Akroma's Vengeance", 1); + assertHandCount(playerA, 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/AuraTargetRemovedTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/AuraTargetRemovedTest.java index ce3cc0de6ae..4e46099f9b8 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/AuraTargetRemovedTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/enchantments/AuraTargetRemovedTest.java @@ -1,60 +1,60 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.cards.enchantments; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class AuraTargetRemovedTest extends CardTestPlayerBase { - - /** - * Spreading Seas is bugged, opp casted it on my Field of Ruin, I sacced - * with the spell on stack but it resolved anyway and let them draw. - * - * 303.4. Some enchantments have the subtype “Aura.” An Aura enters the - * battlefield attached to an object or player. What an Aura can be attached - * to is restricted by its enchant keyword ability (see rule 702.5, - * “Enchant”). Other effects can limit what a permanent can be enchanted by. - * 303.4a An Aura spell requires a target, which is restricted by its - * enchant ability. - */ - @Test - public void testOneAttackerDamage() { - addCard(Zone.BATTLEFIELD, playerA, "Academy Ruins", 1); - addCard(Zone.BATTLEFIELD, playerA, "Island", 2); - // Enchant land - // When Spreading Seas enters the battlefield, draw a card. - // Enchanted land is an Island. - addCard(Zone.HAND, playerA, "Spreading Seas", 1); //Enchantment {1}{U} - - // {T}: Add {C}. - // {2}, {T}, Sacrifice Field of Ruin: Destroy target nonbasic land an opponent controls. Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles their library. - addCard(Zone.BATTLEFIELD, playerB, "Field of Ruin", 1); // - addCard(Zone.BATTLEFIELD, playerB, "Island", 2); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spreading Seas", "Field of Ruin"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{2}, {T}", "Academy Ruins", "Spreading Seas"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerB, 3); - assertGraveyardCount(playerB, "Field of Ruin", 1); - - assertPermanentCount(playerA, 3); - assertGraveyardCount(playerA, "Spreading Seas", 1); - assertGraveyardCount(playerA, "Academy Ruins", 1); - - assertHandCount(playerA, 0); // Because Spreading Seas is counterd (no valid target), no card is drawn from it - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.enchantments; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class AuraTargetRemovedTest extends CardTestPlayerBase { + + /** + * Spreading Seas is bugged, opp casted it on my Field of Ruin, I sacced + * with the spell on stack but it resolved anyway and let them draw. + * + * 303.4. Some enchantments have the subtype “Aura.” An Aura enters the + * battlefield attached to an object or player. What an Aura can be attached + * to is restricted by its enchant keyword ability (see rule 702.5, + * “Enchant”). Other effects can limit what a permanent can be enchanted by. + * 303.4a An Aura spell requires a target, which is restricted by its + * enchant ability. + */ + @Test + public void testOneAttackerDamage() { + addCard(Zone.BATTLEFIELD, playerA, "Academy Ruins", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + // Enchant land + // When Spreading Seas enters the battlefield, draw a card. + // Enchanted land is an Island. + addCard(Zone.HAND, playerA, "Spreading Seas", 1); //Enchantment {1}{U} + + // {T}: Add {C}. + // {2}, {T}, Sacrifice Field of Ruin: Destroy target nonbasic land an opponent controls. Each player searches their library for a basic land card, puts it onto the battlefield, then shuffles their library. + addCard(Zone.BATTLEFIELD, playerB, "Field of Ruin", 1); // + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Spreading Seas", "Field of Ruin"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{2}, {T}", "Academy Ruins", "Spreading Seas"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerB, 3); + assertGraveyardCount(playerB, "Field of Ruin", 1); + + assertPermanentCount(playerA, 3); + assertGraveyardCount(playerA, "Spreading Seas", 1); + assertGraveyardCount(playerA, "Academy Ruins", 1); + + assertHandCount(playerA, 0); // Because Spreading Seas is counterd (no valid target), no card is drawn from it + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/mana/RiverOfTearsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/mana/RiverOfTearsTest.java index 6faaf0f6ad3..3f764e329dc 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/mana/RiverOfTearsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/mana/RiverOfTearsTest.java @@ -1,61 +1,61 @@ -package org.mage.test.cards.mana; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class RiverOfTearsTest extends CardTestPlayerBase { - - /** - * River of Tears doesn't produce black mana any time. Gatherer says: - * - * 17/11/2017 The turn you play River of Tears, it will produce Black when - * tapped for mana. - * - * 17/11/2017 River of Tears produces Black only after you've played a land, - * not after you've put a land onto the battlefield (such as with Evolving - * Wilds). - */ - @Test - public void testBlackAfterPlayed() { - // {T}: Add {U}. If you played a land this turn, add {B} instead. - addCard(Zone.HAND, playerA, "River of Tears", 1); // Land - - addCard(Zone.HAND, playerA, "Nightshade Stinger", 1); // Creature {B} - - playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "River of Tears"); - - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Nightshade Stinger"); - - setStopAt(1, PhaseStep.END_TURN); - execute(); - - assertPermanentCount(playerA, "River of Tears", 1); - assertTapped("River of Tears", true); - assertPermanentCount(playerA, "Nightshade Stinger", 1); - } - - @Test - public void testBlueInSecondTurn() { - // {T}: Add {U}. If you played a land this turn, add {B} instead. - addCard(Zone.HAND, playerA, "River of Tears", 1); // Land - - addCard(Zone.HAND, playerA, "Aven Envoy", 1); // Creature {B} - - playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "River of Tears"); - - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Aven Envoy"); - - setStopAt(3, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "River of Tears", 1); - assertTapped("River of Tears", true); - assertPermanentCount(playerA, "Aven Envoy", 1); - } -} +package org.mage.test.cards.mana; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class RiverOfTearsTest extends CardTestPlayerBase { + + /** + * River of Tears doesn't produce black mana any time. Gatherer says: + * + * 17/11/2017 The turn you play River of Tears, it will produce Black when + * tapped for mana. + * + * 17/11/2017 River of Tears produces Black only after you've played a land, + * not after you've put a land onto the battlefield (such as with Evolving + * Wilds). + */ + @Test + public void testBlackAfterPlayed() { + // {T}: Add {U}. If you played a land this turn, add {B} instead. + addCard(Zone.HAND, playerA, "River of Tears", 1); // Land + + addCard(Zone.HAND, playerA, "Nightshade Stinger", 1); // Creature {B} + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "River of Tears"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Nightshade Stinger"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "River of Tears", 1); + assertTapped("River of Tears", true); + assertPermanentCount(playerA, "Nightshade Stinger", 1); + } + + @Test + public void testBlueInSecondTurn() { + // {T}: Add {U}. If you played a land this turn, add {B} instead. + addCard(Zone.HAND, playerA, "River of Tears", 1); // Land + + addCard(Zone.HAND, playerA, "Aven Envoy", 1); // Creature {B} + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "River of Tears"); + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Aven Envoy"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "River of Tears", 1); + assertTapped("River of Tears", true); + assertPermanentCount(playerA, "Aven Envoy", 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/modal/ChooseOneTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/modal/ChooseOneTest.java index fc28594a264..5453c1cb6ce 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/modal/ChooseOneTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/modal/ChooseOneTest.java @@ -1,79 +1,79 @@ - -package org.mage.test.cards.modal; - -import mage.abilities.keyword.SwampwalkAbility; -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class ChooseOneTest extends CardTestPlayerBase { - - @Test - public void testFirstMode() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - // Choose one - // - Target player discards a card - // - Target creature gets +2/-1 until end of turn. - // - Target creature gains swampwalk until end of turn. - addCard(Zone.HAND, playerA, "Funeral Charm"); // Instant {B} - - addCard(Zone.HAND, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Funeral Charm", playerB); - setModeChoice(playerA, "1"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Funeral Charm", 1); - assertGraveyardCount(playerB, "Silvercoat Lion", 1); - } - - @Test - public void testSecondMode() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - // Choose one - // - Target player discards a card - // - Target creature gets +2/-1 until end of turn. - // - Target creature gains swampwalk until end of turn. - addCard(Zone.HAND, playerA, "Funeral Charm"); // Instant {B} - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Funeral Charm", "Silvercoat Lion"); - setModeChoice(playerA, "2"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Funeral Charm", 1); - assertPowerToughness(playerB, "Silvercoat Lion", 4, 1); - } - - @Test - public void testThirdMode() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - // Choose one - // - Target player discards a card - // - Target creature gets +2/-1 until end of turn. - // - Target creature gains swampwalk until end of turn. - addCard(Zone.HAND, playerA, "Funeral Charm"); // Instant {B} - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Funeral Charm", "Silvercoat Lion"); - setModeChoice(playerA, "3"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Funeral Charm", 1); - assertPowerToughness(playerB, "Silvercoat Lion", 2, 2); - assertAbility(playerB, "Silvercoat Lion", new SwampwalkAbility(), true); - } -} + +package org.mage.test.cards.modal; + +import mage.abilities.keyword.SwampwalkAbility; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class ChooseOneTest extends CardTestPlayerBase { + + @Test + public void testFirstMode() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + // Choose one + // - Target player discards a card + // - Target creature gets +2/-1 until end of turn. + // - Target creature gains swampwalk until end of turn. + addCard(Zone.HAND, playerA, "Funeral Charm"); // Instant {B} + + addCard(Zone.HAND, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Funeral Charm", playerB); + setModeChoice(playerA, "1"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Funeral Charm", 1); + assertGraveyardCount(playerB, "Silvercoat Lion", 1); + } + + @Test + public void testSecondMode() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + // Choose one + // - Target player discards a card + // - Target creature gets +2/-1 until end of turn. + // - Target creature gains swampwalk until end of turn. + addCard(Zone.HAND, playerA, "Funeral Charm"); // Instant {B} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Funeral Charm", "Silvercoat Lion"); + setModeChoice(playerA, "2"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Funeral Charm", 1); + assertPowerToughness(playerB, "Silvercoat Lion", 4, 1); + } + + @Test + public void testThirdMode() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + // Choose one + // - Target player discards a card + // - Target creature gets +2/-1 until end of turn. + // - Target creature gains swampwalk until end of turn. + addCard(Zone.HAND, playerA, "Funeral Charm"); // Instant {B} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Funeral Charm", "Silvercoat Lion"); + setModeChoice(playerA, "3"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Funeral Charm", 1); + assertPowerToughness(playerB, "Silvercoat Lion", 2, 2); + assertAbility(playerB, "Silvercoat Lion", new SwampwalkAbility(), true); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/modal/OneOrMoreTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/modal/OneOrMoreTest.java index 064ff0fd8e1..2160bc9bc5f 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/modal/OneOrMoreTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/modal/OneOrMoreTest.java @@ -1,100 +1,100 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.cards.modal; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.game.permanent.Permanent; -import mage.game.permanent.PermanentToken; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * @author LevelX2 - */ -public class OneOrMoreTest extends CardTestPlayerBase { - - /** - * Sublime Epiphany can bounce and - * copy the same creature. This is because legality of targets is checked - * only as the spell begins to resolve, not in between modes, and because - * the games can use last known info of the legal target. - */ - @Test - public void test_ChooseModes_AsCardOrder() { - addCard(Zone.BATTLEFIELD, playerA, "Island", 6); - // Choose one or more — - // 1 • Counter target spell - // 2 • Counter target activated or triggered ability. - // 3 • Return target nonland permanent to its owner's hand. - // 4 • Create a token that's a copy of target creature you control. - // 5 • Target player draws a card. - addCard(Zone.HAND, playerA, "Sublime Epiphany"); // Instant {4}{U}{U} - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sublime Epiphany"); - setModeChoice(playerA, "3"); - setModeChoice(playerA, "4"); - setModeChoice(playerA, "5"); - addTarget(playerA, "Silvercoat Lion"); // for 3 - addTarget(playerA, "Silvercoat Lion"); // for 4 - addTarget(playerA, playerB); // for 5 - setModeChoice(playerA, null); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertAllCommandsUsed(); - - assertHandCount(playerB, 1); - assertHandCount(playerA, "Silvercoat Lion", 1); - - assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); - - Permanent perm = getPermanent("Silvercoat Lion"); - Assert.assertTrue("Silvercoat Lion has to be a Token", perm instanceof PermanentToken); - } - - @Test - public void test_ChooseModes_AsCustomOrder() { - // user can select modes in any order, but resolves/targets must be standard (in same order as card's text) - - addCard(Zone.BATTLEFIELD, playerA, "Island", 6); - // Choose one or more — - // 1 • Counter target spell - // 2 • Counter target activated or triggered ability. - // 3 • Return target nonland permanent to its owner's hand. - // 4 • Create a token that's a copy of target creature you control. - // 5 • Target player draws a card. - addCard(Zone.HAND, playerA, "Sublime Epiphany"); // Instant {4}{U}{U} - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sublime Epiphany"); - setModeChoice(playerA, "4"); - setModeChoice(playerA, "5"); - setModeChoice(playerA, "3"); - addTarget(playerA, "Silvercoat Lion"); // for 3 - addTarget(playerA, "Silvercoat Lion"); // for 4 - addTarget(playerA, playerB); // for 5 - setModeChoice(playerA, null); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertAllCommandsUsed(); - - assertHandCount(playerB, 1); - assertHandCount(playerA, "Silvercoat Lion", 1); - - assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); - - Permanent perm = getPermanent("Silvercoat Lion"); - Assert.assertTrue("Silvercoat Lion has to be a Token", perm instanceof PermanentToken); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.modal; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import mage.game.permanent.PermanentToken; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author LevelX2 + */ +public class OneOrMoreTest extends CardTestPlayerBase { + + /** + * Sublime Epiphany can bounce and + * copy the same creature. This is because legality of targets is checked + * only as the spell begins to resolve, not in between modes, and because + * the games can use last known info of the legal target. + */ + @Test + public void test_ChooseModes_AsCardOrder() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 6); + // Choose one or more — + // 1 • Counter target spell + // 2 • Counter target activated or triggered ability. + // 3 • Return target nonland permanent to its owner's hand. + // 4 • Create a token that's a copy of target creature you control. + // 5 • Target player draws a card. + addCard(Zone.HAND, playerA, "Sublime Epiphany"); // Instant {4}{U}{U} + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sublime Epiphany"); + setModeChoice(playerA, "3"); + setModeChoice(playerA, "4"); + setModeChoice(playerA, "5"); + addTarget(playerA, "Silvercoat Lion"); // for 3 + addTarget(playerA, "Silvercoat Lion"); // for 4 + addTarget(playerA, playerB); // for 5 + setModeChoice(playerA, null); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertHandCount(playerB, 1); + assertHandCount(playerA, "Silvercoat Lion", 1); + + assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); + + Permanent perm = getPermanent("Silvercoat Lion"); + Assert.assertTrue("Silvercoat Lion has to be a Token", perm instanceof PermanentToken); + } + + @Test + public void test_ChooseModes_AsCustomOrder() { + // user can select modes in any order, but resolves/targets must be standard (in same order as card's text) + + addCard(Zone.BATTLEFIELD, playerA, "Island", 6); + // Choose one or more — + // 1 • Counter target spell + // 2 • Counter target activated or triggered ability. + // 3 • Return target nonland permanent to its owner's hand. + // 4 • Create a token that's a copy of target creature you control. + // 5 • Target player draws a card. + addCard(Zone.HAND, playerA, "Sublime Epiphany"); // Instant {4}{U}{U} + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Sublime Epiphany"); + setModeChoice(playerA, "4"); + setModeChoice(playerA, "5"); + setModeChoice(playerA, "3"); + addTarget(playerA, "Silvercoat Lion"); // for 3 + addTarget(playerA, "Silvercoat Lion"); // for 4 + addTarget(playerA, playerB); // for 5 + setModeChoice(playerA, null); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertHandCount(playerB, 1); + assertHandCount(playerA, "Silvercoat Lion", 1); + + assertPowerToughness(playerA, "Silvercoat Lion", 2, 2); + + Permanent perm = getPermanent("Silvercoat Lion"); + Assert.assertTrue("Silvercoat Lion has to be a Token", perm instanceof PermanentToken); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/modal/SameModeMoreThanOnceTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/modal/SameModeMoreThanOnceTest.java index db9c00b8de5..5f3d44a022a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/modal/SameModeMoreThanOnceTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/modal/SameModeMoreThanOnceTest.java @@ -1,73 +1,73 @@ - -package org.mage.test.cards.modal; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class SameModeMoreThanOnceTest extends CardTestPlayerBase { - - @Test - public void testEachModeOnce() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); - // Choose three. You may choose the same mode more than once. - // - Target player draws a card and loses 1 life; - // - Target creature gets -2/-2 until end of turn; - // - Return target creature card from your graveyard to your hand. - addCard(Zone.HAND, playerA, "Wretched Confluence"); // Instant {3}{B}{B} - - addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); - addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wretched Confluence", "mode=1targetPlayer=PlayerA^mode=2Pillarfield Ox^mode=3Silvercoat Lion"); - setModeChoice(playerA, "1"); - setModeChoice(playerA, "2"); - setModeChoice(playerA, "3"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Wretched Confluence", 1); - assertLife(playerA, 19); - assertLife(playerB, 20); - assertHandCount(playerA, 2); - assertPowerToughness(playerB, "Pillarfield Ox", 0, 2); - assertGraveyardCount(playerA, "Silvercoat Lion", 0); - - } - - @Test - public void testSecondModeTwiceThridModeOnce() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); - // Choose three. You may choose the same mode more than once. - // - Target player draws a card and loses 1 life; - // - Target creature gets -2/-2 until end of turn; - // - Return target creature card from your graveyard to your hand. - addCard(Zone.HAND, playerA, "Wretched Confluence"); // Instant {3}{B}{B} - - addCard(Zone.BATTLEFIELD, playerB, "Wall of Air"); - addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox"); - addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wretched Confluence", "mode=1Pillarfield Ox^mode=2Wall of Air^mode=3Silvercoat Lion"); - setModeChoice(playerA, "2"); - setModeChoice(playerA, "2"); - setModeChoice(playerA, "3"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Wretched Confluence", 1); - assertLife(playerA, 20); - assertLife(playerB, 20); - assertPowerToughness(playerB, "Wall of Air", -1, 3); - assertPowerToughness(playerB, "Pillarfield Ox", 0, 2); - assertGraveyardCount(playerA, "Silvercoat Lion", 0); - - } -} + +package org.mage.test.cards.modal; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class SameModeMoreThanOnceTest extends CardTestPlayerBase { + + @Test + public void testEachModeOnce() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + // Choose three. You may choose the same mode more than once. + // - Target player draws a card and loses 1 life; + // - Target creature gets -2/-2 until end of turn; + // - Return target creature card from your graveyard to your hand. + addCard(Zone.HAND, playerA, "Wretched Confluence"); // Instant {3}{B}{B} + + addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wretched Confluence", "mode=1targetPlayer=PlayerA^mode=2Pillarfield Ox^mode=3Silvercoat Lion"); + setModeChoice(playerA, "1"); + setModeChoice(playerA, "2"); + setModeChoice(playerA, "3"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Wretched Confluence", 1); + assertLife(playerA, 19); + assertLife(playerB, 20); + assertHandCount(playerA, 2); + assertPowerToughness(playerB, "Pillarfield Ox", 0, 2); + assertGraveyardCount(playerA, "Silvercoat Lion", 0); + + } + + @Test + public void testSecondModeTwiceThridModeOnce() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + // Choose three. You may choose the same mode more than once. + // - Target player draws a card and loses 1 life; + // - Target creature gets -2/-2 until end of turn; + // - Return target creature card from your graveyard to your hand. + addCard(Zone.HAND, playerA, "Wretched Confluence"); // Instant {3}{B}{B} + + addCard(Zone.BATTLEFIELD, playerB, "Wall of Air"); + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox"); + addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Wretched Confluence", "mode=1Pillarfield Ox^mode=2Wall of Air^mode=3Silvercoat Lion"); + setModeChoice(playerA, "2"); + setModeChoice(playerA, "2"); + setModeChoice(playerA, "3"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Wretched Confluence", 1); + assertLife(playerA, 20); + assertLife(playerB, 20); + assertPowerToughness(playerB, "Wall of Air", -1, 3); + assertPowerToughness(playerB, "Pillarfield Ox", 0, 2); + assertGraveyardCount(playerA, "Silvercoat Lion", 0); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/NissaVastwoodSeerTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/NissaVastwoodSeerTest.java index 0ca072667c1..48bd050aeb8 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/NissaVastwoodSeerTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/NissaVastwoodSeerTest.java @@ -1,80 +1,80 @@ -package org.mage.test.cards.planeswalker; - -import mage.constants.CardType; -import mage.constants.PhaseStep; -import mage.constants.SubType; -import mage.constants.Zone; -import mage.filter.Filter; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - - -/** - * - * @author LevelX2 - */ -public class NissaVastwoodSeerTest extends CardTestPlayerBase { - -// https://github.com/magefree/mage/issues/5677 -/* -EDH again, I'm playing Nissa, Vastwood Seer as my commander. -I got her to 7 loyalty, used her -7 to untap lands and make them into creatures. So far so good. -Nissa died, went back to command zone, lands stayed as creatures (as they should). -Next turn I replay Nissa, but the moment I try to cast another spell (or activate an ability, -maybe it was directly on replaying her, can't remember exactly), all my 6 creature lands are back to being regular lands. -A few turns later, my opponent uses overloaded cyclonic rift, which also bounces Nissa to my hand. -Not entirely sure, but I believe it again took at least until priority got passed for my lands to reappear, -maybe even until I tried to activate an ability or cast something. -This was not a 1 time thing either. -After replaying Nissa (again) and casting another card, my creature lands went back to being regular lands again. -Later I used her -2 to kill her, which (after putting another spell on the stack) got me my creature lands back again. - */ - @Test - public void NissaVastwoodSeerAnimationTest() { - setStrictChooseMode(true); - - addCard(Zone.LIBRARY, playerA, "Forest"); - addCard(Zone.BATTLEFIELD, playerA, "Forest", 5); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - - // When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, - // reveal it, put it into your hand, then shuffle your library. - // Whenever a land enters the battlefield under your control, if you control seven or more lands, - // exile Nissa, then return her to the battlefield transformed under her owner's control. - // Nissa, Sage Animist - // +1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand. - // -2: Create a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World. - // -7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands. - addCard(Zone.HAND, playerA, "Nissa, Vastwood Seer"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nissa, Vastwood Seer"); - setChoice(playerA, "Yes"); - addTarget(playerA, "Forest"); - - playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Forest"); - - activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal"); - activateAbility(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal"); - activateAbility(5, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal"); - activateAbility(7, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal"); - activateAbility(9, PhaseStep.POSTCOMBAT_MAIN, playerA, "-7: Untap up to six target"); - addTarget(playerA, "Forest^Forest^Forest^Forest^Forest^Forest"); - setStopAt(9, PhaseStep.END_TURN); - execute(); - - assertPermanentCount(playerA, "Nissa, Vastwood Seer", 0); - assertPermanentCount(playerA, "Nissa, Sage Animist", 0); - assertGraveyardCount(playerA, "Nissa, Vastwood Seer", 1); - - assertPermanentCount(playerA, "Swamp", 1); - - assertType("Forest", CardType.CREATURE, SubType.ELEMENTAL); - assertPermanentCount(playerA, "Forest", 6); - assertPowerToughness(playerA, "Forest", 6, 6, Filter.ComparisonScope.All); - - - - - } - -} +package org.mage.test.cards.planeswalker; + +import mage.constants.CardType; +import mage.constants.PhaseStep; +import mage.constants.SubType; +import mage.constants.Zone; +import mage.filter.Filter; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + + +/** + * + * @author LevelX2 + */ +public class NissaVastwoodSeerTest extends CardTestPlayerBase { + +// https://github.com/magefree/mage/issues/5677 +/* +EDH again, I'm playing Nissa, Vastwood Seer as my commander. +I got her to 7 loyalty, used her -7 to untap lands and make them into creatures. So far so good. +Nissa died, went back to command zone, lands stayed as creatures (as they should). +Next turn I replay Nissa, but the moment I try to cast another spell (or activate an ability, +maybe it was directly on replaying her, can't remember exactly), all my 6 creature lands are back to being regular lands. +A few turns later, my opponent uses overloaded cyclonic rift, which also bounces Nissa to my hand. +Not entirely sure, but I believe it again took at least until priority got passed for my lands to reappear, +maybe even until I tried to activate an ability or cast something. +This was not a 1 time thing either. +After replaying Nissa (again) and casting another card, my creature lands went back to being regular lands again. +Later I used her -2 to kill her, which (after putting another spell on the stack) got me my creature lands back again. + */ + @Test + public void NissaVastwoodSeerAnimationTest() { + setStrictChooseMode(true); + + addCard(Zone.LIBRARY, playerA, "Forest"); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 5); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + + // When Nissa, Vastwood Seer enters the battlefield, you may search your library for a basic Forest card, + // reveal it, put it into your hand, then shuffle your library. + // Whenever a land enters the battlefield under your control, if you control seven or more lands, + // exile Nissa, then return her to the battlefield transformed under her owner's control. + // Nissa, Sage Animist + // +1: Reveal the top card of your library. If it's a land card, put it onto the battlefield. Otherwise, put it into your hand. + // -2: Create a legendary 4/4 green Elemental creature token named Ashaya, the Awoken World. + // -7: Untap up to six target lands. They become 6/6 Elemental creatures. They're still lands. + addCard(Zone.HAND, playerA, "Nissa, Vastwood Seer"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Nissa, Vastwood Seer"); + setChoice(playerA, "Yes"); + addTarget(playerA, "Forest"); + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Forest"); + + activateAbility(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal"); + activateAbility(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal"); + activateAbility(5, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal"); + activateAbility(7, PhaseStep.POSTCOMBAT_MAIN, playerA, "+1: Reveal"); + activateAbility(9, PhaseStep.POSTCOMBAT_MAIN, playerA, "-7: Untap up to six target"); + addTarget(playerA, "Forest^Forest^Forest^Forest^Forest^Forest"); + setStopAt(9, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Nissa, Vastwood Seer", 0); + assertPermanentCount(playerA, "Nissa, Sage Animist", 0); + assertGraveyardCount(playerA, "Nissa, Vastwood Seer", 1); + + assertPermanentCount(playerA, "Swamp", 1); + + assertType("Forest", CardType.CREATURE, SubType.ELEMENTAL); + assertPermanentCount(playerA, "Forest", 6); + assertPowerToughness(playerA, "Forest", 6, 6, Filter.ComparisonScope.All); + + + + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/RalZarekTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/RalZarekTest.java index ac0a180bc16..79e352625df 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/RalZarekTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/RalZarekTest.java @@ -1,42 +1,42 @@ - -package org.mage.test.cards.planeswalker; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.counters.CounterType; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX - */ -public class RalZarekTest extends CardTestPlayerBase { - - @Test - public void testFirstAbility() { - // +1: Tap target permanent, then untap another target permanent. - // -2: Ral Zarek deals 3 damage to any target. - // -7: Flip five coins. Take an extra turn after this one for each coin that comes up heads. - String ralZarek = "Ral Zarek"; // {2}{U}{R} - addCard(Zone.HAND, playerA, ralZarek); - addCard(Zone.BATTLEFIELD, playerA, "Island", 3); - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, ralZarek); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1:", "Silvercoat Lion"); // Ral Zarek +1 - addTarget(playerA, "Mountain"); // Untap the Mountain - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, ralZarek, 1); - assertCounterCount(playerA, ralZarek, CounterType.LOYALTY, 5); - - assertTapped("Mountain", false); - assertTapped("Silvercoat Lion", true); - } -} + +package org.mage.test.cards.planeswalker; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX + */ +public class RalZarekTest extends CardTestPlayerBase { + + @Test + public void testFirstAbility() { + // +1: Tap target permanent, then untap another target permanent. + // -2: Ral Zarek deals 3 damage to any target. + // -7: Flip five coins. Take an extra turn after this one for each coin that comes up heads. + String ralZarek = "Ral Zarek"; // {2}{U}{R} + addCard(Zone.HAND, playerA, ralZarek); + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, ralZarek); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1:", "Silvercoat Lion"); // Ral Zarek +1 + addTarget(playerA, "Mountain"); // Untap the Mountain + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, ralZarek, 1); + assertCounterCount(playerA, ralZarek, CounterType.LOYALTY, 5); + + assertTapped("Mountain", false); + assertTapped("Silvercoat Lion", true); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/VivienTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/VivienTest.java index b8ffd2e2d12..dccf3a7ee10 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/VivienTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/planeswalker/VivienTest.java @@ -1,149 +1,149 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.cards.planeswalker; - -import mage.abilities.keyword.TrampleAbility; -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.counters.CounterType; -import org.junit.Test; -import org.mage.test.player.TestPlayer; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * @author LevelX2 - */ -public class VivienTest extends CardTestPlayerBase { - - @Test - public void testVivienArkbowRangerAbility1NoTargets() { - setStrictChooseMode(true); - // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. - // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. - // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. - addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters - addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); - addTargetAmount(playerA, TestPlayer.TARGET_SKIP); // stop choosing (not targets) - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); - assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); - - } - - @Test - public void testVivienArkbowRangerAbilityOnePossibleTargetWithOne() { - setStrictChooseMode(true); - // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. - // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. - // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. - addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters - addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); - addTargetAmount(playerA, "Silvercoat Lion", 1); - addTargetAmount(playerA, TestPlayer.TARGET_SKIP); // stop choosing (one target) - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); - assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); - - assertPowerToughness(playerB, "Silvercoat Lion", 2 + 1, 2 + 1); - } - - @Test - public void testVivienArkbowRangerAbilityOnePossibleTargetWithTwo() { - setStrictChooseMode(true); - // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. - // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. - // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. - addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters - addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); - addTargetAmount(playerA, "Silvercoat Lion", 2); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); - assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); - - assertPowerToughness(playerB, "Silvercoat Lion", 2 + 2, 2 + 2); - } - - @Test - public void testVivienArkbowRangerAbility1OneOwnPossibleTarget() { - // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. - // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. - // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. - addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters - addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); - addTargetAmount(playerA, "Silvercoat Lion", 2); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); - assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); - - assertPowerToughness(playerA, "Silvercoat Lion", 4, 4); - - } - - @Test - public void testVivienArkbowRangerAbility1TwoOwnPossibleTarget() { - // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. - // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. - // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. - addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters - addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); - addCard(Zone.BATTLEFIELD, playerA, "Pillarfield Ox"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); - addTargetAmount(playerA, "Silvercoat Lion", 1); - addTargetAmount(playerA, "Pillarfield Ox", 1); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); - assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); - - assertPowerToughness(playerA, "Silvercoat Lion", 3, 3); - assertPowerToughness(playerA, "Pillarfield Ox", 3, 5); - assertAbility(playerA, "Silvercoat Lion", TrampleAbility.getInstance(), true); - assertAbility(playerA, "Pillarfield Ox", TrampleAbility.getInstance(), true); - - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.planeswalker; + +import mage.abilities.keyword.TrampleAbility; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.player.TestPlayer; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author LevelX2 + */ +public class VivienTest extends CardTestPlayerBase { + + @Test + public void testVivienArkbowRangerAbility1NoTargets() { + setStrictChooseMode(true); + // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. + // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. + // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. + addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); + addTargetAmount(playerA, TestPlayer.TARGET_SKIP); // stop choosing (not targets) + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); + assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); + + } + + @Test + public void testVivienArkbowRangerAbilityOnePossibleTargetWithOne() { + setStrictChooseMode(true); + // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. + // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. + // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. + addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); + addTargetAmount(playerA, "Silvercoat Lion", 1); + addTargetAmount(playerA, TestPlayer.TARGET_SKIP); // stop choosing (one target) + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); + assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); + + assertPowerToughness(playerB, "Silvercoat Lion", 2 + 1, 2 + 1); + } + + @Test + public void testVivienArkbowRangerAbilityOnePossibleTargetWithTwo() { + setStrictChooseMode(true); + // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. + // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. + // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. + addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); + addTargetAmount(playerA, "Silvercoat Lion", 2); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); + assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); + + assertPowerToughness(playerB, "Silvercoat Lion", 2 + 2, 2 + 2); + } + + @Test + public void testVivienArkbowRangerAbility1OneOwnPossibleTarget() { + // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. + // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. + // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. + addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); + addTargetAmount(playerA, "Silvercoat Lion", 2); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); + assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); + + assertPowerToughness(playerA, "Silvercoat Lion", 4, 4); + + } + + @Test + public void testVivienArkbowRangerAbility1TwoOwnPossibleTarget() { + // +1: Distribute two +1/+1 counters among up to two target creatures. They gain trample until end of turn. + // −3: Target creature you control deals damage equal to its power to target creature or planeswalker. + // −5: You may choose a creature card you own from outside the game, reveal it, and put it into your hand. + addCard(Zone.HAND, playerA, "Vivien, Arkbow Ranger"); // Planeswalker {1}{G}{G}{G} - starts with 4 Loyality counters + addCard(Zone.BATTLEFIELD, playerA, "Forest", 4); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerA, "Pillarfield Ox"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Vivien, Arkbow Ranger"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "+1: Distribute"); + addTargetAmount(playerA, "Silvercoat Lion", 1); + addTargetAmount(playerA, "Pillarfield Ox", 1); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Vivien, Arkbow Ranger", 1); + assertCounterCount("Vivien, Arkbow Ranger", CounterType.LOYALTY, 5); + + assertPowerToughness(playerA, "Silvercoat Lion", 3, 3); + assertPowerToughness(playerA, "Pillarfield Ox", 3, 5); + assertAbility(playerA, "Silvercoat Lion", TrampleAbility.getInstance(), true); + assertAbility(playerA, "Pillarfield Ox", TrampleAbility.getInstance(), true); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DamageEffectsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DamageEffectsTest.java index ea2975c8af0..d6a9b1226f0 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DamageEffectsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/DamageEffectsTest.java @@ -1,118 +1,118 @@ - -package org.mage.test.cards.replacement; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Ignore; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class DamageEffectsTest extends CardTestPlayerBase { - - /** - * Just encountered another bug. With Wurmcoil Engine out and with a - * Gratuitous Violence on the field, I only gained 6 life on blocking rather - * than 12 life. - */ - @Test - public void testDamageIsDoubledWithLifelink() { - // Landfall - Whenever a land enters the battlefield under your control, you may have target player lose 3 life. - // If you do, put three +1/+1 counters on Ob Nixilis, the Fallen. - addCard(Zone.BATTLEFIELD, playerB, "Ob Nixilis, the Fallen"); - addCard(Zone.HAND, playerB, "Mountain"); - - // Deathtouch, lifelink - // When Wurmcoil Engine dies, create a 3/3 colorless Wurm artifact creature token with deathtouch and a 3/3 colorless Wurm artifact creature token with lifelink. - addCard(Zone.BATTLEFIELD, playerA, "Wurmcoil Engine"); - // If a creature you control would deal damage to a creature or player, it deals double that damage to that creature or player instead. - addCard(Zone.BATTLEFIELD, playerA, "Gratuitous Violence"); - - playLand(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Mountain"); - setChoice(playerB, "Yes"); - addTarget(playerB, playerA); - - attack(2, playerB, "Ob Nixilis, the Fallen"); - block(2, playerA, "Wurmcoil Engine", "Ob Nixilis, the Fallen"); - - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertGraveyardCount(playerB, "Ob Nixilis, the Fallen", 1); - - assertGraveyardCount(playerA, "Wurmcoil Engine", 1); - assertPermanentCount(playerA, "Wurm", 2); - - assertLife(playerB, 20); - assertLife(playerA, 29); // -2 from Ob Nixilis + 12 from double damage with lifelink from Wurmcoil Engine - - } - - @Test - public void testDamageToPlayer() { - // Deathtouch, lifelink - // When Wurmcoil Engine dies, create a 3/3 colorless Wurm artifact creature token with deathtouch and a 3/3 colorless Wurm artifact creature token with lifelink. - addCard(Zone.BATTLEFIELD, playerA, "Wurmcoil Engine"); - // If a creature you control would deal damage to a creature or player, it deals double that damage to that creature or player instead. - addCard(Zone.BATTLEFIELD, playerA, "Gratuitous Violence"); - - attack(1, playerA, "Wurmcoil Engine"); - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertPermanentCount(playerA, "Wurmcoil Engine", 1); - - assertLife(playerB, 8); - assertLife(playerA, 32); - - } - - @Ignore - @Test - public void vexingDevilFurnaceRathRedirectToPlaneswalker() { - - /* - Vexing Devil {R} - Creature — Devil - When Vexing Devil enters the battlefield, any opponent may have it deal 4 damage to them. If a player does, sacrifice Vexing Devil. - */ - String vDevil = "Vexing Devil"; - - /* - Nissa, Worldwaker {3}{G}{G} - Planeswalker — Nissa - +1: Target land you control becomes a 4/4 Elemental creature with trample. It's still a land. - +1: Untap up to four target Forests. - −7: Search your library for any number of basic land cards, put them onto the battlefield, then shuffle your library. Those lands become 4/4 Elemental creatures with trample. They're still lands. - */ - String nissa = "Nissa, Worldwaker"; - - /* - Furnace of Rath {1}{R}{R}{R} - Enchantment - If a source would deal damage to a creature or player, it deals double that damage to that creature or player instead. - */ - addCard(Zone.BATTLEFIELD, playerB, "Furnace of Rath"); - addCard(Zone.HAND, playerB, vDevil); - addCard(Zone.HAND, playerA, nissa); - addCard(Zone.BATTLEFIELD, playerA, "Forest", 5); - addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, nissa); - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, vDevil); - setChoice(playerA, "Yes"); // deal 8 damage to playerA and sac vexing devil (8 due to furnace) - setChoice(playerB, "Yes"); // redirect to planeswalker - addTarget(playerB, nissa); - - setStopAt(2, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerB, vDevil, 1); - assertLife(playerA, 20); - assertGraveyardCount(playerA, nissa, 1); - } -} + +package org.mage.test.cards.replacement; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class DamageEffectsTest extends CardTestPlayerBase { + + /** + * Just encountered another bug. With Wurmcoil Engine out and with a + * Gratuitous Violence on the field, I only gained 6 life on blocking rather + * than 12 life. + */ + @Test + public void testDamageIsDoubledWithLifelink() { + // Landfall - Whenever a land enters the battlefield under your control, you may have target player lose 3 life. + // If you do, put three +1/+1 counters on Ob Nixilis, the Fallen. + addCard(Zone.BATTLEFIELD, playerB, "Ob Nixilis, the Fallen"); + addCard(Zone.HAND, playerB, "Mountain"); + + // Deathtouch, lifelink + // When Wurmcoil Engine dies, create a 3/3 colorless Wurm artifact creature token with deathtouch and a 3/3 colorless Wurm artifact creature token with lifelink. + addCard(Zone.BATTLEFIELD, playerA, "Wurmcoil Engine"); + // If a creature you control would deal damage to a creature or player, it deals double that damage to that creature or player instead. + addCard(Zone.BATTLEFIELD, playerA, "Gratuitous Violence"); + + playLand(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Mountain"); + setChoice(playerB, "Yes"); + addTarget(playerB, playerA); + + attack(2, playerB, "Ob Nixilis, the Fallen"); + block(2, playerA, "Wurmcoil Engine", "Ob Nixilis, the Fallen"); + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerB, "Ob Nixilis, the Fallen", 1); + + assertGraveyardCount(playerA, "Wurmcoil Engine", 1); + assertPermanentCount(playerA, "Wurm", 2); + + assertLife(playerB, 20); + assertLife(playerA, 29); // -2 from Ob Nixilis + 12 from double damage with lifelink from Wurmcoil Engine + + } + + @Test + public void testDamageToPlayer() { + // Deathtouch, lifelink + // When Wurmcoil Engine dies, create a 3/3 colorless Wurm artifact creature token with deathtouch and a 3/3 colorless Wurm artifact creature token with lifelink. + addCard(Zone.BATTLEFIELD, playerA, "Wurmcoil Engine"); + // If a creature you control would deal damage to a creature or player, it deals double that damage to that creature or player instead. + addCard(Zone.BATTLEFIELD, playerA, "Gratuitous Violence"); + + attack(1, playerA, "Wurmcoil Engine"); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Wurmcoil Engine", 1); + + assertLife(playerB, 8); + assertLife(playerA, 32); + + } + + @Ignore + @Test + public void vexingDevilFurnaceRathRedirectToPlaneswalker() { + + /* + Vexing Devil {R} + Creature — Devil + When Vexing Devil enters the battlefield, any opponent may have it deal 4 damage to them. If a player does, sacrifice Vexing Devil. + */ + String vDevil = "Vexing Devil"; + + /* + Nissa, Worldwaker {3}{G}{G} + Planeswalker — Nissa + +1: Target land you control becomes a 4/4 Elemental creature with trample. It's still a land. + +1: Untap up to four target Forests. + −7: Search your library for any number of basic land cards, put them onto the battlefield, then shuffle your library. Those lands become 4/4 Elemental creatures with trample. They're still lands. + */ + String nissa = "Nissa, Worldwaker"; + + /* + Furnace of Rath {1}{R}{R}{R} + Enchantment + If a source would deal damage to a creature or player, it deals double that damage to that creature or player instead. + */ + addCard(Zone.BATTLEFIELD, playerB, "Furnace of Rath"); + addCard(Zone.HAND, playerB, vDevil); + addCard(Zone.HAND, playerA, nissa); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 5); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, nissa); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, vDevil); + setChoice(playerA, "Yes"); // deal 8 damage to playerA and sac vexing devil (8 due to furnace) + setChoice(playerB, "Yes"); // redirect to planeswalker + addTarget(playerB, nissa); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, vDevil, 1); + assertLife(playerA, 20); + assertGraveyardCount(playerA, nissa, 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/ManaReflectionTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/ManaReflectionTest.java index f947ba0afde..a6175983615 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/ManaReflectionTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/ManaReflectionTest.java @@ -1,57 +1,57 @@ -package org.mage.test.cards.replacement; - -import mage.constants.ManaType; -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.counters.CounterType; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -public class ManaReflectionTest extends CardTestPlayerBase { - - @Test - public void generatesCorrectManaFromMarwyn() { - addCard(Zone.BATTLEFIELD, playerA, "Mana Reflection"); - addCard(Zone.BATTLEFIELD, playerA, "Marwyn, the Nurturer"); - addCard(Zone.BATTLEFIELD, playerA, "Upwelling"); // Prevent mana from emptying before we can check it - - addCounters(1, PhaseStep.UPKEEP, playerA, "Marwyn, the Nurturer", CounterType.P1P1, 2); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add"); - - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertPowerToughness(playerA, "Marwyn, the Nurturer", 3, 3); - assertManaPool(playerA, ManaType.GREEN, 6); - } - - @Test - public void generatesCorrectManaFromGemstoneCaverns() { - addCard(Zone.BATTLEFIELD, playerA, "Mana Reflection"); - addCard(Zone.BATTLEFIELD, playerA, "Gemstone Caverns"); - addCard(Zone.BATTLEFIELD, playerA, "Upwelling"); // Prevent mana from emptying before we can check it - - addCounters(1, PhaseStep.UPKEEP, playerA, "Gemstone Caverns", CounterType.LUCK, 1); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add"); - setChoice(playerA, "Green"); - - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertManaPool(playerA, ManaType.GREEN, 2); - } - - @Test - public void generatesCorrectManaFromLlanowarElves() { - addCard(Zone.BATTLEFIELD, playerA, "Mana Reflection"); - addCard(Zone.BATTLEFIELD, playerA, "Llanowar Elves"); - addCard(Zone.BATTLEFIELD, playerA, "Upwelling"); // Prevent mana from emptying before we can check it - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add"); - - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertManaPool(playerA, ManaType.GREEN, 2); - } -} +package org.mage.test.cards.replacement; + +import mage.constants.ManaType; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +public class ManaReflectionTest extends CardTestPlayerBase { + + @Test + public void generatesCorrectManaFromMarwyn() { + addCard(Zone.BATTLEFIELD, playerA, "Mana Reflection"); + addCard(Zone.BATTLEFIELD, playerA, "Marwyn, the Nurturer"); + addCard(Zone.BATTLEFIELD, playerA, "Upwelling"); // Prevent mana from emptying before we can check it + + addCounters(1, PhaseStep.UPKEEP, playerA, "Marwyn, the Nurturer", CounterType.P1P1, 2); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add"); + + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertPowerToughness(playerA, "Marwyn, the Nurturer", 3, 3); + assertManaPool(playerA, ManaType.GREEN, 6); + } + + @Test + public void generatesCorrectManaFromGemstoneCaverns() { + addCard(Zone.BATTLEFIELD, playerA, "Mana Reflection"); + addCard(Zone.BATTLEFIELD, playerA, "Gemstone Caverns"); + addCard(Zone.BATTLEFIELD, playerA, "Upwelling"); // Prevent mana from emptying before we can check it + + addCounters(1, PhaseStep.UPKEEP, playerA, "Gemstone Caverns", CounterType.LUCK, 1); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add"); + setChoice(playerA, "Green"); + + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertManaPool(playerA, ManaType.GREEN, 2); + } + + @Test + public void generatesCorrectManaFromLlanowarElves() { + addCard(Zone.BATTLEFIELD, playerA, "Mana Reflection"); + addCard(Zone.BATTLEFIELD, playerA, "Llanowar Elves"); + addCard(Zone.BATTLEFIELD, playerA, "Upwelling"); // Prevent mana from emptying before we can check it + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add"); + + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertManaPool(playerA, ManaType.GREEN, 2); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/PanharmoniconTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/PanharmoniconTest.java index 33fd49746a4..8d36c92cf4c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/PanharmoniconTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/PanharmoniconTest.java @@ -1,103 +1,103 @@ - -package org.mage.test.cards.replacement; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class PanharmoniconTest extends CardTestPlayerBase { - - /** - * Check that Panharmonicon adds EtB triggers correctly. - * - */ - @Test - public void testAddsTrigger() { - // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. - addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - // Whenever another creature enters the battlefield, you gain 1 life. - addCard(Zone.HAND, playerA, "Soul Warden"); - // When Devout Monk enters the battlefield, you gain 1 life. - addCard(Zone.HAND, playerA, "Devout Monk"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Warden"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Devout Monk"); // Life: 20 + 2*1 + 2*1 = 24 - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertLife(playerA, 24); - } - - /** - * Check that Panharmonicon doesn't add to opponents' triggers. - * - */ - @Test - public void testDoesntAddOpponentsTriggers() { - // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. - addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); - addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); - // Whenever another creature enters the battlefield, you gain 1 life. - addCard(Zone.HAND, playerB, "Soul Warden"); - // When Devout Monk enters the battlefield, you gain 1 life. - addCard(Zone.HAND, playerB, "Devout Monk"); - - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Soul Warden"); - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Devout Monk"); // Life: 20 + 1 + 1 = 22 - - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertLife(playerB, 22); - } - - /** - * Check that Panharmonicon doesn't add to lands triggers. - * - */ - @Test - public void testDoesntAddLandsTriggers() { - // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. - addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); - // When Radiant Fountain enters the battlefield, you gain 2 life. - addCard(Zone.HAND, playerA, "Radiant Fountain"); - - playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Radiant Fountain"); // Life: 20 + 2 = 22 - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertLife(playerA, 22); - } - - /** - * Check that Panharmonicon doesn't add to non-permanents triggers. - * - */ - @Test - public void testDoesntAddNonPermanentsTriggers() { - // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. - addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); - // When a Dragon enters the battlefield, you may return Bladewing's Thrall from your graveyard to the battlefield. - addCard(Zone.GRAVEYARD, playerA, "Bladewing's Thrall"); - // A 4/4 vanilla dragon - addCard(Zone.HAND, playerA, "Scion of Ugin"); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scion of Ugin"); - setChoice(playerA, "No"); // Return Bladewing's Thrall from your graveyard to the battlefield? - setChoice(playerA, "Yes"); // Should not get run since there is only one trigger. - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertGraveyardCount(playerA, "Bladewing's Thrall", 1); - } -} + +package org.mage.test.cards.replacement; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class PanharmoniconTest extends CardTestPlayerBase { + + /** + * Check that Panharmonicon adds EtB triggers correctly. + * + */ + @Test + public void testAddsTrigger() { + // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. + addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + // Whenever another creature enters the battlefield, you gain 1 life. + addCard(Zone.HAND, playerA, "Soul Warden"); + // When Devout Monk enters the battlefield, you gain 1 life. + addCard(Zone.HAND, playerA, "Devout Monk"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Soul Warden"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Devout Monk"); // Life: 20 + 2*1 + 2*1 = 24 + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 24); + } + + /** + * Check that Panharmonicon doesn't add to opponents' triggers. + * + */ + @Test + public void testDoesntAddOpponentsTriggers() { + // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. + addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + // Whenever another creature enters the battlefield, you gain 1 life. + addCard(Zone.HAND, playerB, "Soul Warden"); + // When Devout Monk enters the battlefield, you gain 1 life. + addCard(Zone.HAND, playerB, "Devout Monk"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Soul Warden"); + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Devout Monk"); // Life: 20 + 1 + 1 = 22 + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerB, 22); + } + + /** + * Check that Panharmonicon doesn't add to lands triggers. + * + */ + @Test + public void testDoesntAddLandsTriggers() { + // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. + addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); + // When Radiant Fountain enters the battlefield, you gain 2 life. + addCard(Zone.HAND, playerA, "Radiant Fountain"); + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Radiant Fountain"); // Life: 20 + 2 = 22 + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 22); + } + + /** + * Check that Panharmonicon doesn't add to non-permanents triggers. + * + */ + @Test + public void testDoesntAddNonPermanentsTriggers() { + // If an artifact or creature entering the battlefield causes a triggered ability of a permanent you control to trigger, that ability triggers an additional time. + addCard(Zone.BATTLEFIELD, playerA, "Panharmonicon"); + // When a Dragon enters the battlefield, you may return Bladewing's Thrall from your graveyard to the battlefield. + addCard(Zone.GRAVEYARD, playerA, "Bladewing's Thrall"); + // A 4/4 vanilla dragon + addCard(Zone.HAND, playerA, "Scion of Ugin"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scion of Ugin"); + setChoice(playerA, "No"); // Return Bladewing's Thrall from your graveyard to the battlefield? + setChoice(playerA, "Yes"); // Should not get run since there is only one trigger. + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerA, "Bladewing's Thrall", 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/ScorchingLavaTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/ScorchingLavaTest.java index 76aee236c99..3a5e909e702 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/ScorchingLavaTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/ScorchingLavaTest.java @@ -1,37 +1,37 @@ - -package org.mage.test.cards.replacement; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class ScorchingLavaTest extends CardTestPlayerBase { - - /** - * Tests that spells don't work for opponents but still work for controller - */ - @Test - public void testTargetGetExiled() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); - // Kicker {R} - // Scorching Lava deals 2 damage to any target. If Scorching Lava was kicked, that creature can't be regenerated this turn and if it would die this turn, exile it instead. - addCard(Zone.HAND, playerA, "Scorching Lava"); // Instant {1}{R} - - addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scorching Lava", "Silvercoat Lion"); - setChoice(playerA, "Yes"); // with Kicker - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Scorching Lava", 1); - assertExileCount(playerB, "Silvercoat Lion", 1); - } - -} + +package org.mage.test.cards.replacement; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class ScorchingLavaTest extends CardTestPlayerBase { + + /** + * Tests that spells don't work for opponents but still work for controller + */ + @Test + public void testTargetGetExiled() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + // Kicker {R} + // Scorching Lava deals 2 damage to any target. If Scorching Lava was kicked, that creature can't be regenerated this turn and if it would die this turn, exile it instead. + addCard(Zone.HAND, playerA, "Scorching Lava"); // Instant {1}{R} + + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Scorching Lava", "Silvercoat Lion"); + setChoice(playerA, "Yes"); // with Kicker + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Scorching Lava", 1); + assertExileCount(playerB, "Silvercoat Lion", 1); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/EntersTheBattlefieldTappedTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/EntersTheBattlefieldTappedTest.java index ddd643e27f7..d74cabb6d8d 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/EntersTheBattlefieldTappedTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/EntersTheBattlefieldTappedTest.java @@ -1,66 +1,66 @@ -package org.mage.test.cards.replacement.entersBattlefield; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class EntersTheBattlefieldTappedTest extends CardTestPlayerBase { - - /** - * Creatures that enter the battlefield tapped, like Dread Wanderer, if you - * bring them back from graveyard to the battlefield they enter untapped!! - */ - @Test - public void testTappedFromHand() { - - // Dread Wanderer enters the battlefield tapped. - // {2}{B}: Return Dread Wanderer from your graveyard to the battlefield. - // Activate this ability only any time you could cast a sorcery and only if you have one or fewer cards in hand. - addCard(Zone.HAND, playerA, "Dread Wanderer"); // Creature {B} - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dread Wanderer"); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Dread Wanderer", 1); - assertTapped("Dread Wanderer", true); - } - - @Test - public void testTappedFromGraveyard() { - - // Dread Wanderer enters the battlefield tapped. - // {2}{B}: Return Dread Wanderer from your graveyard to the battlefield. - // Activate this ability only any time you could cast a sorcery and only if you have one or fewer cards in hand. - addCard(Zone.GRAVEYARD, playerA, "Dread Wanderer"); // Creature {B} - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{B}: Return "); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Dread Wanderer", 1); - assertTapped("Dread Wanderer", true); - } - - @Test - public void testScryLandEntersTapped() { - // Temple of Enlightenment enters the battlefield tapped. - // When Temple of Enlightenment enters the battlefield, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.) - addCard(Zone.HAND, playerA, "Temple of Enlightenment"); // Land - - playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Temple of Enlightenment"); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Temple of Enlightenment", 1); - assertTapped("Temple of Enlightenment", true); - } - -} +package org.mage.test.cards.replacement.entersBattlefield; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class EntersTheBattlefieldTappedTest extends CardTestPlayerBase { + + /** + * Creatures that enter the battlefield tapped, like Dread Wanderer, if you + * bring them back from graveyard to the battlefield they enter untapped!! + */ + @Test + public void testTappedFromHand() { + + // Dread Wanderer enters the battlefield tapped. + // {2}{B}: Return Dread Wanderer from your graveyard to the battlefield. + // Activate this ability only any time you could cast a sorcery and only if you have one or fewer cards in hand. + addCard(Zone.HAND, playerA, "Dread Wanderer"); // Creature {B} + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dread Wanderer"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Dread Wanderer", 1); + assertTapped("Dread Wanderer", true); + } + + @Test + public void testTappedFromGraveyard() { + + // Dread Wanderer enters the battlefield tapped. + // {2}{B}: Return Dread Wanderer from your graveyard to the battlefield. + // Activate this ability only any time you could cast a sorcery and only if you have one or fewer cards in hand. + addCard(Zone.GRAVEYARD, playerA, "Dread Wanderer"); // Creature {B} + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{2}{B}: Return "); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Dread Wanderer", 1); + assertTapped("Dread Wanderer", true); + } + + @Test + public void testScryLandEntersTapped() { + // Temple of Enlightenment enters the battlefield tapped. + // When Temple of Enlightenment enters the battlefield, scry 1. (Look at the top card of your library. You may put that card on the bottom of your library.) + addCard(Zone.HAND, playerA, "Temple of Enlightenment"); // Land + + playLand(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Temple of Enlightenment"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Temple of Enlightenment", 1); + assertTapped("Temple of Enlightenment", true); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/HardenedScaleTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/HardenedScaleTest.java index f58d501a836..1a98c55f13e 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/HardenedScaleTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/HardenedScaleTest.java @@ -1,116 +1,116 @@ - -package org.mage.test.cards.replacement.entersBattlefield; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.counters.CounterType; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class HardenedScaleTest extends CardTestPlayerBase { - - /* - Reported bug: Hangarback interaciton with Hardened Scales and Metallic Mimic on board is incorrect. - */ - @Test - public void hangarBackHardenedScalesMetallicMimicTest() { - - /* - Hangarback Walker {X}{X} - Artifact Creature — Construct 0/0 - Hangarback Walker enters the battlefield with X +1/+1 counters on it. - When Hangarback Walker dies, create a 1/1 colorless Thopter artifact creature token with flying for each +1/+1 counter on Hangarback Walker. - {1}, {T}: Put a +1/+1 counter on Hangarback Walker. - */ - String hWalker = "Hangarback Walker"; - - /* - Hardened Scales {G} - Enchantment - If one or more +1/+1 counters would be placed on a creature you control, that many plus one +1/+1 counters are placed on it instead. - */ - String hScales = "Hardened Scales"; - - /* - Metallic Mimic {2} - Artifact Creature — Shapeshifter 2/1 - As Metallic Mimic enters the battlefield, choose a creature type. - Metallic Mimic is the chosen type in addition to its other types. - Each other creature you control of the chosen type enters the battlefield with an additional +1/+1 counter on it. - */ - String mMimic = "Metallic Mimic"; - - addCard(Zone.BATTLEFIELD, playerA, hScales); - addCard(Zone.HAND, playerA, mMimic); - addCard(Zone.HAND, playerA, hWalker); - addCard(Zone.BATTLEFIELD, playerA, "Wastes", 4); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, mMimic); - setChoice(playerA, "Construct"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, hWalker); - setChoice(playerA, "X=1"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, mMimic, 1); - assertPermanentCount(playerA, hWalker, 1); - assertCounterCount(playerA, hWalker, CounterType.P1P1, 3); - assertPowerToughness(playerA, hWalker, 3, 3); - } - - @Test - public void testWithVigorMortis() { - - /* - Vigor Mortis {2}{B}{B} - Sorcery - Return target creature card from your graveyard to the battlefield. If {G} was spent to cast Vigor Mortis, - that creature enters the battlefield with an additional +1/+1 counter on it. - */ - String vMortis = "Vigor Mortis"; - - /* - Hardened Scales {G} - Enchantment - If one or more +1/+1 counters would be placed on a creature you control, that many plus one +1/+1 counters are placed on it instead. - */ - String hScales = "Hardened Scales"; - - /* - Metallic Mimic {2} - Artifact Creature — Shapeshifter 2/1 - As Metallic Mimic enters the battlefield, choose a creature type. - Metallic Mimic is the chosen type in addition to its other types. - Each other creature you control of the chosen type enters the battlefield with an additional +1/+1 counter on it. - */ - String mMimic = "Metallic Mimic"; - - addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); - addCard(Zone.BATTLEFIELD, playerA, hScales); - addCard(Zone.HAND, playerA, mMimic); - addCard(Zone.HAND, playerA, vMortis); - addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, mMimic); - setChoice(playerA, "Cat"); - - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, vMortis, "Silvercoat Lion"); - - setStopAt(3, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, mMimic, 1); - - assertPermanentCount(playerA, "Silvercoat Lion", 1); - assertCounterCount(playerA, "Silvercoat Lion", CounterType.P1P1, 3); - assertPowerToughness(playerA, "Silvercoat Lion", 5, 5); // Hardened Scales is only once applied to EntersTheBattlefield event - assertGraveyardCount(playerA, vMortis, 1); - } -} + +package org.mage.test.cards.replacement.entersBattlefield; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class HardenedScaleTest extends CardTestPlayerBase { + + /* + Reported bug: Hangarback interaciton with Hardened Scales and Metallic Mimic on board is incorrect. + */ + @Test + public void hangarBackHardenedScalesMetallicMimicTest() { + + /* + Hangarback Walker {X}{X} + Artifact Creature — Construct 0/0 + Hangarback Walker enters the battlefield with X +1/+1 counters on it. + When Hangarback Walker dies, create a 1/1 colorless Thopter artifact creature token with flying for each +1/+1 counter on Hangarback Walker. + {1}, {T}: Put a +1/+1 counter on Hangarback Walker. + */ + String hWalker = "Hangarback Walker"; + + /* + Hardened Scales {G} + Enchantment + If one or more +1/+1 counters would be placed on a creature you control, that many plus one +1/+1 counters are placed on it instead. + */ + String hScales = "Hardened Scales"; + + /* + Metallic Mimic {2} + Artifact Creature — Shapeshifter 2/1 + As Metallic Mimic enters the battlefield, choose a creature type. + Metallic Mimic is the chosen type in addition to its other types. + Each other creature you control of the chosen type enters the battlefield with an additional +1/+1 counter on it. + */ + String mMimic = "Metallic Mimic"; + + addCard(Zone.BATTLEFIELD, playerA, hScales); + addCard(Zone.HAND, playerA, mMimic); + addCard(Zone.HAND, playerA, hWalker); + addCard(Zone.BATTLEFIELD, playerA, "Wastes", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, mMimic); + setChoice(playerA, "Construct"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, hWalker); + setChoice(playerA, "X=1"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, mMimic, 1); + assertPermanentCount(playerA, hWalker, 1); + assertCounterCount(playerA, hWalker, CounterType.P1P1, 3); + assertPowerToughness(playerA, hWalker, 3, 3); + } + + @Test + public void testWithVigorMortis() { + + /* + Vigor Mortis {2}{B}{B} + Sorcery + Return target creature card from your graveyard to the battlefield. If {G} was spent to cast Vigor Mortis, + that creature enters the battlefield with an additional +1/+1 counter on it. + */ + String vMortis = "Vigor Mortis"; + + /* + Hardened Scales {G} + Enchantment + If one or more +1/+1 counters would be placed on a creature you control, that many plus one +1/+1 counters are placed on it instead. + */ + String hScales = "Hardened Scales"; + + /* + Metallic Mimic {2} + Artifact Creature — Shapeshifter 2/1 + As Metallic Mimic enters the battlefield, choose a creature type. + Metallic Mimic is the chosen type in addition to its other types. + Each other creature you control of the chosen type enters the battlefield with an additional +1/+1 counter on it. + */ + String mMimic = "Metallic Mimic"; + + addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerA, hScales); + addCard(Zone.HAND, playerA, mMimic); + addCard(Zone.HAND, playerA, vMortis); + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, mMimic); + setChoice(playerA, "Cat"); + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, vMortis, "Silvercoat Lion"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, mMimic, 1); + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertCounterCount(playerA, "Silvercoat Lion", CounterType.P1P1, 3); + assertPowerToughness(playerA, "Silvercoat Lion", 5, 5); // Hardened Scales is only once applied to EntersTheBattlefield event + assertGraveyardCount(playerA, vMortis, 1); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/UnbreathingHordeTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/UnbreathingHordeTest.java index f2e551db8f2..5bdeebda90a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/UnbreathingHordeTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/entersBattlefield/UnbreathingHordeTest.java @@ -1,39 +1,39 @@ - -package org.mage.test.cards.replacement.entersBattlefield; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class UnbreathingHordeTest extends CardTestPlayerBase { - - /** - * That the +1/+1 counters are added to Living Lore before state based - * actions take place - */ - @Test - public void testCountersAdded() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); - // Unbreathing Horde enters the battlefield with a +1/+1 counter on it for each other Zombie you control and each Zombie card in your graveyard. - // If Unbreathing Horde would be dealt damage, prevent that damage and remove a +1/+1 counter from it. - addCard(Zone.HAND, playerA, "Unbreathing Horde"); //{2}{B} - 0/0 - - addCard(Zone.BATTLEFIELD, playerA, "Dross Crocodile", 2); - addCard(Zone.BATTLEFIELD, playerB, "Dross Crocodile", 2); - addCard(Zone.GRAVEYARD, playerA, "Dross Crocodile", 2); - addCard(Zone.GRAVEYARD, playerB, "Dross Crocodile", 2); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Unbreathing Horde"); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Unbreathing Horde", 1); - assertPowerToughness(playerA, "Unbreathing Horde", 4, 4); - } - -} + +package org.mage.test.cards.replacement.entersBattlefield; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class UnbreathingHordeTest extends CardTestPlayerBase { + + /** + * That the +1/+1 counters are added to Living Lore before state based + * actions take place + */ + @Test + public void testCountersAdded() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); + // Unbreathing Horde enters the battlefield with a +1/+1 counter on it for each other Zombie you control and each Zombie card in your graveyard. + // If Unbreathing Horde would be dealt damage, prevent that damage and remove a +1/+1 counter from it. + addCard(Zone.HAND, playerA, "Unbreathing Horde"); //{2}{B} - 0/0 + + addCard(Zone.BATTLEFIELD, playerA, "Dross Crocodile", 2); + addCard(Zone.BATTLEFIELD, playerB, "Dross Crocodile", 2); + addCard(Zone.GRAVEYARD, playerA, "Dross Crocodile", 2); + addCard(Zone.GRAVEYARD, playerB, "Dross Crocodile", 2); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Unbreathing Horde"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Unbreathing Horde", 1); + assertPowerToughness(playerA, "Unbreathing Horde", 4, 4); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java index 63410e6417d..c7e67c0c05a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/redirect/PalisadeGiantTest.java @@ -1,60 +1,60 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.cards.replacement.redirect; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.game.permanent.Permanent; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class PalisadeGiantTest extends CardTestPlayerBase { - - /** - * when you have two Palisade Giants in play and your opponent deals you - * damage, the damage is applied to both of them rather than allowing you to - * choose which replacement effect applies (as it should). I experienced - * this multiple times in games vs the A.I. - */ - @Test - public void testRedirectDamage() { - - // All damage that would be dealt to you or another permanent you control is dealt to Palisade Giant instead. - addCard(Zone.BATTLEFIELD, playerA, "Palisade Giant", 2); // Creature 2/7 - - addCard(Zone.HAND, playerB, "Lightning Bolt"); // Instant {R} - addCard(Zone.BATTLEFIELD, playerB, "Mountain"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", playerA); - - setChoice(playerA, "Palisade Giant"); - - setStrictChooseMode(true); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - assertAllCommandsUsed(); - - assertGraveyardCount(playerB, "Lightning Bolt", 1); - - assertLife(playerA, 20); - assertLife(playerB, 20); - - int damage = 0; - for (Permanent permanent : currentGame.getBattlefield().getAllActivePermanents(playerA.getId())) { - if (permanent.getName().equals("Palisade Giant")) { - damage += permanent.getDamage(); - } - } - Assert.assertEquals("Only 3 damage in sum should be dealt to the Palisade Giants", 3, damage); - - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.replacement.redirect; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class PalisadeGiantTest extends CardTestPlayerBase { + + /** + * when you have two Palisade Giants in play and your opponent deals you + * damage, the damage is applied to both of them rather than allowing you to + * choose which replacement effect applies (as it should). I experienced + * this multiple times in games vs the A.I. + */ + @Test + public void testRedirectDamage() { + + // All damage that would be dealt to you or another permanent you control is dealt to Palisade Giant instead. + addCard(Zone.BATTLEFIELD, playerA, "Palisade Giant", 2); // Creature 2/7 + + addCard(Zone.HAND, playerB, "Lightning Bolt"); // Instant {R} + addCard(Zone.BATTLEFIELD, playerB, "Mountain"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Lightning Bolt", playerA); + + setChoice(playerA, "Palisade Giant"); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + assertAllCommandsUsed(); + + assertGraveyardCount(playerB, "Lightning Bolt", 1); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + int damage = 0; + for (Permanent permanent : currentGame.getBattlefield().getAllActivePermanents(playerA.getId())) { + if (permanent.getName().equals("Palisade Giant")) { + damage += permanent.getDamage(); + } + } + Assert.assertEquals("Only 3 damage in sum should be dealt to the Palisade Giants", 3, damage); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/restriction/CantUseActivatedAbilitiesTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/restriction/CantUseActivatedAbilitiesTest.java index f5bc8b2eff8..456d12c8111 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/restriction/CantUseActivatedAbilitiesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/restriction/CantUseActivatedAbilitiesTest.java @@ -1,57 +1,57 @@ -package org.mage.test.cards.restriction; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ - -public class CantUseActivatedAbilitiesTest extends CardTestPlayerBase { - - /** - * I can activate artifacts despite my opponent having Collector Ouphe or - * Karn, the Great Creator in play. The artifact says it can't be activated, but that's a lie. - */ - @Test - public void testCantActivateManaAbility() { - // Activated abilities of artifacts can't be activated. - addCard(Zone.HAND, playerA, "Collector Ouphe"); // Creature {1}{G} 2/2 - addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); - // {T}: Add {C}{C} - addCard(Zone.BATTLEFIELD, playerB, "Sol Ring"); // Artifact - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collector Ouphe"); - - setStopAt(1, PhaseStep.END_COMBAT); - setStrictChooseMode(true); - execute(); - assertAllCommandsUsed(); - - // Sol Ring can't produce mana - Assert.assertTrue("PlayerB may not be able to produce any mana but he he can produce " + playerB.getManaAvailable(currentGame).toString(), playerB.getManaAvailable(currentGame).toString().equals("[]")); - } - - @Test - public void testCantActivateActivatedAbility() { - // Activated abilities of artifacts can't be activated. - addCard(Zone.BATTLEFIELD, playerA, "Collector Ouphe"); // Creature {1}{G} 2/2 - - // {1}: Adarkar Sentinel gets +0/+1 until end of turn. - addCard(Zone.BATTLEFIELD, playerB, "Adarkar Sentinel"); // Artifact Creature — Soldier (3/3) - addCard(Zone.BATTLEFIELD, playerB, "Island"); - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}: "); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - - execute(); - - assertPowerToughness(playerB, "Adarkar Sentinel", 3, 3); - - } -} +package org.mage.test.cards.restriction; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class CantUseActivatedAbilitiesTest extends CardTestPlayerBase { + + /** + * I can activate artifacts despite my opponent having Collector Ouphe or + * Karn, the Great Creator in play. The artifact says it can't be activated, but that's a lie. + */ + @Test + public void testCantActivateManaAbility() { + // Activated abilities of artifacts can't be activated. + addCard(Zone.HAND, playerA, "Collector Ouphe"); // Creature {1}{G} 2/2 + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + // {T}: Add {C}{C} + addCard(Zone.BATTLEFIELD, playerB, "Sol Ring"); // Artifact + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Collector Ouphe"); + + setStopAt(1, PhaseStep.END_COMBAT); + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + // Sol Ring can't produce mana + Assert.assertTrue("PlayerB may not be able to produce any mana but he he can produce " + playerB.getManaAvailable(currentGame).toString(), playerB.getManaAvailable(currentGame).toString().equals("[]")); + } + + @Test + public void testCantActivateActivatedAbility() { + // Activated abilities of artifacts can't be activated. + addCard(Zone.BATTLEFIELD, playerA, "Collector Ouphe"); // Creature {1}{G} 2/2 + + // {1}: Adarkar Sentinel gets +0/+1 until end of turn. + addCard(Zone.BATTLEFIELD, playerB, "Adarkar Sentinel"); // Artifact Creature — Soldier (3/3) + addCard(Zone.BATTLEFIELD, playerB, "Island"); + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerB, "{1}: "); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + execute(); + + assertPowerToughness(playerB, "Adarkar Sentinel", 3, 3); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/rules/CantDrawTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/rules/CantDrawTest.java index 212acbc5aaa..a5e73c23615 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/rules/CantDrawTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/rules/CantDrawTest.java @@ -1,61 +1,61 @@ - -package org.mage.test.cards.rules; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class CantDrawTest extends CardTestPlayerBase { - - /** - * Leovold, Emissary of Trest does not stop Sylvan Library from drawing - * extra cards. - */ - @Test - public void testCardsNotDrawnFromLibraryEffect() { - // Each opponent can't draw more than one card each turn. - // Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. - addCard(Zone.BATTLEFIELD, playerB, "Leovold, Emissary of Trest"); - - // At the beginning of your draw step, you may draw two additional cards. - // If you do, choose two cards in your hand drawn this turn. For each of those cards, pay 4 life or put the card on top of your library. - addCard(Zone.BATTLEFIELD, playerA, "Sylvan Library", 1); - - setStopAt(3, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, 0); - - assertHandCount(playerA, 1); // only one card drawn at start of turn 3 - assertLife(playerA, 16); // pay 4 life for the card dawn normally (no other cards drawn) - - } - - @Test - public void testCardsNotDrawnFromLibraryEffectNoUse() { - // Each opponent can't draw more than one card each turn. - // Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. - addCard(Zone.BATTLEFIELD, playerB, "Leovold, Emissary of Trest"); - - // At the beginning of your draw step, you may draw two additional cards. - // If you do, choose two cards in your hand drawn this turn. For each of those cards, pay 4 life or put the card on top of your library. - addCard(Zone.BATTLEFIELD, playerA, "Sylvan Library", 1); - - setChoice(playerA, "No"); - - setStopAt(3, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, 0); - - assertHandCount(playerA, 1); // only one card drawn at start of turn 3 - assertLife(playerA, 20); // not used no damage - - } - -} + +package org.mage.test.cards.rules; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class CantDrawTest extends CardTestPlayerBase { + + /** + * Leovold, Emissary of Trest does not stop Sylvan Library from drawing + * extra cards. + */ + @Test + public void testCardsNotDrawnFromLibraryEffect() { + // Each opponent can't draw more than one card each turn. + // Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. + addCard(Zone.BATTLEFIELD, playerB, "Leovold, Emissary of Trest"); + + // At the beginning of your draw step, you may draw two additional cards. + // If you do, choose two cards in your hand drawn this turn. For each of those cards, pay 4 life or put the card on top of your library. + addCard(Zone.BATTLEFIELD, playerA, "Sylvan Library", 1); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, 0); + + assertHandCount(playerA, 1); // only one card drawn at start of turn 3 + assertLife(playerA, 16); // pay 4 life for the card dawn normally (no other cards drawn) + + } + + @Test + public void testCardsNotDrawnFromLibraryEffectNoUse() { + // Each opponent can't draw more than one card each turn. + // Whenever you or a permanent you control becomes the target of a spell or ability an opponent controls, you may draw a card. + addCard(Zone.BATTLEFIELD, playerB, "Leovold, Emissary of Trest"); + + // At the beginning of your draw step, you may draw two additional cards. + // If you do, choose two cards in your hand drawn this turn. For each of those cards, pay 4 life or put the card on top of your library. + addCard(Zone.BATTLEFIELD, playerA, "Sylvan Library", 1); + + setChoice(playerA, "No"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, 0); + + assertHandCount(playerA, 1); // only one card drawn at start of turn 3 + assertLife(playerA, 20); // not used no damage + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/rules/MeliraSylvokOutcastTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/rules/MeliraSylvokOutcastTest.java index 9edbd27587d..4a24591d522 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/rules/MeliraSylvokOutcastTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/rules/MeliraSylvokOutcastTest.java @@ -1,47 +1,47 @@ - -package org.mage.test.cards.rules; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.counters.CounterType; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -/** - * with Melira, Sylvok Outcast on the table and Devoted Druid you can activated - * his untap ability for infinity mana. This shouldn't work like this as its an - * unpayable cost " 601.2g. The player pays the total cost in any order. Partial - * payments are not allowed. Unpayable costs cant be paid" - */ -public class MeliraSylvokOutcastTest extends CardTestPlayerBase { - - /** - * Test that the target of Vines of Vastwood can't be the target of spells - * or abilities your opponents control this turn - */ - @Test - public void testUnpayableCost() { - // You can't get poison counters. - // Creatures you control can't have -1/-1 counters placed on them. - // Creatures your opponents control lose infect. - addCard(Zone.BATTLEFIELD, playerA, "Melira, Sylvok Outcast", 2); // 2/2 - // {T}: Add {G}. - // Put a -1/-1 counter on Devoted Druid: Untap Devoted Druid. - addCard(Zone.BATTLEFIELD, playerA, "Devoted Druid", 1); // 0/2 - - activateManaAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G}"); - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Put a -1/-1 counter on "); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPowerToughness(playerA, "Devoted Druid", 0, 2); - assertCounterCount("Devoted Druid", CounterType.M1M1, 0); - assertTapped("Devoted Druid", true); // Because untapping can't be paid - - } -} + +package org.mage.test.cards.rules; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.counters.CounterType; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +/** + * with Melira, Sylvok Outcast on the table and Devoted Druid you can activated + * his untap ability for infinity mana. This shouldn't work like this as its an + * unpayable cost " 601.2g. The player pays the total cost in any order. Partial + * payments are not allowed. Unpayable costs cant be paid" + */ +public class MeliraSylvokOutcastTest extends CardTestPlayerBase { + + /** + * Test that the target of Vines of Vastwood can't be the target of spells + * or abilities your opponents control this turn + */ + @Test + public void testUnpayableCost() { + // You can't get poison counters. + // Creatures you control can't have -1/-1 counters placed on them. + // Creatures your opponents control lose infect. + addCard(Zone.BATTLEFIELD, playerA, "Melira, Sylvok Outcast", 2); // 2/2 + // {T}: Add {G}. + // Put a -1/-1 counter on Devoted Druid: Untap Devoted Druid. + addCard(Zone.BATTLEFIELD, playerA, "Devoted Druid", 1); // 0/2 + + activateManaAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: Add {G}"); + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Put a -1/-1 counter on "); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPowerToughness(playerA, "Devoted Druid", 0, 2); + assertCounterCount("Devoted Druid", CounterType.M1M1, 0); + assertTapped("Devoted Druid", true); // Because untapping can't be paid + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/CullingScalesTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/CullingScalesTest.java index 002fc3d92dd..9dccbc33b0a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/CullingScalesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/CullingScalesTest.java @@ -1,67 +1,67 @@ -package org.mage.test.cards.single; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author cg5 - */ -public class CullingScalesTest extends CardTestPlayerBase { - - @Test - public void testCullingScalesBasic() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain"); // CMC = 0, but not a nonland permanent - addCard(Zone.BATTLEFIELD, playerA, "Culling Scales"); // CMC = 3 - addCard(Zone.BATTLEFIELD, playerB, "Siege Rhino"); // CMC = 4 - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertPermanentCount(playerA, "Mountain", 1); - assertPermanentCount(playerA, "Culling Scales", 0); - assertPermanentCount(playerB, "Siege Rhino", 1); - } - - @Test - public void testCullingScalesPlusHexproof() { - addCard(Zone.BATTLEFIELD, playerB, "Bassara Tower Archer"); // CMC = 2, hexproof - addCard(Zone.BATTLEFIELD, playerA, "Culling Scales"); // CMC = 3 - addCard(Zone.BATTLEFIELD, playerB, "Siege Rhino"); // CMC = 4 - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); - execute(); - - // Nothing happens since no valid targets - // (the only nonland permanent with the lowest CMC has hexproof) - assertPermanentCount(playerB, "Bassara Tower Archer", 1); - assertPermanentCount(playerA, "Culling Scales", 1); - assertPermanentCount(playerB, "Siege Rhino", 1); - } - - @Test - public void testCullingScalesFizzleByMakingLowerCostedPermanent() { - // Gatherer ruling: If the targeted permanent doesn't have the lowest converted mana cost - // when the ability resolves, the ability is countered and the permanent isn't destroyed. - - addCard(Zone.HAND, playerB, "Raise the Alarm"); // Make 2 tokens - addCard(Zone.BATTLEFIELD, playerB, "Elvish Visionary"); // CMC = 2 - addCard(Zone.BATTLEFIELD, playerB, "Plains", 5); - addCard(Zone.BATTLEFIELD, playerA, "Culling Scales"); // CMC = 3 - - // On upkeep Culling Scales targets Elvish Visionary - addTarget(playerA, "Elvish Visionary"); - - // Cast Raise the Alarm in response - castSpell(1, PhaseStep.UPKEEP, playerB, "Raise the Alarm", null, "At the beginning of"); - setStopAt(1, PhaseStep.PRECOMBAT_MAIN); - execute(); - - // Culling Scales trigger fizzles since the Visionary no longer has the lowest CMC - assertPermanentCount(playerB, "Soldier", 2); - assertPermanentCount(playerB, "Elvish Visionary", 1); - assertPermanentCount(playerB, "Plains", 5); - assertPermanentCount(playerA, "Culling Scales", 1); - } - -} +package org.mage.test.cards.single; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author cg5 + */ +public class CullingScalesTest extends CardTestPlayerBase { + + @Test + public void testCullingScalesBasic() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain"); // CMC = 0, but not a nonland permanent + addCard(Zone.BATTLEFIELD, playerA, "Culling Scales"); // CMC = 3 + addCard(Zone.BATTLEFIELD, playerB, "Siege Rhino"); // CMC = 4 + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Mountain", 1); + assertPermanentCount(playerA, "Culling Scales", 0); + assertPermanentCount(playerB, "Siege Rhino", 1); + } + + @Test + public void testCullingScalesPlusHexproof() { + addCard(Zone.BATTLEFIELD, playerB, "Bassara Tower Archer"); // CMC = 2, hexproof + addCard(Zone.BATTLEFIELD, playerA, "Culling Scales"); // CMC = 3 + addCard(Zone.BATTLEFIELD, playerB, "Siege Rhino"); // CMC = 4 + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + execute(); + + // Nothing happens since no valid targets + // (the only nonland permanent with the lowest CMC has hexproof) + assertPermanentCount(playerB, "Bassara Tower Archer", 1); + assertPermanentCount(playerA, "Culling Scales", 1); + assertPermanentCount(playerB, "Siege Rhino", 1); + } + + @Test + public void testCullingScalesFizzleByMakingLowerCostedPermanent() { + // Gatherer ruling: If the targeted permanent doesn't have the lowest converted mana cost + // when the ability resolves, the ability is countered and the permanent isn't destroyed. + + addCard(Zone.HAND, playerB, "Raise the Alarm"); // Make 2 tokens + addCard(Zone.BATTLEFIELD, playerB, "Elvish Visionary"); // CMC = 2 + addCard(Zone.BATTLEFIELD, playerB, "Plains", 5); + addCard(Zone.BATTLEFIELD, playerA, "Culling Scales"); // CMC = 3 + + // On upkeep Culling Scales targets Elvish Visionary + addTarget(playerA, "Elvish Visionary"); + + // Cast Raise the Alarm in response + castSpell(1, PhaseStep.UPKEEP, playerB, "Raise the Alarm", null, "At the beginning of"); + setStopAt(1, PhaseStep.PRECOMBAT_MAIN); + execute(); + + // Culling Scales trigger fizzles since the Visionary no longer has the lowest CMC + assertPermanentCount(playerB, "Soldier", 2); + assertPermanentCount(playerB, "Elvish Visionary", 1); + assertPermanentCount(playerB, "Plains", 5); + assertPermanentCount(playerA, "Culling Scales", 1); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/InfernalCaretakerTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/InfernalCaretakerTest.java index 5384067e996..8c4d55334ce 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/InfernalCaretakerTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/InfernalCaretakerTest.java @@ -1,56 +1,56 @@ - -package org.mage.test.cards.single; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author cg5 - */ -public class InfernalCaretakerTest extends CardTestPlayerBase { - - @Test - /* - * Infernal Caretaker {3}{B} - * Creature - Human Cleric - * Morph {3}{B} - * When Infernal Caretaker is turned face up, return all Zombie cards from - * all graveyards to their owners' hands. - */ - public void testInfernalCaretaker() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10); - addCard(Zone.BATTLEFIELD, playerA, "Walking Corpse", 1); - addCard(Zone.HAND, playerA, "Infernal Caretaker", 1); - addCard(Zone.GRAVEYARD, playerA, "Walking Corpse", 4); - addCard(Zone.GRAVEYARD, playerA, "Storm Crow", 4); - - addCard(Zone.GRAVEYARD, playerB, "Festering Goblin", 4); - addCard(Zone.GRAVEYARD, playerB, "Elvish Visionary", 4); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Infernal Caretaker"); - setChoice(playerA, "Yes"); // Cast as a morph - - activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}{B}: Turn this face-down permanent face up."); - setStopAt(1, PhaseStep.END_TURN); - execute(); - - assertPermanentCount(playerA, "Infernal Caretaker", 1); - assertPermanentCount(playerA, "Walking Corpse", 1); - assertHandCount(playerA, "Walking Corpse", 4); - assertHandCount(playerA, "Storm Crow", 0); - assertHandCount(playerA, "Festering Goblin", 0); - assertHandCount(playerA, "Elvish Visionary", 0); - assertGraveyardCount(playerA, 4); // 4 * Storm Crow - - assertPermanentCount(playerB, "Infernal Caretaker", 0); - assertPermanentCount(playerB, "Walking Corpse", 0); - assertHandCount(playerB, "Walking Corpse", 0); - assertHandCount(playerB, "Storm Crow", 0); - assertHandCount(playerB, "Festering Goblin", 4); - assertHandCount(playerB, "Elvish Visionary", 0); - assertGraveyardCount(playerB, 4); // 4 * Elvish Visionary - } -} + +package org.mage.test.cards.single; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author cg5 + */ +public class InfernalCaretakerTest extends CardTestPlayerBase { + + @Test + /* + * Infernal Caretaker {3}{B} + * Creature - Human Cleric + * Morph {3}{B} + * When Infernal Caretaker is turned face up, return all Zombie cards from + * all graveyards to their owners' hands. + */ + public void testInfernalCaretaker() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10); + addCard(Zone.BATTLEFIELD, playerA, "Walking Corpse", 1); + addCard(Zone.HAND, playerA, "Infernal Caretaker", 1); + addCard(Zone.GRAVEYARD, playerA, "Walking Corpse", 4); + addCard(Zone.GRAVEYARD, playerA, "Storm Crow", 4); + + addCard(Zone.GRAVEYARD, playerB, "Festering Goblin", 4); + addCard(Zone.GRAVEYARD, playerB, "Elvish Visionary", 4); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Infernal Caretaker"); + setChoice(playerA, "Yes"); // Cast as a morph + + activateAbility(1, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}{B}: Turn this face-down permanent face up."); + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Infernal Caretaker", 1); + assertPermanentCount(playerA, "Walking Corpse", 1); + assertHandCount(playerA, "Walking Corpse", 4); + assertHandCount(playerA, "Storm Crow", 0); + assertHandCount(playerA, "Festering Goblin", 0); + assertHandCount(playerA, "Elvish Visionary", 0); + assertGraveyardCount(playerA, 4); // 4 * Storm Crow + + assertPermanentCount(playerB, "Infernal Caretaker", 0); + assertPermanentCount(playerB, "Walking Corpse", 0); + assertHandCount(playerB, "Walking Corpse", 0); + assertHandCount(playerB, "Storm Crow", 0); + assertHandCount(playerB, "Festering Goblin", 4); + assertHandCount(playerB, "Elvish Visionary", 0); + assertGraveyardCount(playerB, 4); // 4 * Elvish Visionary + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/JacesMindseekerTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/JacesMindseekerTest.java index 5163b4b7996..cbb62cad839 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/JacesMindseekerTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/JacesMindseekerTest.java @@ -1,53 +1,53 @@ - -package org.mage.test.cards.single; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class JacesMindseekerTest extends CardTestPlayerBase { - - /** - * Jace's Mindseeker trigger ability is not working properly. It doesn't - * allow me to cast an instant or sorcery if there is one among the 5 cards - * put into the graveyard. I think the problem is that when the cards are - * put into the graveyard, the cards can't be cast anymore. What if the - * cards are revealed first before they are put into the graveyard? That - * doesn't follow the sequence on the card, but it might solve the bug. - */ - @Test - public void testJacesMindseeker() { - addCard(Zone.BATTLEFIELD, playerA, "Island", 6); - // Flying - // When Jace's Mindseeker enters the battlefield, target opponent puts the top five cards of their library into their graveyard. - // You may cast an instant or sorcery card from among them without paying its mana cost. - addCard(Zone.HAND, playerA, "Jace's Mindseeker", 1); // Creature 4/4 {4}{U}{U} - - addCard(Zone.LIBRARY, playerB, "Silvercoat Lion", 2); - addCard(Zone.LIBRARY, playerB, "Lightning Bolt", 1); - addCard(Zone.LIBRARY, playerB, "Silvercoat Lion", 2); - skipInitShuffling(); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Jace's Mindseeker"); - addTarget(playerA, playerB); - setChoice(playerA, "Yes"); - setChoice(playerA, "Lightning Bolt"); - addTarget(playerA, playerB); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertPermanentCount(playerA, "Jace's Mindseeker", 1); - assertGraveyardCount(playerB, "Lightning Bolt", 1); - assertGraveyardCount(playerB, "Silvercoat Lion", 4); - - assertLife(playerA, 20); - assertLife(playerB, 17); - - } -} + +package org.mage.test.cards.single; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class JacesMindseekerTest extends CardTestPlayerBase { + + /** + * Jace's Mindseeker trigger ability is not working properly. It doesn't + * allow me to cast an instant or sorcery if there is one among the 5 cards + * put into the graveyard. I think the problem is that when the cards are + * put into the graveyard, the cards can't be cast anymore. What if the + * cards are revealed first before they are put into the graveyard? That + * doesn't follow the sequence on the card, but it might solve the bug. + */ + @Test + public void testJacesMindseeker() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 6); + // Flying + // When Jace's Mindseeker enters the battlefield, target opponent puts the top five cards of their library into their graveyard. + // You may cast an instant or sorcery card from among them without paying its mana cost. + addCard(Zone.HAND, playerA, "Jace's Mindseeker", 1); // Creature 4/4 {4}{U}{U} + + addCard(Zone.LIBRARY, playerB, "Silvercoat Lion", 2); + addCard(Zone.LIBRARY, playerB, "Lightning Bolt", 1); + addCard(Zone.LIBRARY, playerB, "Silvercoat Lion", 2); + skipInitShuffling(); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Jace's Mindseeker"); + addTarget(playerA, playerB); + setChoice(playerA, "Yes"); + setChoice(playerA, "Lightning Bolt"); + addTarget(playerA, playerB); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Jace's Mindseeker", 1); + assertGraveyardCount(playerB, "Lightning Bolt", 1); + assertGraveyardCount(playerB, "Silvercoat Lion", 4); + + assertLife(playerA, 20); + assertLife(playerB, 17); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/targets/TargetRestrictionsTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/targets/TargetRestrictionsTest.java index e7bbd5b477a..605de74d77a 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/targets/TargetRestrictionsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/targets/TargetRestrictionsTest.java @@ -1,89 +1,89 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.cards.targets; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ - -public class TargetRestrictionsTest extends CardTestPlayerBase { - - @Test - public void testDreamLeashWorks() { - addCard(Zone.BATTLEFIELD, playerA, "Island", 6); - // Enchant permanent - // You can't choose an untapped permanent as Dream Leash's target as you cast Dream Leash. - // You control enchanted permanent. - addCard(Zone.HAND, playerA, "Dream Leash"); // Enchantment {3}{U}{U} - - // Tap target creature. It doesn't untap during its controller's next untap step. - addCard(Zone.HAND, playerA, "Take into Custody"); // Instant {U} - - addCard(Zone.BATTLEFIELD, playerB, "Sejiri Merfolk"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Take into Custody", "Sejiri Merfolk"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dream Leash", "Sejiri Merfolk"); - - setStrictChooseMode(true); - setStopAt(3, PhaseStep.BEGIN_COMBAT); - execute(); - - assertAllCommandsUsed(); - - assertPermanentCount(playerA, "Dream Leash", 1); - assertPermanentCount(playerA, "Sejiri Merfolk", 1); - - assertLife(playerA, 20); - assertLife(playerB, 20); - } - - @Test - public void testDreamLeashUntappingAsResponseToCast() { - addCard(Zone.BATTLEFIELD, playerA, "Island", 6); - // Enchant permanent - // You can't choose an untapped permanent as Dream Leash's target as you cast Dream Leash. - // You control enchanted permanent. - addCard(Zone.HAND, playerA, "Dream Leash"); // Enchantment {3}{U}{U} - - // Tap target creature. It doesn't untap during its controller's next untap step. - addCard(Zone.HAND, playerA, "Take into Custody"); // Instant {U} - - // Untap target creature. It gets +1/+3 until end of turn. - addCard(Zone.HAND, playerB, "Ornamental Courage"); // Instant {G} - - addCard(Zone.BATTLEFIELD, playerB, "Forest"); - addCard(Zone.BATTLEFIELD, playerB, "Sejiri Merfolk"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Take into Custody", "Sejiri Merfolk"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dream Leash", "Sejiri Merfolk"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Ornamental Courage", "Sejiri Merfolk", "Dream Leash"); - - setStrictChooseMode(true); - setStopAt(3, PhaseStep.BEGIN_COMBAT); - execute(); - - assertAllCommandsUsed(); - - - assertGraveyardCount(playerA, "Take into Custody", 1); - assertGraveyardCount(playerB, "Ornamental Courage", 1); - assertPermanentCount(playerA, "Dream Leash", 1); - assertPermanentCount(playerA, "Sejiri Merfolk", 1); - assertPowerToughness(playerA, "Sejiri Merfolk", 2, 1); - - assertLife(playerA, 20); - assertLife(playerB, 20); - } +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.cards.targets; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class TargetRestrictionsTest extends CardTestPlayerBase { + + @Test + public void testDreamLeashWorks() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 6); + // Enchant permanent + // You can't choose an untapped permanent as Dream Leash's target as you cast Dream Leash. + // You control enchanted permanent. + addCard(Zone.HAND, playerA, "Dream Leash"); // Enchantment {3}{U}{U} + + // Tap target creature. It doesn't untap during its controller's next untap step. + addCard(Zone.HAND, playerA, "Take into Custody"); // Instant {U} + + addCard(Zone.BATTLEFIELD, playerB, "Sejiri Merfolk"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Take into Custody", "Sejiri Merfolk"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dream Leash", "Sejiri Merfolk"); + + setStrictChooseMode(true); + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertAllCommandsUsed(); + + assertPermanentCount(playerA, "Dream Leash", 1); + assertPermanentCount(playerA, "Sejiri Merfolk", 1); + + assertLife(playerA, 20); + assertLife(playerB, 20); + } + + @Test + public void testDreamLeashUntappingAsResponseToCast() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 6); + // Enchant permanent + // You can't choose an untapped permanent as Dream Leash's target as you cast Dream Leash. + // You control enchanted permanent. + addCard(Zone.HAND, playerA, "Dream Leash"); // Enchantment {3}{U}{U} + + // Tap target creature. It doesn't untap during its controller's next untap step. + addCard(Zone.HAND, playerA, "Take into Custody"); // Instant {U} + + // Untap target creature. It gets +1/+3 until end of turn. + addCard(Zone.HAND, playerB, "Ornamental Courage"); // Instant {G} + + addCard(Zone.BATTLEFIELD, playerB, "Forest"); + addCard(Zone.BATTLEFIELD, playerB, "Sejiri Merfolk"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Take into Custody", "Sejiri Merfolk"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dream Leash", "Sejiri Merfolk"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Ornamental Courage", "Sejiri Merfolk", "Dream Leash"); + + setStrictChooseMode(true); + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertAllCommandsUsed(); + + + assertGraveyardCount(playerA, "Take into Custody", 1); + assertGraveyardCount(playerB, "Ornamental Courage", 1); + assertPermanentCount(playerA, "Dream Leash", 1); + assertPermanentCount(playerA, "Sejiri Merfolk", 1); + assertPowerToughness(playerA, "Sejiri Merfolk", 2, 1); + + assertLife(playerA, 20); + assertLife(playerB, 20); + } } \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/text/WrennAndSixTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/text/WrennAndSixTest.java index b4a26f3a174..21a30a73caa 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/text/WrennAndSixTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/text/WrennAndSixTest.java @@ -1,17 +1,17 @@ -package org.mage.test.cards.text; - -import mage.cards.Card; -import mage.cards.repository.CardRepository; -import org.junit.Assert; -import org.junit.Test; - -public class WrennAndSixTest { - - @Test - public void testFirstLoyaltyAbilityRulesText() { - Card wrennAndSix = CardRepository.instance.findCard("Wrenn and Six").getCard(); - String firstLoyaltyAbilityRulesText = wrennAndSix.getRules().get(0); - - Assert.assertEquals(firstLoyaltyAbilityRulesText, "+1: Return up to one target land card from your graveyard to your hand."); - } -} +package org.mage.test.cards.text; + +import mage.cards.Card; +import mage.cards.repository.CardRepository; +import org.junit.Assert; +import org.junit.Test; + +public class WrennAndSixTest { + + @Test + public void testFirstLoyaltyAbilityRulesText() { + Card wrennAndSix = CardRepository.instance.findCard("Wrenn and Six").getCard(); + String firstLoyaltyAbilityRulesText = wrennAndSix.getRules().get(0); + + Assert.assertEquals(firstLoyaltyAbilityRulesText, "+1: Return up to one target land card from your graveyard to your hand."); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/BaralChiefOfComplianceTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/BaralChiefOfComplianceTest.java index a1c94327b56..a885c6bbc25 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/BaralChiefOfComplianceTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/BaralChiefOfComplianceTest.java @@ -1,60 +1,60 @@ - -package org.mage.test.cards.triggers; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class BaralChiefOfComplianceTest extends CardTestPlayerBase { - - /** - * In the following scenario baral's loot ability isn't triggered. - * - * Baral, Chief of Compliance in my graveyard, opponent had a creature in - * the stack. - * - * I cast Ojutai's Command with modes: Return creature from graveyard to - * battlefield (targeting Baral), and counter their creature spell. Ojutai's - * command resolves, do the modes in the order they appear in the card. I - * put Baral onto the battlefield, and he is around to witness the creature - * be counted. Baral's loot ability isn't triggered. - * - */ - @Test - public void testBaralTrigger() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - addCard(Zone.HAND, playerA, "Silvercoat Lion"); - - addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); - addCard(Zone.BATTLEFIELD, playerB, "Island", 2); - // Instant and sorcery spells you cast cost {1} less to cast. - // Whenever a spell or ability you control counters a spell, you may draw a card. If you do, discard a card. - addCard(Zone.GRAVEYARD, playerB, "Baral, Chief of Compliance"); // Creature {1}{U} - // Choose two - - // Return target creature card with converted mana cost 2 or less from your graveyard to the battlefield; - // or You gain 4 life; - // or Counter target creature spell; - // or Draw a card - addCard(Zone.HAND, playerB, "Ojutai's Command"); // Instant {2}{W}{U} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Ojutai's Command", "mode=1Baral, Chief of Compliance^mode=3Silvercoat Lion"); - setModeChoice(playerB, "1"); - setModeChoice(playerB, "3"); - - setStopAt(1, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerA, "Silvercoat Lion", 1); - - assertGraveyardCount(playerB, "Ojutai's Command", 1); - assertGraveyardCount(playerB, 2); - assertPermanentCount(playerB, "Baral, Chief of Compliance", 1); - } - -} + +package org.mage.test.cards.triggers; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class BaralChiefOfComplianceTest extends CardTestPlayerBase { + + /** + * In the following scenario baral's loot ability isn't triggered. + * + * Baral, Chief of Compliance in my graveyard, opponent had a creature in + * the stack. + * + * I cast Ojutai's Command with modes: Return creature from graveyard to + * battlefield (targeting Baral), and counter their creature spell. Ojutai's + * command resolves, do the modes in the order they appear in the card. I + * put Baral onto the battlefield, and he is around to witness the creature + * be counted. Baral's loot ability isn't triggered. + * + */ + @Test + public void testBaralTrigger() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.HAND, playerA, "Silvercoat Lion"); + + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + addCard(Zone.BATTLEFIELD, playerB, "Island", 2); + // Instant and sorcery spells you cast cost {1} less to cast. + // Whenever a spell or ability you control counters a spell, you may draw a card. If you do, discard a card. + addCard(Zone.GRAVEYARD, playerB, "Baral, Chief of Compliance"); // Creature {1}{U} + // Choose two - + // Return target creature card with converted mana cost 2 or less from your graveyard to the battlefield; + // or You gain 4 life; + // or Counter target creature spell; + // or Draw a card + addCard(Zone.HAND, playerB, "Ojutai's Command"); // Instant {2}{W}{U} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Ojutai's Command", "mode=1Baral, Chief of Compliance^mode=3Silvercoat Lion"); + setModeChoice(playerB, "1"); + setModeChoice(playerB, "3"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + + assertGraveyardCount(playerB, "Ojutai's Command", 1); + assertGraveyardCount(playerB, 2); + assertPermanentCount(playerB, "Baral, Chief of Compliance", 1); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/DivineVisitationTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/DivineVisitationTest.java index c6829b9fae9..bc915a4c908 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/DivineVisitationTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/DivineVisitationTest.java @@ -1,81 +1,81 @@ -package org.mage.test.cards.triggers; - -import mage.ObjectColor; -import mage.constants.CardType; -import mage.constants.PhaseStep; -import mage.constants.SubType; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author luziferius - */ -public class DivineVisitationTest extends CardTestPlayerBase { - - /** - * Test case for issue #6349. Divine Visitation should not replace Treasure tokens created by Smothering Tithe - */ - @Test - public void testDivineVisitationDoesNotReplaceNoncreatureTokens() { - - // If one or more creature tokens would be created under your control, - // that many 4/4 white Angel creature tokens with flying and vigilance are created instead. - addCard(Zone.BATTLEFIELD, playerA, "Divine Visitation"); - // Whenever an opponent draws a card, that player may pay {2}. - // If the player doesn’t, you create a Treasure token. - // (It’s an artifact with “{T}, Sacrifice this artifact: Add one mana of any color.”) - addCard(Zone.BATTLEFIELD, playerA, "Smothering Tithe"); - addCard(Zone.BATTLEFIELD, playerA, "Island", 1); - // Target player draws three cards. - addCard(Zone.HAND, playerA, "Ancestral Recall"); // {U} - // Let the opponent draw - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ancestral Recall", playerB); - setChoice(playerA, "Whenever an opponent draws a card", 2); // choose order of triggers - setChoice(playerB, "No", 3); // Decline to pay 2 - setStopAt(1, PhaseStep.BEGIN_COMBAT); - - setStrictChooseMode(true); - execute(); - assertAllCommandsUsed(); - - assertHandCount(playerB, 3); - assertPermanentCount(playerA, "Treasure", 3); - assertType("Treasure", CardType.ARTIFACT, SubType.TREASURE); - assertNotType("Treasure", CardType.CREATURE); - assertNotSubtype("Treasure", SubType.ANGEL); - assertPermanentCount(playerA, "Angel", 0); - assertPermanentCount(playerA, 6); - assertGraveyardCount(playerA, 1); - } - - @Test - public void testDivineVisitationReplacesCreatureTokens() { - - // If one or more creature tokens would be created under your control, - // that many 4/4 white Angel creature tokens with flying and vigilance are created instead. - addCard(Zone.BATTLEFIELD, playerA, "Divine Visitation"); - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); - - // Create two 1/1 red Goblin creature tokens. - addCard(Zone.HAND, playerA, "Dragon Fodder"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dragon Fodder"); - setStopAt(1, PhaseStep.BEGIN_COMBAT); - - setStrictChooseMode(true); - execute(); - assertAllCommandsUsed(); - - assertGraveyardCount(playerA, 1); - assertPermanentCount(playerA, 5); - assertPermanentCount(playerA, "Goblin", 0); - assertPermanentCount(playerA, "Angel", 2); - assertType("Angel", CardType.CREATURE, SubType.ANGEL); - assertColor(playerA, "Angel", ObjectColor.WHITE, true); - assertColor(playerA, "Angel", ObjectColor.RED, false); - assertPowerToughness(playerA, "Angel", 4,4); - assertNotSubtype("Angel", SubType.GOBLIN); - - } +package org.mage.test.cards.triggers; + +import mage.ObjectColor; +import mage.constants.CardType; +import mage.constants.PhaseStep; +import mage.constants.SubType; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author luziferius + */ +public class DivineVisitationTest extends CardTestPlayerBase { + + /** + * Test case for issue #6349. Divine Visitation should not replace Treasure tokens created by Smothering Tithe + */ + @Test + public void testDivineVisitationDoesNotReplaceNoncreatureTokens() { + + // If one or more creature tokens would be created under your control, + // that many 4/4 white Angel creature tokens with flying and vigilance are created instead. + addCard(Zone.BATTLEFIELD, playerA, "Divine Visitation"); + // Whenever an opponent draws a card, that player may pay {2}. + // If the player doesn’t, you create a Treasure token. + // (It’s an artifact with “{T}, Sacrifice this artifact: Add one mana of any color.”) + addCard(Zone.BATTLEFIELD, playerA, "Smothering Tithe"); + addCard(Zone.BATTLEFIELD, playerA, "Island", 1); + // Target player draws three cards. + addCard(Zone.HAND, playerA, "Ancestral Recall"); // {U} + // Let the opponent draw + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Ancestral Recall", playerB); + setChoice(playerA, "Whenever an opponent draws a card", 2); // choose order of triggers + setChoice(playerB, "No", 3); // Decline to pay 2 + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertHandCount(playerB, 3); + assertPermanentCount(playerA, "Treasure", 3); + assertType("Treasure", CardType.ARTIFACT, SubType.TREASURE); + assertNotType("Treasure", CardType.CREATURE); + assertNotSubtype("Treasure", SubType.ANGEL); + assertPermanentCount(playerA, "Angel", 0); + assertPermanentCount(playerA, 6); + assertGraveyardCount(playerA, 1); + } + + @Test + public void testDivineVisitationReplacesCreatureTokens() { + + // If one or more creature tokens would be created under your control, + // that many 4/4 white Angel creature tokens with flying and vigilance are created instead. + addCard(Zone.BATTLEFIELD, playerA, "Divine Visitation"); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + + // Create two 1/1 red Goblin creature tokens. + addCard(Zone.HAND, playerA, "Dragon Fodder"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Dragon Fodder"); + setStopAt(1, PhaseStep.BEGIN_COMBAT); + + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertGraveyardCount(playerA, 1); + assertPermanentCount(playerA, 5); + assertPermanentCount(playerA, "Goblin", 0); + assertPermanentCount(playerA, "Angel", 2); + assertType("Angel", CardType.CREATURE, SubType.ANGEL); + assertColor(playerA, "Angel", ObjectColor.WHITE, true); + assertColor(playerA, "Angel", ObjectColor.RED, false); + assertPowerToughness(playerA, "Angel", 4,4); + assertNotSubtype("Angel", SubType.GOBLIN); + + } } \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/MasterOfCrueltiesTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/MasterOfCrueltiesTest.java index eb304448a94..0f9f89ba297 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/MasterOfCrueltiesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/MasterOfCrueltiesTest.java @@ -1,54 +1,54 @@ - -package org.mage.test.cards.triggers; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class MasterOfCrueltiesTest extends CardTestPlayerBase { - - /* - The ability of an Alesha-resurrected Master of Cruelties triggered in an EDH game despite being blocked by a creature. - */ - @Test - public void testMasterWasAleshaAnimated() { - // First strike - // Whenever Alesha, Who Smiles at Death attacks, you may pay {W/B}{W/B}. If you do, return target creature card with power 2 or less from your graveyard to the battlefield tapped and attacking. - addCard(Zone.BATTLEFIELD, playerB, "Alesha, Who Smiles at Death"); // 3/2 - - // First strike - // Deathtouch - // Master of Cruelties can only attack alone. - // Whenever Master of Cruelties attacks a player and isn't blocked, that player's life total becomes 1. Master of Cruelties assigns no combat damage this combat. - addCard(Zone.GRAVEYARD, playerB, "Master of Cruelties"); // 1/4 - - addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - - attack(2, playerB, "Alesha, Who Smiles at Death"); - setChoice(playerB, "Yes"); - addTarget(playerB, "Master of Cruelties"); - - block(2, playerA, "Silvercoat Lion", "Master of Cruelties"); - - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertPermanentCount(playerB, "Master of Cruelties", 1); - assertTapped("Master of Cruelties", true); - assertTapped("Alesha, Who Smiles at Death", true); - - assertLife(playerA, 17); - assertLife(playerB, 20); - - assertGraveyardCount(playerA, "Silvercoat Lion", 1); - - } - -} + +package org.mage.test.cards.triggers; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class MasterOfCrueltiesTest extends CardTestPlayerBase { + + /* + The ability of an Alesha-resurrected Master of Cruelties triggered in an EDH game despite being blocked by a creature. + */ + @Test + public void testMasterWasAleshaAnimated() { + // First strike + // Whenever Alesha, Who Smiles at Death attacks, you may pay {W/B}{W/B}. If you do, return target creature card with power 2 or less from your graveyard to the battlefield tapped and attacking. + addCard(Zone.BATTLEFIELD, playerB, "Alesha, Who Smiles at Death"); // 3/2 + + // First strike + // Deathtouch + // Master of Cruelties can only attack alone. + // Whenever Master of Cruelties attacks a player and isn't blocked, that player's life total becomes 1. Master of Cruelties assigns no combat damage this combat. + addCard(Zone.GRAVEYARD, playerB, "Master of Cruelties"); // 1/4 + + addCard(Zone.BATTLEFIELD, playerB, "Plains", 2); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + + attack(2, playerB, "Alesha, Who Smiles at Death"); + setChoice(playerB, "Yes"); + addTarget(playerB, "Master of Cruelties"); + + block(2, playerA, "Silvercoat Lion", "Master of Cruelties"); + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerB, "Master of Cruelties", 1); + assertTapped("Master of Cruelties", true); + assertTapped("Alesha, Who Smiles at Death", true); + + assertLife(playerA, 17); + assertLife(playerB, 20); + + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/delayed/GlimpseOfNatureTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/delayed/GlimpseOfNatureTest.java index 135a725f24c..fbc5a3b29d1 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/delayed/GlimpseOfNatureTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/delayed/GlimpseOfNatureTest.java @@ -1,49 +1,49 @@ - -package org.mage.test.cards.triggers.delayed; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class GlimpseOfNatureTest extends CardTestPlayerBase { - - /** - * Glimpse of Nature triggers do not draw a card. - */ - @Test - public void testCardsAreDrawnFromCreatureCasting() { - // Whenever you cast a creature spell this turn, draw a card. - addCard(Zone.HAND, playerA, "Glimpse of Nature", 1);// Sorcery {G} - addCard(Zone.HAND, playerA, "Silvercoat Lion", 2); - - addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); - - // Flash (You may cast this spell any time you could cast an instant.) - // First strike (This creature deals combat damage before creatures without first strike.) - addCard(Zone.HAND, playerB, "Benalish Knight", 1); // Creature {2}{W} - addCard(Zone.BATTLEFIELD, playerB, "Plains", 3); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Glimpse of Nature"); - - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); - castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Benalish Knight"); - - setStopAt(1, PhaseStep.END_TURN); - execute(); - - assertGraveyardCount(playerA, "Glimpse of Nature", 1); - assertPermanentCount(playerA, "Silvercoat Lion", 2); - assertPermanentCount(playerB, "Benalish Knight", 1); - - assertHandCount(playerA, 2); - assertHandCount(playerB, 0); - } - -} + +package org.mage.test.cards.triggers.delayed; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class GlimpseOfNatureTest extends CardTestPlayerBase { + + /** + * Glimpse of Nature triggers do not draw a card. + */ + @Test + public void testCardsAreDrawnFromCreatureCasting() { + // Whenever you cast a creature spell this turn, draw a card. + addCard(Zone.HAND, playerA, "Glimpse of Nature", 1);// Sorcery {G} + addCard(Zone.HAND, playerA, "Silvercoat Lion", 2); + + addCard(Zone.BATTLEFIELD, playerA, "Forest", 1); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 4); + + // Flash (You may cast this spell any time you could cast an instant.) + // First strike (This creature deals combat damage before creatures without first strike.) + addCard(Zone.HAND, playerB, "Benalish Knight", 1); // Creature {2}{W} + addCard(Zone.BATTLEFIELD, playerB, "Plains", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Glimpse of Nature"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerA, "Silvercoat Lion"); + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Benalish Knight"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerA, "Glimpse of Nature", 1); + assertPermanentCount(playerA, "Silvercoat Lion", 2); + assertPermanentCount(playerB, "Benalish Knight", 1); + + assertHandCount(playerA, 2); + assertHandCount(playerB, 0); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/BloodCultistTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/BloodCultistTest.java index 7be406f6528..74b40da86f9 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/BloodCultistTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/BloodCultistTest.java @@ -1,140 +1,140 @@ - -package org.mage.test.cards.triggers.dies; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class BloodCultistTest extends CardTestPlayerBase { - - @Test - public void testDiedFromDirectDamage() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - // {T}: Blood Cultist deals 1 damage to target creature. - // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. - addCard(Zone.HAND, playerA, "Blood Cultist", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Devilthorn Fox", 1); // 3/1 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); - activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Devilthorn Fox"); - - setStopAt(3, PhaseStep.BEGIN_COMBAT); - execute(); - - assertGraveyardCount(playerB, "Devilthorn Fox", 1); - assertPowerToughness(playerA, "Blood Cultist", 2, 2); - } - - @Test - public void testDiedFromCombatDamage() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - // {T}: Blood Cultist deals 1 damage to target creature. - // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. - addCard(Zone.HAND, playerA, "Blood Cultist", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Devilthorn Fox", 1); // 3/1 - // Lifelink - // {2}, Sacrifice a creature: Put a +1/+1 counter on each Vampire you control. - addCard(Zone.BATTLEFIELD, playerB, "Indulgent Aristocrat", 1); // 1/1 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); - activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Devilthorn Fox"); - - attack(5, playerA, "Blood Cultist"); - block(5, playerB, "Indulgent Aristocrat", "Blood Cultist"); - - setStopAt(5, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertGraveyardCount(playerB, "Devilthorn Fox", 1); - assertGraveyardCount(playerB, "Indulgent Aristocrat", 1); - assertPowerToughness(playerA, "Blood Cultist", 3, 3); - } - - @Test - public void testDiedFromCombatAfterDirectDamageDamage() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - // {T}: Blood Cultist deals 1 damage to target creature. - // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. - addCard(Zone.HAND, playerA, "Blood Cultist", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Devilthorn Fox", 1); // 3/1 - // Shambling Ghoul enters the battlefield tapped. - addCard(Zone.BATTLEFIELD, playerB, "Shambling Ghoul", 1); // 2/3 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); - activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Devilthorn Fox"); - activateAbility(5, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Shambling Ghoul"); - attack(5, playerA, "Silvercoat Lion"); - block(5, playerB, "Shambling Ghoul", "Silvercoat Lion"); - - setStopAt(5, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertGraveyardCount(playerB, "Devilthorn Fox", 1); - assertGraveyardCount(playerB, "Shambling Ghoul", 1); - assertGraveyardCount(playerA, "Silvercoat Lion", 1); - assertPowerToughness(playerA, "Blood Cultist", 3, 3); - } - - @Test - public void testDiedByDirectDamageAfterCombatDamage() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); - // {T}: Blood Cultist deals 1 damage to target creature. - // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. - addCard(Zone.HAND, playerA, "Blood Cultist", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Devilthorn Fox", 1); // 3/1 - // Shambling Ghoul enters the battlefield tapped. - addCard(Zone.BATTLEFIELD, playerB, "Shambling Ghoul", 1); // 2/3 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); - activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Devilthorn Fox"); - activateAbility(5, PhaseStep.POSTCOMBAT_MAIN, playerA, "{T}: {source} deals", "Shambling Ghoul"); - attack(5, playerA, "Silvercoat Lion"); - block(5, playerB, "Shambling Ghoul", "Silvercoat Lion"); - - setStopAt(5, PhaseStep.END_TURN); - execute(); - - assertGraveyardCount(playerB, "Devilthorn Fox", 1); - assertGraveyardCount(playerB, "Shambling Ghoul", 1); - assertGraveyardCount(playerA, "Silvercoat Lion", 1); - assertPowerToughness(playerA, "Blood Cultist", 3, 3); - } - - @Test - public void testDiedByTwoDirectDamage() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - // {T}: Blood Cultist deals 1 damage to target creature. - // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. - addCard(Zone.HAND, playerA, "Blood Cultist", 1); - addCard(Zone.HAND, playerA, "Lightning Bolt", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Shambling Ghoul", 1); // 2/3 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); - activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Shambling Ghoul"); - castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", "Shambling Ghoul"); - - setStopAt(3, PhaseStep.END_TURN); - execute(); - - assertGraveyardCount(playerB, "Shambling Ghoul", 1); - assertGraveyardCount(playerA, "Lightning Bolt", 1); - assertPowerToughness(playerA, "Blood Cultist", 2, 2); - } -} + +package org.mage.test.cards.triggers.dies; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class BloodCultistTest extends CardTestPlayerBase { + + @Test + public void testDiedFromDirectDamage() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + // {T}: Blood Cultist deals 1 damage to target creature. + // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. + addCard(Zone.HAND, playerA, "Blood Cultist", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Devilthorn Fox", 1); // 3/1 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); + activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Devilthorn Fox"); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertGraveyardCount(playerB, "Devilthorn Fox", 1); + assertPowerToughness(playerA, "Blood Cultist", 2, 2); + } + + @Test + public void testDiedFromCombatDamage() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + // {T}: Blood Cultist deals 1 damage to target creature. + // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. + addCard(Zone.HAND, playerA, "Blood Cultist", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Devilthorn Fox", 1); // 3/1 + // Lifelink + // {2}, Sacrifice a creature: Put a +1/+1 counter on each Vampire you control. + addCard(Zone.BATTLEFIELD, playerB, "Indulgent Aristocrat", 1); // 1/1 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); + activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Devilthorn Fox"); + + attack(5, playerA, "Blood Cultist"); + block(5, playerB, "Indulgent Aristocrat", "Blood Cultist"); + + setStopAt(5, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerB, "Devilthorn Fox", 1); + assertGraveyardCount(playerB, "Indulgent Aristocrat", 1); + assertPowerToughness(playerA, "Blood Cultist", 3, 3); + } + + @Test + public void testDiedFromCombatAfterDirectDamageDamage() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + // {T}: Blood Cultist deals 1 damage to target creature. + // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. + addCard(Zone.HAND, playerA, "Blood Cultist", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Devilthorn Fox", 1); // 3/1 + // Shambling Ghoul enters the battlefield tapped. + addCard(Zone.BATTLEFIELD, playerB, "Shambling Ghoul", 1); // 2/3 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); + activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Devilthorn Fox"); + activateAbility(5, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Shambling Ghoul"); + attack(5, playerA, "Silvercoat Lion"); + block(5, playerB, "Shambling Ghoul", "Silvercoat Lion"); + + setStopAt(5, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerB, "Devilthorn Fox", 1); + assertGraveyardCount(playerB, "Shambling Ghoul", 1); + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + assertPowerToughness(playerA, "Blood Cultist", 3, 3); + } + + @Test + public void testDiedByDirectDamageAfterCombatDamage() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + // {T}: Blood Cultist deals 1 damage to target creature. + // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. + addCard(Zone.HAND, playerA, "Blood Cultist", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Devilthorn Fox", 1); // 3/1 + // Shambling Ghoul enters the battlefield tapped. + addCard(Zone.BATTLEFIELD, playerB, "Shambling Ghoul", 1); // 2/3 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); + activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Devilthorn Fox"); + activateAbility(5, PhaseStep.POSTCOMBAT_MAIN, playerA, "{T}: {source} deals", "Shambling Ghoul"); + attack(5, playerA, "Silvercoat Lion"); + block(5, playerB, "Shambling Ghoul", "Silvercoat Lion"); + + setStopAt(5, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerB, "Devilthorn Fox", 1); + assertGraveyardCount(playerB, "Shambling Ghoul", 1); + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + assertPowerToughness(playerA, "Blood Cultist", 3, 3); + } + + @Test + public void testDiedByTwoDirectDamage() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + // {T}: Blood Cultist deals 1 damage to target creature. + // Whenever a creature dealt damage by Blood Cultist this turn dies, put a +1/+1 counter on Blood Cultist. + addCard(Zone.HAND, playerA, "Blood Cultist", 1); + addCard(Zone.HAND, playerA, "Lightning Bolt", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Shambling Ghoul", 1); // 2/3 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Blood Cultist"); + activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{T}: {source} deals", "Shambling Ghoul"); + castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Lightning Bolt", "Shambling Ghoul"); + + setStopAt(3, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerB, "Shambling Ghoul", 1); + assertGraveyardCount(playerA, "Lightning Bolt", 1); + assertPowerToughness(playerA, "Blood Cultist", 2, 2); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/SupernaturalStaminaTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/SupernaturalStaminaTest.java index 8dccc5c96b0..87175a4f4db 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/SupernaturalStaminaTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/dies/SupernaturalStaminaTest.java @@ -1,48 +1,48 @@ - -package org.mage.test.cards.triggers.dies; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class SupernaturalStaminaTest extends CardTestPlayerBase { - - /** - * Channeler Initiate did not get it's -1/-1 counters when reanimated with - * Supernatural Stamina. This was a sealed game against a human player. - */ - @Test - public void testChanneler() { - addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); - - // When Channeler Initiate enters the battlefield, put three -1/-1 counters on target creature you control. - // {T}, Remove a -1/-1 counter from Channeler Initiate: Add one mana of any color. - addCard(Zone.HAND, playerA, "Channeler Initiate"); // Creature 3/4 {1}{G} - - // Until end of turn, target creature gets +2/+0 and gains "When this creature dies, return it to the battlefield tapped under its owner's control." - addCard(Zone.HAND, playerA, "Supernatural Stamina"); // Instant {B} - // Shock deals 2 damage to any target. - addCard(Zone.HAND, playerA, "Shock"); // Instant {R} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Channeler Initiate"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Supernatural Stamina", "Channeler Initiate"); - castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Shock", "Channeler Initiate"); - - setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertGraveyardCount(playerA, "Supernatural Stamina", 1); - assertGraveyardCount(playerA, "Shock", 1); - - assertPermanentCount(playerA, "Channeler Initiate", 1); - assertPowerToughness(playerA, "Channeler Initiate", 0, 1); - - } -} + +package org.mage.test.cards.triggers.dies; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class SupernaturalStaminaTest extends CardTestPlayerBase { + + /** + * Channeler Initiate did not get it's -1/-1 counters when reanimated with + * Supernatural Stamina. This was a sealed game against a human player. + */ + @Test + public void testChanneler() { + addCard(Zone.BATTLEFIELD, playerA, "Forest", 2); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + + // When Channeler Initiate enters the battlefield, put three -1/-1 counters on target creature you control. + // {T}, Remove a -1/-1 counter from Channeler Initiate: Add one mana of any color. + addCard(Zone.HAND, playerA, "Channeler Initiate"); // Creature 3/4 {1}{G} + + // Until end of turn, target creature gets +2/+0 and gains "When this creature dies, return it to the battlefield tapped under its owner's control." + addCard(Zone.HAND, playerA, "Supernatural Stamina"); // Instant {B} + // Shock deals 2 damage to any target. + addCard(Zone.HAND, playerA, "Shock"); // Instant {R} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Channeler Initiate"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Supernatural Stamina", "Channeler Initiate"); + castSpell(1, PhaseStep.BEGIN_COMBAT, playerA, "Shock", "Channeler Initiate"); + + setStopAt(1, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertGraveyardCount(playerA, "Supernatural Stamina", 1); + assertGraveyardCount(playerA, "Shock", 1); + + assertPermanentCount(playerA, "Channeler Initiate", 1); + assertPowerToughness(playerA, "Channeler Initiate", 0, 1); + + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/combat/CanBlockMultipleCreaturesTest.java b/Mage.Tests/src/test/java/org/mage/test/combat/CanBlockMultipleCreaturesTest.java index bc7b9b0bbdb..a899d559dad 100644 --- a/Mage.Tests/src/test/java/org/mage/test/combat/CanBlockMultipleCreaturesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/combat/CanBlockMultipleCreaturesTest.java @@ -1,200 +1,200 @@ - -package org.mage.test.combat; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Ignore; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.fail; - -/** - * - * @author jeffwadsworth - * @author Simown - */ -public class CanBlockMultipleCreaturesTest extends CardTestPlayerBase { - - @Test - public void testMultipleBlockWithTrample() { - - addCard(Zone.BATTLEFIELD, playerA, "Watcher in the Web", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Ulrich, Uncontested Alpha", 1); // 6/6 - addCard(Zone.BATTLEFIELD, playerB, "Kessig Dire Swine", 1); // 6/6 (trample if delirium) - addCard(Zone.BATTLEFIELD, playerB, "Howlpack Wolf", 1); // 3/3 - addCard(Zone.BATTLEFIELD, playerB, "Incorrigible Youths", 1); // 4/3 - - // Trample requirement for Kessig Dire Swine - addCard(Zone.GRAVEYARD, playerB, "Forest", 1); - addCard(Zone.GRAVEYARD, playerB, "Memnite", 1); - addCard(Zone.GRAVEYARD, playerB, "Flight", 1); - addCard(Zone.GRAVEYARD, playerB, "Drain Life", 1); - - // Attack with all 4 creatures and block all with the Watcher in the Web - attack(2, playerB, "Kessig Dire Swine"); - attack(2, playerB, "Ulrich, Uncontested Alpha"); - attack(2, playerB, "Howlpack Wolf"); - attack(2, playerB, "Incorrigible Youths"); - - // BLOCKING ORDER MATTERS - the trampling creature must be selected to block first - // You can manually change the blocking order but it's easier to assign them in order - block(2, playerA, "Watcher in the Web", "Kessig Dire Swine"); - block(2, playerA, "Watcher in the Web", "Ulrich, Uncontested Alpha"); - block(2, playerA, "Watcher in the Web", "Howlpack Wolf"); - block(2, playerA, "Watcher in the Web", "Incorrigible Youths"); - - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertLife(playerA, 19); - - } - - @Test - public void testMultipleBlockWithTrample2() { - - addCard(Zone.BATTLEFIELD, playerA, "Watcher in the Web", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Ulrich, Uncontested Alpha", 1); // 6/6 - addCard(Zone.BATTLEFIELD, playerB, "Kessig Dire Swine", 1); // 6/6 (trample if delirium) - addCard(Zone.BATTLEFIELD, playerB, "Howlpack Wolf", 1); // 3/3 - addCard(Zone.BATTLEFIELD, playerB, "Incorrigible Youths", 1); // 4/3 - - // Trample requirement for Kessig Dire Swine - addCard(Zone.GRAVEYARD, playerB, "Forest", 1); - addCard(Zone.GRAVEYARD, playerB, "Memnite", 1); - addCard(Zone.GRAVEYARD, playerB, "Flight", 1); - addCard(Zone.GRAVEYARD, playerB, "Drain Life", 1); - - // Attack with all 4 creatures and block all with the Watcher in the Web - attack(2, playerB, "Kessig Dire Swine"); - attack(2, playerB, "Ulrich, Uncontested Alpha"); - attack(2, playerB, "Howlpack Wolf"); - attack(2, playerB, "Incorrigible Youths"); - - // BLOCKING ORDER MATTERS - the trampling creature must be selected to block first - block(2, playerA, "Watcher in the Web", "Kessig Dire Swine"); - block(2, playerA, "Watcher in the Web", "Ulrich, Uncontested Alpha"); - block(2, playerA, "Watcher in the Web", "Howlpack Wolf"); - // Don't block Incorrigible Youths - - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - // Damage 1 from Kessig Dire Swine + 4 from Incorrigible Youths - assertLife(playerA, 15); - } - - @Test - public void testCanOnlyBlockSingle() { - - // Hundred-Handed One {2}{W}{W} - // Monstrosity 3. {3}{W}{W}{W} (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.) - //As long as Hundred-Handed One is monstrous, it has reach and can block an additional ninety-nine creatures each combat. - addCard(Zone.BATTLEFIELD, playerA, "Hundred-Handed One", 1); - - addCard(Zone.BATTLEFIELD, playerB, "Bronze Sable", 1); // 2/1 - addCard(Zone.BATTLEFIELD, playerB, "Fabled Hero", 1); // 2/2 double strike - - // Attack with all 4 creatures and try and block both with hundred-handed one - attack(2, playerB, "Bronze Sable"); - attack(2, playerB, "Fabled Hero"); - - block(2, playerA, "Hundred-Handed One", "Bronze Sable"); - block(2, playerA, "Hundred-Handed One", "Fabled Hero"); - - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); - - // Will fail on purpose - we are trying to block too many creatures! - try { - execute(); - fail("Expected exception not thrown"); - } catch(UnsupportedOperationException e) { - assertEquals("Hundred-Handed One cannot block Fabled Hero it is already blocking the maximum amount of creatures.", e.getMessage()); - } - } - - @Test - public void testCanBlockMultiple() { - - // Hundred-Handed One {2}{W}{W} - // Monstrosity 3. {3}{W}{W}{W} (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.) - // As long as Hundred-Handed One is monstrous, it has reach and can block an additional ninety-nine creatures each combat. - addCard(Zone.BATTLEFIELD, playerA, "Hundred-Handed One", 1); - // For monstrosity - addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); - - addCard(Zone.BATTLEFIELD, playerB, "Bronze Sable", 1); // 2/1 - addCard(Zone.BATTLEFIELD, playerB, "Fabled Hero", 1); // 2/2 double strike - - // Make hundred-handed one monstrous - activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}{W}{W}{W}: Monstrosity 3."); - - // Attack with all 4 creatures and try and block both with hundred-handed one - attack(2, playerB, "Bronze Sable"); - attack(2, playerB, "Fabled Hero"); - - block(2, playerA, "Hundred-Handed One", "Bronze Sable"); - block(2, playerA, "Hundred-Handed One", "Fabled Hero"); - - setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); - - // Will not fail this time as hundred-handed one is monstrous and can block up to 100 creatures - execute(); - - // Was a 3/5 but monstrosity 3 - assertPowerToughness(playerA, "Hundred-Handed One", 6, 8); - // No one has been hit - assertLife(playerA, 20); - assertLife(playerB, 20); - } - - /* - * Reported bug: Night Market Guard was able to block a creature with Menace - */ - @Test - public void testNightMarketGuardShouldNotBlockCreatureWithMenace() - { - /* - Night Market Guard {3} 3/1 - Artifact Creature — Construct - Night Market Guard can block an additional creature each combat. - */ - String nMarketGuard = "Night Market Guard"; - - /* - Embraal Bruiser {1}{B} - Creature - Human Warrior - Embraal Bruiser enters the battlefield tapped. - Embraal Bruiser has menace as long as you control an artifact. - */ - String eBruiser = "Embraal Bruiser"; - - /* - {0} 1/1 - * Artifact Creature — Construct - */ - String memnite = "Memnite"; - - addCard(Zone.BATTLEFIELD, playerA, nMarketGuard); - addCard(Zone.BATTLEFIELD, playerB, eBruiser); - addCard(Zone.BATTLEFIELD, playerB, memnite); // only here to grant Embraal Menace - - attack(4, playerB, eBruiser); - block(4, playerA, nMarketGuard, eBruiser); - - setStopAt(4, PhaseStep.POSTCOMBAT_MAIN); - - // Catch the illegal block - try { - execute(); - fail("Expected exception not thrown"); - } catch(UnsupportedOperationException e) { - assertEquals("Embraal Bruiser is blocked by 1 creature(s). It has to be blocked by 2 or more.", e.getMessage()); - } - - } + +package org.mage.test.combat; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Ignore; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +/** + * + * @author jeffwadsworth + * @author Simown + */ +public class CanBlockMultipleCreaturesTest extends CardTestPlayerBase { + + @Test + public void testMultipleBlockWithTrample() { + + addCard(Zone.BATTLEFIELD, playerA, "Watcher in the Web", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Ulrich, Uncontested Alpha", 1); // 6/6 + addCard(Zone.BATTLEFIELD, playerB, "Kessig Dire Swine", 1); // 6/6 (trample if delirium) + addCard(Zone.BATTLEFIELD, playerB, "Howlpack Wolf", 1); // 3/3 + addCard(Zone.BATTLEFIELD, playerB, "Incorrigible Youths", 1); // 4/3 + + // Trample requirement for Kessig Dire Swine + addCard(Zone.GRAVEYARD, playerB, "Forest", 1); + addCard(Zone.GRAVEYARD, playerB, "Memnite", 1); + addCard(Zone.GRAVEYARD, playerB, "Flight", 1); + addCard(Zone.GRAVEYARD, playerB, "Drain Life", 1); + + // Attack with all 4 creatures and block all with the Watcher in the Web + attack(2, playerB, "Kessig Dire Swine"); + attack(2, playerB, "Ulrich, Uncontested Alpha"); + attack(2, playerB, "Howlpack Wolf"); + attack(2, playerB, "Incorrigible Youths"); + + // BLOCKING ORDER MATTERS - the trampling creature must be selected to block first + // You can manually change the blocking order but it's easier to assign them in order + block(2, playerA, "Watcher in the Web", "Kessig Dire Swine"); + block(2, playerA, "Watcher in the Web", "Ulrich, Uncontested Alpha"); + block(2, playerA, "Watcher in the Web", "Howlpack Wolf"); + block(2, playerA, "Watcher in the Web", "Incorrigible Youths"); + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 19); + + } + + @Test + public void testMultipleBlockWithTrample2() { + + addCard(Zone.BATTLEFIELD, playerA, "Watcher in the Web", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Ulrich, Uncontested Alpha", 1); // 6/6 + addCard(Zone.BATTLEFIELD, playerB, "Kessig Dire Swine", 1); // 6/6 (trample if delirium) + addCard(Zone.BATTLEFIELD, playerB, "Howlpack Wolf", 1); // 3/3 + addCard(Zone.BATTLEFIELD, playerB, "Incorrigible Youths", 1); // 4/3 + + // Trample requirement for Kessig Dire Swine + addCard(Zone.GRAVEYARD, playerB, "Forest", 1); + addCard(Zone.GRAVEYARD, playerB, "Memnite", 1); + addCard(Zone.GRAVEYARD, playerB, "Flight", 1); + addCard(Zone.GRAVEYARD, playerB, "Drain Life", 1); + + // Attack with all 4 creatures and block all with the Watcher in the Web + attack(2, playerB, "Kessig Dire Swine"); + attack(2, playerB, "Ulrich, Uncontested Alpha"); + attack(2, playerB, "Howlpack Wolf"); + attack(2, playerB, "Incorrigible Youths"); + + // BLOCKING ORDER MATTERS - the trampling creature must be selected to block first + block(2, playerA, "Watcher in the Web", "Kessig Dire Swine"); + block(2, playerA, "Watcher in the Web", "Ulrich, Uncontested Alpha"); + block(2, playerA, "Watcher in the Web", "Howlpack Wolf"); + // Don't block Incorrigible Youths + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + // Damage 1 from Kessig Dire Swine + 4 from Incorrigible Youths + assertLife(playerA, 15); + } + + @Test + public void testCanOnlyBlockSingle() { + + // Hundred-Handed One {2}{W}{W} + // Monstrosity 3. {3}{W}{W}{W} (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.) + //As long as Hundred-Handed One is monstrous, it has reach and can block an additional ninety-nine creatures each combat. + addCard(Zone.BATTLEFIELD, playerA, "Hundred-Handed One", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Bronze Sable", 1); // 2/1 + addCard(Zone.BATTLEFIELD, playerB, "Fabled Hero", 1); // 2/2 double strike + + // Attack with all 4 creatures and try and block both with hundred-handed one + attack(2, playerB, "Bronze Sable"); + attack(2, playerB, "Fabled Hero"); + + block(2, playerA, "Hundred-Handed One", "Bronze Sable"); + block(2, playerA, "Hundred-Handed One", "Fabled Hero"); + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + + // Will fail on purpose - we are trying to block too many creatures! + try { + execute(); + fail("Expected exception not thrown"); + } catch(UnsupportedOperationException e) { + assertEquals("Hundred-Handed One cannot block Fabled Hero it is already blocking the maximum amount of creatures.", e.getMessage()); + } + } + + @Test + public void testCanBlockMultiple() { + + // Hundred-Handed One {2}{W}{W} + // Monstrosity 3. {3}{W}{W}{W} (If this creature isn't monstrous, put three +1/+1 counters on it and it becomes monstrous.) + // As long as Hundred-Handed One is monstrous, it has reach and can block an additional ninety-nine creatures each combat. + addCard(Zone.BATTLEFIELD, playerA, "Hundred-Handed One", 1); + // For monstrosity + addCard(Zone.BATTLEFIELD, playerA, "Plains", 6); + + addCard(Zone.BATTLEFIELD, playerB, "Bronze Sable", 1); // 2/1 + addCard(Zone.BATTLEFIELD, playerB, "Fabled Hero", 1); // 2/2 double strike + + // Make hundred-handed one monstrous + activateAbility(2, PhaseStep.PRECOMBAT_MAIN, playerA, "{3}{W}{W}{W}: Monstrosity 3."); + + // Attack with all 4 creatures and try and block both with hundred-handed one + attack(2, playerB, "Bronze Sable"); + attack(2, playerB, "Fabled Hero"); + + block(2, playerA, "Hundred-Handed One", "Bronze Sable"); + block(2, playerA, "Hundred-Handed One", "Fabled Hero"); + + setStopAt(2, PhaseStep.POSTCOMBAT_MAIN); + + // Will not fail this time as hundred-handed one is monstrous and can block up to 100 creatures + execute(); + + // Was a 3/5 but monstrosity 3 + assertPowerToughness(playerA, "Hundred-Handed One", 6, 8); + // No one has been hit + assertLife(playerA, 20); + assertLife(playerB, 20); + } + + /* + * Reported bug: Night Market Guard was able to block a creature with Menace + */ + @Test + public void testNightMarketGuardShouldNotBlockCreatureWithMenace() + { + /* + Night Market Guard {3} 3/1 + Artifact Creature — Construct + Night Market Guard can block an additional creature each combat. + */ + String nMarketGuard = "Night Market Guard"; + + /* + Embraal Bruiser {1}{B} + Creature - Human Warrior + Embraal Bruiser enters the battlefield tapped. + Embraal Bruiser has menace as long as you control an artifact. + */ + String eBruiser = "Embraal Bruiser"; + + /* + {0} 1/1 + * Artifact Creature — Construct + */ + String memnite = "Memnite"; + + addCard(Zone.BATTLEFIELD, playerA, nMarketGuard); + addCard(Zone.BATTLEFIELD, playerB, eBruiser); + addCard(Zone.BATTLEFIELD, playerB, memnite); // only here to grant Embraal Menace + + attack(4, playerB, eBruiser); + block(4, playerA, nMarketGuard, eBruiser); + + setStopAt(4, PhaseStep.POSTCOMBAT_MAIN); + + // Catch the illegal block + try { + execute(); + fail("Expected exception not thrown"); + } catch(UnsupportedOperationException e) { + assertEquals("Embraal Bruiser is blocked by 1 creature(s). It has to be blocked by 2 or more.", e.getMessage()); + } + + } } \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/commander/duel/MairsilThePretenderTest.java b/Mage.Tests/src/test/java/org/mage/test/commander/duel/MairsilThePretenderTest.java index 786be26818f..2792c326bb5 100644 --- a/Mage.Tests/src/test/java/org/mage/test/commander/duel/MairsilThePretenderTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/commander/duel/MairsilThePretenderTest.java @@ -1,205 +1,205 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.commander.duel; - -import java.io.FileNotFoundException; -import mage.constants.PhaseStep; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.GameException; -import org.junit.Test; -import static org.mage.test.player.TestPlayer.NO_TARGET; -import org.mage.test.serverside.base.CardTestCommanderDuelBase; - -/** - * - * @author LevelX2 - */ -public class MairsilThePretenderTest extends CardTestCommanderDuelBase { - - @Override - protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { - // When Mairsil, the Pretender enters the battlefield, you may exile an artifact or creature card from your hand - // or graveyard and put a cage counter on it. - // Mairsil, the Pretender has all activated abilities of all cards you own in exile with cage counters on them. - // You may activate each of those abilities only once each turn. - setDecknamePlayerA("CommanderDuel_Mairisil_UBR.dck"); // Commander = Mairsil, the Pretender {1}{U}{B}{R} - return super.createNewGameAndPlayers(); - } - - /** - * Basic Test - */ - @Test - public void useShifitingShadowTest() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - addCard(Zone.BATTLEFIELD, playerA, "Island", 2); - addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 3); - skipInitShuffling(); - - // Enchant creature - // Enchanted creature has haste and “At the beginning of your upkeep, destroy this creature. - // Reveal cards from the top of your library until you reveal a creature card. - // Put that card onto the battlefield and attach Shifting Shadow to it, - // then put all other cards revealed this way on the bottom of your library in a random order.” - addCard(Zone.HAND, playerA, "Shifting Shadow", 1); // {2}{R} - - // Tap: Draw three cards. - // {2}{U}{U}: Return Arcanis the Omnipotent to its owner's hand. - addCard(Zone.HAND, playerA, "Arcanis the Omnipotent", 1); // Creature {3}{U}{U}{U} - - setChoice(playerA, "Yes"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mairsil, the Pretender"); - setChoice(playerA, "Yes"); // Exile a card - setChoice(playerA, "Arcanis the Omnipotent"); - - - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Shifting Shadow", "Mairsil, the Pretender"); - - setChoice(playerA, "Yes"); // Move commander to command zone - setStopAt(5, PhaseStep.PRECOMBAT_MAIN); - - setStrictChooseMode(true); - execute(); - assertAllCommandsUsed(); - - assertLife(playerA, 40); - assertLife(playerB, 40); - - assertExileCount("Arcanis the Omnipotent", 1); - - assertCommandZoneCount(playerA, "Mairsil, the Pretender", 1); - - assertPermanentCount(playerA, "Shifting Shadow", 1); - } - /** - * I tried playing it in Mairsil the Pretender commander deck and found 2 - * cases where the creature is not properly destroyed: - * - * Using Arcanis the Omnipotent ability to return my commander to hand while - * trigger is on the stack I got Mairsil to hand then got asked whether I - * want to put him in gy so I answered yes assuming it cannot be destroyed - * while in my hand. He got put in graveyard straight from my hand. - * According to Oracle rules I should get a creature from top of the deck - * and still have my commander in hand. After giving my commander undying - * with shifting shadow trigger on the stack he got put in gy with undying - * not triggering. - * - * All this points to the card being hardcoded to put the creature into - * graveyard instead of simply destroying it - */ - @Test - public void useShifitingShadowAndArcanisTest() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - addCard(Zone.BATTLEFIELD, playerA, "Island", 2); - addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 3); - skipInitShuffling(); - // Enchant creature - // Enchanted creature has haste and “At the beginning of your upkeep, destroy this creature. - // Reveal cards from the top of your library until you reveal a creature card. - // Put that card onto the battlefield and attach Shifting Shadow to it, - // then put all other cards revealed this way on the bottom of your library in a random order.” - addCard(Zone.HAND, playerA, "Shifting Shadow", 1); // {2}{R} - - // Tap: Draw three cards. - // {2}{U}{U}: Return Arcanis the Omnipotent to its owner's hand. - addCard(Zone.HAND, playerA, "Arcanis the Omnipotent", 1); // Creature {3}{U}{U}{U} - - setChoice(playerA, "Yes"); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mairsil, the Pretender"); - setChoice(playerA, "Yes"); // Exile a card - setChoice(playerA, "Arcanis the Omnipotent"); - - - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Shifting Shadow", "Mairsil, the Pretender"); - - activateAbility(5, PhaseStep.UPKEEP, playerA, "{2}{U}{U}: Return", NO_TARGET, "At the beginning of your upkeep"); - setChoice(playerA, "No"); // Don't move commander to command zone because it goes to hand - - setStopAt(5, PhaseStep.PRECOMBAT_MAIN); - - setStrictChooseMode(true); - execute(); - assertAllCommandsUsed(); - - assertLife(playerA, 40); - assertLife(playerB, 40); - - assertExileCount("Arcanis the Omnipotent", 1); - - assertCommandZoneCount(playerA, "Mairsil, the Pretender", 0); - assertHandCount(playerA, "Mairsil, the Pretender", 1); - - - assertGraveyardCount(playerA, "Shifting Shadow", 1); // Goes to graveyard because commander left battlefield to hand from Arcanis ability - assertPermanentCount(playerA, "Silvercoat Lion", 1); - } - - @Test - public void useShifitingShadowAndEndlingTest() { - addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); - addCard(Zone.BATTLEFIELD, playerA, "Island", 2); - addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 3); - skipInitShuffling(); - // Enchant creature - // Enchanted creature has haste and “At the beginning of your upkeep, destroy this creature. - // Reveal cards from the top of your library until you reveal a creature card. - // Put that card onto the battlefield and attach Shifting Shadow to it, - // then put all other cards revealed this way on the bottom of your library in a random order.” - addCard(Zone.HAND, playerA, "Shifting Shadow", 1); // {2}{R} - // Tap: Draw three cards. - // {2}{U}{U}: Return Arcanis the Omnipotent to its owner's hand. - addCard(Zone.HAND, playerA, "Arcanis the Omnipotent", 1); // Creature {3}{U}{U}{U} - // {B}: Endling gains menace until end of turn. - // {B}: Endling gains deathtouch until end of turn. - // {B}: Endling gains undying until end of turn. - // {1}: Endling gets +1/-1 or -1/+1 until end of turn. - addCard(Zone.HAND, playerA, "Endling", 1); // Creature {3}{U}{U}{U} - - - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mairsil, the Pretender"); - setChoice(playerA, "Yes"); // Exile a card - setChoice(playerA, "Yes"); // Exile from Hand - setChoice(playerA, "Endling"); - - - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Shifting Shadow", "Mairsil, the Pretender"); - - activateAbility(5, PhaseStep.UPKEEP, playerA, "{B}: {this} gains Undying", NO_TARGET, "At the beginning of your upkeep"); - setChoice(playerA, "No"); // Don't move commander to command zone because can come back by Undying - - setChoice(playerA, "Yes"); // Exile a card (Mairsil comes back from Undying) - setChoice(playerA, "Yes"); // Exile from hand - setChoice(playerA, "Arcanis the Omnipotent"); - - setStopAt(5, PhaseStep.PRECOMBAT_MAIN); - - setStrictChooseMode(true); - execute(); - assertAllCommandsUsed(); - - assertLife(playerA, 40); - assertLife(playerB, 40); - - assertExileCount("Endling", 1); - assertExileCount("Arcanis the Omnipotent", 1); - - assertCommandZoneCount(playerA, "Mairsil, the Pretender", 0); - assertGraveyardCount(playerA, "Mairsil, the Pretender", 0); - assertPermanentCount(playerA, "Mairsil, the Pretender", 1); // Returns from Undying - assertPowerToughness(playerA, "Mairsil, the Pretender", 5, 5); - - assertPermanentCount(playerA, "Shifting Shadow", 1); // Enchants Silvercoat Lion - assertPermanentCount(playerA, "Silvercoat Lion", 1); - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.commander.duel; + +import java.io.FileNotFoundException; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.GameException; +import org.junit.Test; +import static org.mage.test.player.TestPlayer.NO_TARGET; +import org.mage.test.serverside.base.CardTestCommanderDuelBase; + +/** + * + * @author LevelX2 + */ +public class MairsilThePretenderTest extends CardTestCommanderDuelBase { + + @Override + protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { + // When Mairsil, the Pretender enters the battlefield, you may exile an artifact or creature card from your hand + // or graveyard and put a cage counter on it. + // Mairsil, the Pretender has all activated abilities of all cards you own in exile with cage counters on them. + // You may activate each of those abilities only once each turn. + setDecknamePlayerA("CommanderDuel_Mairisil_UBR.dck"); // Commander = Mairsil, the Pretender {1}{U}{B}{R} + return super.createNewGameAndPlayers(); + } + + /** + * Basic Test + */ + @Test + public void useShifitingShadowTest() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 3); + skipInitShuffling(); + + // Enchant creature + // Enchanted creature has haste and “At the beginning of your upkeep, destroy this creature. + // Reveal cards from the top of your library until you reveal a creature card. + // Put that card onto the battlefield and attach Shifting Shadow to it, + // then put all other cards revealed this way on the bottom of your library in a random order.” + addCard(Zone.HAND, playerA, "Shifting Shadow", 1); // {2}{R} + + // Tap: Draw three cards. + // {2}{U}{U}: Return Arcanis the Omnipotent to its owner's hand. + addCard(Zone.HAND, playerA, "Arcanis the Omnipotent", 1); // Creature {3}{U}{U}{U} + + setChoice(playerA, "Yes"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mairsil, the Pretender"); + setChoice(playerA, "Yes"); // Exile a card + setChoice(playerA, "Arcanis the Omnipotent"); + + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Shifting Shadow", "Mairsil, the Pretender"); + + setChoice(playerA, "Yes"); // Move commander to command zone + setStopAt(5, PhaseStep.PRECOMBAT_MAIN); + + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertLife(playerA, 40); + assertLife(playerB, 40); + + assertExileCount("Arcanis the Omnipotent", 1); + + assertCommandZoneCount(playerA, "Mairsil, the Pretender", 1); + + assertPermanentCount(playerA, "Shifting Shadow", 1); + } + /** + * I tried playing it in Mairsil the Pretender commander deck and found 2 + * cases where the creature is not properly destroyed: + * + * Using Arcanis the Omnipotent ability to return my commander to hand while + * trigger is on the stack I got Mairsil to hand then got asked whether I + * want to put him in gy so I answered yes assuming it cannot be destroyed + * while in my hand. He got put in graveyard straight from my hand. + * According to Oracle rules I should get a creature from top of the deck + * and still have my commander in hand. After giving my commander undying + * with shifting shadow trigger on the stack he got put in gy with undying + * not triggering. + * + * All this points to the card being hardcoded to put the creature into + * graveyard instead of simply destroying it + */ + @Test + public void useShifitingShadowAndArcanisTest() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 3); + skipInitShuffling(); + // Enchant creature + // Enchanted creature has haste and “At the beginning of your upkeep, destroy this creature. + // Reveal cards from the top of your library until you reveal a creature card. + // Put that card onto the battlefield and attach Shifting Shadow to it, + // then put all other cards revealed this way on the bottom of your library in a random order.” + addCard(Zone.HAND, playerA, "Shifting Shadow", 1); // {2}{R} + + // Tap: Draw three cards. + // {2}{U}{U}: Return Arcanis the Omnipotent to its owner's hand. + addCard(Zone.HAND, playerA, "Arcanis the Omnipotent", 1); // Creature {3}{U}{U}{U} + + setChoice(playerA, "Yes"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mairsil, the Pretender"); + setChoice(playerA, "Yes"); // Exile a card + setChoice(playerA, "Arcanis the Omnipotent"); + + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Shifting Shadow", "Mairsil, the Pretender"); + + activateAbility(5, PhaseStep.UPKEEP, playerA, "{2}{U}{U}: Return", NO_TARGET, "At the beginning of your upkeep"); + setChoice(playerA, "No"); // Don't move commander to command zone because it goes to hand + + setStopAt(5, PhaseStep.PRECOMBAT_MAIN); + + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertLife(playerA, 40); + assertLife(playerB, 40); + + assertExileCount("Arcanis the Omnipotent", 1); + + assertCommandZoneCount(playerA, "Mairsil, the Pretender", 0); + assertHandCount(playerA, "Mairsil, the Pretender", 1); + + + assertGraveyardCount(playerA, "Shifting Shadow", 1); // Goes to graveyard because commander left battlefield to hand from Arcanis ability + assertPermanentCount(playerA, "Silvercoat Lion", 1); + } + + @Test + public void useShifitingShadowAndEndlingTest() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 1); + addCard(Zone.BATTLEFIELD, playerA, "Island", 2); + addCard(Zone.LIBRARY, playerA, "Silvercoat Lion", 3); + skipInitShuffling(); + // Enchant creature + // Enchanted creature has haste and “At the beginning of your upkeep, destroy this creature. + // Reveal cards from the top of your library until you reveal a creature card. + // Put that card onto the battlefield and attach Shifting Shadow to it, + // then put all other cards revealed this way on the bottom of your library in a random order.” + addCard(Zone.HAND, playerA, "Shifting Shadow", 1); // {2}{R} + // Tap: Draw three cards. + // {2}{U}{U}: Return Arcanis the Omnipotent to its owner's hand. + addCard(Zone.HAND, playerA, "Arcanis the Omnipotent", 1); // Creature {3}{U}{U}{U} + // {B}: Endling gains menace until end of turn. + // {B}: Endling gains deathtouch until end of turn. + // {B}: Endling gains undying until end of turn. + // {1}: Endling gets +1/-1 or -1/+1 until end of turn. + addCard(Zone.HAND, playerA, "Endling", 1); // Creature {3}{U}{U}{U} + + + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Mairsil, the Pretender"); + setChoice(playerA, "Yes"); // Exile a card + setChoice(playerA, "Yes"); // Exile from Hand + setChoice(playerA, "Endling"); + + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerA, "Shifting Shadow", "Mairsil, the Pretender"); + + activateAbility(5, PhaseStep.UPKEEP, playerA, "{B}: {this} gains Undying", NO_TARGET, "At the beginning of your upkeep"); + setChoice(playerA, "No"); // Don't move commander to command zone because can come back by Undying + + setChoice(playerA, "Yes"); // Exile a card (Mairsil comes back from Undying) + setChoice(playerA, "Yes"); // Exile from hand + setChoice(playerA, "Arcanis the Omnipotent"); + + setStopAt(5, PhaseStep.PRECOMBAT_MAIN); + + setStrictChooseMode(true); + execute(); + assertAllCommandsUsed(); + + assertLife(playerA, 40); + assertLife(playerB, 40); + + assertExileCount("Endling", 1); + assertExileCount("Arcanis the Omnipotent", 1); + + assertCommandZoneCount(playerA, "Mairsil, the Pretender", 0); + assertGraveyardCount(playerA, "Mairsil, the Pretender", 0); + assertPermanentCount(playerA, "Mairsil, the Pretender", 1); // Returns from Undying + assertPowerToughness(playerA, "Mairsil, the Pretender", 5, 5); + + assertPermanentCount(playerA, "Shifting Shadow", 1); // Enchants Silvercoat Lion + assertPermanentCount(playerA, "Silvercoat Lion", 1); + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/game/ends/PhageTheUntouchableTest.java b/Mage.Tests/src/test/java/org/mage/test/game/ends/PhageTheUntouchableTest.java index e56534cb3ea..04abf5db4b3 100644 --- a/Mage.Tests/src/test/java/org/mage/test/game/ends/PhageTheUntouchableTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/game/ends/PhageTheUntouchableTest.java @@ -1,57 +1,57 @@ - -package org.mage.test.game.ends; - -import mage.constants.PhaseStep; -import mage.constants.TurnPhase; -import mage.constants.Zone; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class PhageTheUntouchableTest extends CardTestPlayerBase { - - @Test - public void TestWithEndlessWhispers() { - // Each creature has "When this creature dies, choose target opponent. - // That player puts this card from its owner's graveyard onto the battlefield - // under their control at the beginning of the next end step." - addCard(Zone.BATTLEFIELD, playerA, "Endless Whispers"); - - // Destroy target creature or planeswalker.. - addCard(Zone.HAND, playerA, "Hero's Downfall"); // {1}{B}{B} - - // When Phage the Untouchable enters the battlefield, if you didn't cast it from your hand, you lose the game. - // Whenever Phage deals combat damage to a creature, destroy that creature. It can't be regenerated. - // Whenever Phage deals combat damage to a player, that player loses the game. - addCard(Zone.HAND, playerA, "Phage the Untouchable"); // Creature {3}{B}{B}{B}{B} 4/4 - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phage the Untouchable"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hero's Downfall", "Phage the Untouchable"); - addTarget(playerA, playerB); - - setStopAt(2, PhaseStep.BEGIN_COMBAT); - - setStrictChooseMode(true); - - execute(); - - assertAllCommandsUsed(); - - assertLife(playerA, 20); - assertLife(playerB, 20); - - assertGraveyardCount(playerA, "Hero's Downfall", 1); - assertPermanentCount(playerB, "Phage the Untouchable", 1); - - Assert.assertTrue("Game has ended.", currentGame.hasEnded()); - Assert.assertTrue("Player A has won.", playerA.hasWon()); - Assert.assertTrue("Game ist At end phase", currentGame.getPhase().getType() == TurnPhase.END); - - } - -} + +package org.mage.test.game.ends; + +import mage.constants.PhaseStep; +import mage.constants.TurnPhase; +import mage.constants.Zone; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class PhageTheUntouchableTest extends CardTestPlayerBase { + + @Test + public void TestWithEndlessWhispers() { + // Each creature has "When this creature dies, choose target opponent. + // That player puts this card from its owner's graveyard onto the battlefield + // under their control at the beginning of the next end step." + addCard(Zone.BATTLEFIELD, playerA, "Endless Whispers"); + + // Destroy target creature or planeswalker.. + addCard(Zone.HAND, playerA, "Hero's Downfall"); // {1}{B}{B} + + // When Phage the Untouchable enters the battlefield, if you didn't cast it from your hand, you lose the game. + // Whenever Phage deals combat damage to a creature, destroy that creature. It can't be regenerated. + // Whenever Phage deals combat damage to a player, that player loses the game. + addCard(Zone.HAND, playerA, "Phage the Untouchable"); // Creature {3}{B}{B}{B}{B} 4/4 + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 10); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Phage the Untouchable"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Hero's Downfall", "Phage the Untouchable"); + addTarget(playerA, playerB); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + + setStrictChooseMode(true); + + execute(); + + assertAllCommandsUsed(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertGraveyardCount(playerA, "Hero's Downfall", 1); + assertPermanentCount(playerB, "Phage the Untouchable", 1); + + Assert.assertTrue("Game has ended.", currentGame.hasEnded()); + Assert.assertTrue("Player A has won.", playerA.hasWon()); + Assert.assertTrue("Game ist At end phase", currentGame.getPhase().getType() == TurnPhase.END); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/multiplayer/PlayerWinsTest.java b/Mage.Tests/src/test/java/org/mage/test/multiplayer/PlayerWinsTest.java index 1a31ecac58e..b2297d779a8 100644 --- a/Mage.Tests/src/test/java/org/mage/test/multiplayer/PlayerWinsTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/multiplayer/PlayerWinsTest.java @@ -1,160 +1,160 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.multiplayer; - -import java.io.FileNotFoundException; -import mage.constants.MultiplayerAttackOption; -import mage.constants.PhaseStep; -import mage.constants.RangeOfInfluence; -import mage.constants.Zone; -import mage.game.FreeForAll; -import mage.game.Game; -import mage.game.GameException; -import mage.game.mulligan.MulliganType; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestMultiPlayerBase; - - -/** - * @author LevelX2 - */ -public class PlayerWinsTest extends CardTestMultiPlayerBase { - - @Override - protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { - Game game = new FreeForAll(MultiplayerAttackOption.MULTIPLE, RangeOfInfluence.ONE, MulliganType.GAME_DEFAULT.getMulligan(0), 40); - // Player order: A -> D -> C -> B - playerA = createPlayer(game, playerA, "PlayerA"); - playerB = createPlayer(game, playerB, "PlayerB"); - playerC = createPlayer(game, playerC, "PlayerC"); - playerD = createPlayer(game, playerD, "PlayerD"); - return game; - } - - /** - * Tests multiplayer effects Player order: A -> D -> C -> B - */ - - /** - * Test that players out of range do not lose the game if effect from Approach of the Seconnd Sun takes effect. - */ - @Test - public void ApproachOfTheSecondSunTest() { - - // If this spell was cast from your hand and you've cast another spell named Approach of the Second Sun this game, - // you win the game. Otherwise, put Approach of the Second Sun into its owner's library seventh from the top and you gain 7 life. - addCard(Zone.HAND, playerA, "Approach of the Second Sun", 2); // Sorcery {6}{W} - addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Approach of the Second Sun"); - castSpell(5, PhaseStep.PRECOMBAT_MAIN, playerA, "Approach of the Second Sun"); - - setStopAt(5, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertLife(playerA, 47); - assertLife(playerC, 40); - Assert.assertTrue("Player D still alive but should have lost the game", !playerD.isInGame()); - Assert.assertTrue("Player B still alive but should have lost the game", !playerB.isInGame()); - Assert.assertTrue("Player C is in the game", playerC.isInGame()); - Assert.assertTrue("Player A is in the game", playerA.isInGame()); - - } - - /** - * Test that players out of range do not lose the game if effect from Laboratory Maniac takes effect. - */ - @Test - public void LaboratoryManiacWinsTest() { - // If you would draw a card while your library has no cards in it, you win the game instead. - addCard(Zone.HAND, playerA, "Laboratory Maniac", 1); // Creature {2}{U} - addCard(Zone.BATTLEFIELD, playerA, "Island", 3); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Laboratory Maniac"); - removeAllCardsFromLibrary(playerA); - addCard(Zone.LIBRARY, playerA, "Mountain"); - - setStopAt(5, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertPermanentCount(playerA, "Laboratory Maniac", 1); - assertHandCount(playerA, "Mountain", 1); - assertLibraryCount(playerA, 0); - Assert.assertTrue("Player D still alive but should have lost the game", !playerD.isInGame()); - Assert.assertTrue("Player B still alive but should have lost the game", !playerB.isInGame()); - Assert.assertTrue("Player C should be in the game but has lost", playerC.isInGame()); - Assert.assertTrue("Player A should be in the game but has lost", playerA.isInGame()); - } - - /** - * Test that player can't win while Platinium Angel ist in range. - */ - @Test - public void LaboratoryManiacAndPlatinumAngelInRangeTest() { - // If you would draw a card while your library has no cards in it, you win the game instead. - addCard(Zone.HAND, playerA, "Laboratory Maniac", 1); // Creature {2}{U} - addCard(Zone.BATTLEFIELD, playerA, "Island", 3); - removeAllCardsFromLibrary(playerA); - - // You can't lose the game and your opponents can't win the game. - addCard(Zone.HAND, playerD, "Platinum Angel", 1); // Creature {2}{U} - addCard(Zone.BATTLEFIELD, playerD, "Island", 7); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Laboratory Maniac"); - addCard(Zone.LIBRARY, playerA, "Mountain"); - - castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerD, "Platinum Angel"); - - setStopAt(9, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertPermanentCount(playerA, "Laboratory Maniac", 1); - assertHandCount(playerA, "Mountain", 1); - assertLibraryCount(playerA, 0); - - assertPermanentCount(playerD, "Platinum Angel", 1); - - Assert.assertTrue("Player D should be in the game but has lost", playerD.isInGame()); - Assert.assertTrue("Player B should be in the game but has lost", playerB.isInGame()); - Assert.assertTrue("Player C should be in the game but has lost", playerC.isInGame()); - Assert.assertTrue("Player A should be in the game but has lost", playerA.isInGame()); - } - - /** - * Test that player can't win while Platinium Angel ist in range. - */ - @Test - public void LaboratoryManiacAndPlatinumAngelFirstOutOfRangeTest() { - // If you would draw a card while your library has no cards in it, you win the game instead. - addCard(Zone.HAND, playerA, "Laboratory Maniac", 1); // Creature {2}{U} - addCard(Zone.BATTLEFIELD, playerA, "Island", 3); - removeAllCardsFromLibrary(playerA); - - // You can't lose the game and your opponents can't win the game. - addCard(Zone.HAND, playerC, "Platinum Angel", 1); // Creature {2}{U} - addCard(Zone.BATTLEFIELD, playerC, "Island", 7); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Laboratory Maniac"); - addCard(Zone.LIBRARY, playerA, "Mountain"); - - castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerC, "Platinum Angel"); - - setStopAt(9, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertPermanentCount(playerA, "Laboratory Maniac", 1); - assertHandCount(playerA, "Mountain", 1); - assertLibraryCount(playerA, 0); - - assertPermanentCount(playerC, "Platinum Angel", 1); - - Assert.assertTrue("Player D still alive but should have lost the gamet", !playerD.isInGame()); - Assert.assertTrue("Player B still alive but should have lost the game", !playerB.isInGame()); - Assert.assertTrue("Player C should be in the game but has lost", playerC.isInGame()); - Assert.assertTrue("Player A should be in the game but has lost", playerA.isInGame()); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.multiplayer; + +import java.io.FileNotFoundException; +import mage.constants.MultiplayerAttackOption; +import mage.constants.PhaseStep; +import mage.constants.RangeOfInfluence; +import mage.constants.Zone; +import mage.game.FreeForAll; +import mage.game.Game; +import mage.game.GameException; +import mage.game.mulligan.MulliganType; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestMultiPlayerBase; + + +/** + * @author LevelX2 + */ +public class PlayerWinsTest extends CardTestMultiPlayerBase { + + @Override + protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { + Game game = new FreeForAll(MultiplayerAttackOption.MULTIPLE, RangeOfInfluence.ONE, MulliganType.GAME_DEFAULT.getMulligan(0), 40); + // Player order: A -> D -> C -> B + playerA = createPlayer(game, playerA, "PlayerA"); + playerB = createPlayer(game, playerB, "PlayerB"); + playerC = createPlayer(game, playerC, "PlayerC"); + playerD = createPlayer(game, playerD, "PlayerD"); + return game; + } + + /** + * Tests multiplayer effects Player order: A -> D -> C -> B + */ + + /** + * Test that players out of range do not lose the game if effect from Approach of the Seconnd Sun takes effect. + */ + @Test + public void ApproachOfTheSecondSunTest() { + + // If this spell was cast from your hand and you've cast another spell named Approach of the Second Sun this game, + // you win the game. Otherwise, put Approach of the Second Sun into its owner's library seventh from the top and you gain 7 life. + addCard(Zone.HAND, playerA, "Approach of the Second Sun", 2); // Sorcery {6}{W} + addCard(Zone.BATTLEFIELD, playerA, "Plains", 7); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Approach of the Second Sun"); + castSpell(5, PhaseStep.PRECOMBAT_MAIN, playerA, "Approach of the Second Sun"); + + setStopAt(5, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 47); + assertLife(playerC, 40); + Assert.assertTrue("Player D still alive but should have lost the game", !playerD.isInGame()); + Assert.assertTrue("Player B still alive but should have lost the game", !playerB.isInGame()); + Assert.assertTrue("Player C is in the game", playerC.isInGame()); + Assert.assertTrue("Player A is in the game", playerA.isInGame()); + + } + + /** + * Test that players out of range do not lose the game if effect from Laboratory Maniac takes effect. + */ + @Test + public void LaboratoryManiacWinsTest() { + // If you would draw a card while your library has no cards in it, you win the game instead. + addCard(Zone.HAND, playerA, "Laboratory Maniac", 1); // Creature {2}{U} + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Laboratory Maniac"); + removeAllCardsFromLibrary(playerA); + addCard(Zone.LIBRARY, playerA, "Mountain"); + + setStopAt(5, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Laboratory Maniac", 1); + assertHandCount(playerA, "Mountain", 1); + assertLibraryCount(playerA, 0); + Assert.assertTrue("Player D still alive but should have lost the game", !playerD.isInGame()); + Assert.assertTrue("Player B still alive but should have lost the game", !playerB.isInGame()); + Assert.assertTrue("Player C should be in the game but has lost", playerC.isInGame()); + Assert.assertTrue("Player A should be in the game but has lost", playerA.isInGame()); + } + + /** + * Test that player can't win while Platinium Angel ist in range. + */ + @Test + public void LaboratoryManiacAndPlatinumAngelInRangeTest() { + // If you would draw a card while your library has no cards in it, you win the game instead. + addCard(Zone.HAND, playerA, "Laboratory Maniac", 1); // Creature {2}{U} + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + removeAllCardsFromLibrary(playerA); + + // You can't lose the game and your opponents can't win the game. + addCard(Zone.HAND, playerD, "Platinum Angel", 1); // Creature {2}{U} + addCard(Zone.BATTLEFIELD, playerD, "Island", 7); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Laboratory Maniac"); + addCard(Zone.LIBRARY, playerA, "Mountain"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerD, "Platinum Angel"); + + setStopAt(9, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Laboratory Maniac", 1); + assertHandCount(playerA, "Mountain", 1); + assertLibraryCount(playerA, 0); + + assertPermanentCount(playerD, "Platinum Angel", 1); + + Assert.assertTrue("Player D should be in the game but has lost", playerD.isInGame()); + Assert.assertTrue("Player B should be in the game but has lost", playerB.isInGame()); + Assert.assertTrue("Player C should be in the game but has lost", playerC.isInGame()); + Assert.assertTrue("Player A should be in the game but has lost", playerA.isInGame()); + } + + /** + * Test that player can't win while Platinium Angel ist in range. + */ + @Test + public void LaboratoryManiacAndPlatinumAngelFirstOutOfRangeTest() { + // If you would draw a card while your library has no cards in it, you win the game instead. + addCard(Zone.HAND, playerA, "Laboratory Maniac", 1); // Creature {2}{U} + addCard(Zone.BATTLEFIELD, playerA, "Island", 3); + removeAllCardsFromLibrary(playerA); + + // You can't lose the game and your opponents can't win the game. + addCard(Zone.HAND, playerC, "Platinum Angel", 1); // Creature {2}{U} + addCard(Zone.BATTLEFIELD, playerC, "Island", 7); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Laboratory Maniac"); + addCard(Zone.LIBRARY, playerA, "Mountain"); + + castSpell(3, PhaseStep.PRECOMBAT_MAIN, playerC, "Platinum Angel"); + + setStopAt(9, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Laboratory Maniac", 1); + assertHandCount(playerA, "Mountain", 1); + assertLibraryCount(playerA, 0); + + assertPermanentCount(playerC, "Platinum Angel", 1); + + Assert.assertTrue("Player D still alive but should have lost the gamet", !playerD.isInGame()); + Assert.assertTrue("Player B still alive but should have lost the game", !playerB.isInGame()); + Assert.assertTrue("Player C should be in the game but has lost", playerC.isInGame()); + Assert.assertTrue("Player A should be in the game but has lost", playerA.isInGame()); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/oathbreaker/FFA3/BasicSaheekiSublimeArtificerTest.java b/Mage.Tests/src/test/java/org/mage/test/oathbreaker/FFA3/BasicSaheekiSublimeArtificerTest.java index 118983824d3..da1dae2834c 100644 --- a/Mage.Tests/src/test/java/org/mage/test/oathbreaker/FFA3/BasicSaheekiSublimeArtificerTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/oathbreaker/FFA3/BasicSaheekiSublimeArtificerTest.java @@ -1,69 +1,69 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.oathbreaker.FFA3; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestOathbreaker3PlayersFFA; - -/** - * - * @author LevelX2 - */ - -public class BasicSaheekiSublimeArtificerTest extends CardTestOathbreaker3PlayersFFA { - - /** - * Check that if a player left the game, it's commander is also removed - */ - @Test - public void commanderRemovedTest() { - - concede(1, PhaseStep.PRECOMBAT_MAIN, playerA); - setStopAt(1, PhaseStep.DECLARE_ATTACKERS); - execute(); - - assertCommandZoneCount(playerB, "Saheeli, Sublime Artificer", 1); - assertCommandZoneCount(playerB, "Thoughtcast", 1); - assertCommandZoneCount(playerC, "Saheeli, Sublime Artificer", 1); - assertCommandZoneCount(playerC, "Thoughtcast", 1); - assertCommandZoneCount(playerA, "Saheeli, Sublime Artificer", 0); - assertCommandZoneCount(playerA, "Thoughtcast", 0); - - } - - @Test - public void castCommanderTest() { - - addCard(Zone.BATTLEFIELD, playerA, "Island", 4); - addCard(Zone.BATTLEFIELD, playerA, "Ornithopter", 4); - - // Planeswalker 5 Loyality Counter - // Whenever you cast a noncreature spell, create a 1/1 colorless Servo artifact creature token. - // -2: Target artifact you control becomes a copy of another target artifact or creature you control until end of turn, - // except it's an artifact in addition to its other types. - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Saheeli, Sublime Artificer"); // Planeswalker 5 {1}{U/R}{U/R} - - // Affinity for artifacts - // Draw two cards. - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Thoughtcast"); // Sorcery {4}{U} - - setStopAt(1, PhaseStep.DECLARE_ATTACKERS); - execute(); - - - assertCommandZoneCount(playerB, "Saheeli, Sublime Artificer", 1); - assertCommandZoneCount(playerB, "Thoughtcast", 1); - assertCommandZoneCount(playerC, "Saheeli, Sublime Artificer", 1); - assertCommandZoneCount(playerC, "Thoughtcast", 1); - - assertHandCount(playerA, 3); - assertPermanentCount(playerA, "Saheeli, Sublime Artificer", 1); - assertCommandZoneCount(playerA, "Thoughtcast", 1); - - } +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.oathbreaker.FFA3; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestOathbreaker3PlayersFFA; + +/** + * + * @author LevelX2 + */ + +public class BasicSaheekiSublimeArtificerTest extends CardTestOathbreaker3PlayersFFA { + + /** + * Check that if a player left the game, it's commander is also removed + */ + @Test + public void commanderRemovedTest() { + + concede(1, PhaseStep.PRECOMBAT_MAIN, playerA); + setStopAt(1, PhaseStep.DECLARE_ATTACKERS); + execute(); + + assertCommandZoneCount(playerB, "Saheeli, Sublime Artificer", 1); + assertCommandZoneCount(playerB, "Thoughtcast", 1); + assertCommandZoneCount(playerC, "Saheeli, Sublime Artificer", 1); + assertCommandZoneCount(playerC, "Thoughtcast", 1); + assertCommandZoneCount(playerA, "Saheeli, Sublime Artificer", 0); + assertCommandZoneCount(playerA, "Thoughtcast", 0); + + } + + @Test + public void castCommanderTest() { + + addCard(Zone.BATTLEFIELD, playerA, "Island", 4); + addCard(Zone.BATTLEFIELD, playerA, "Ornithopter", 4); + + // Planeswalker 5 Loyality Counter + // Whenever you cast a noncreature spell, create a 1/1 colorless Servo artifact creature token. + // -2: Target artifact you control becomes a copy of another target artifact or creature you control until end of turn, + // except it's an artifact in addition to its other types. + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Saheeli, Sublime Artificer"); // Planeswalker 5 {1}{U/R}{U/R} + + // Affinity for artifacts + // Draw two cards. + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Thoughtcast"); // Sorcery {4}{U} + + setStopAt(1, PhaseStep.DECLARE_ATTACKERS); + execute(); + + + assertCommandZoneCount(playerB, "Saheeli, Sublime Artificer", 1); + assertCommandZoneCount(playerB, "Thoughtcast", 1); + assertCommandZoneCount(playerC, "Saheeli, Sublime Artificer", 1); + assertCommandZoneCount(playerC, "Thoughtcast", 1); + + assertHandCount(playerA, 3); + assertPermanentCount(playerA, "Saheeli, Sublime Artificer", 1); + assertCommandZoneCount(playerA, "Thoughtcast", 1); + + } } \ No newline at end of file diff --git a/Mage.Tests/src/test/java/org/mage/test/rollback/DemonicPactTest.java b/Mage.Tests/src/test/java/org/mage/test/rollback/DemonicPactTest.java index c741768a7ae..b48a60b38b7 100644 --- a/Mage.Tests/src/test/java/org/mage/test/rollback/DemonicPactTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/rollback/DemonicPactTest.java @@ -1,127 +1,127 @@ -package org.mage.test.rollback; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Assert; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class DemonicPactTest extends CardTestPlayerBase { - - @Test - public void testModes() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4); - // At the beginning of your upkeep, choose one that hasn't been chosen - // (1) - Demonic Pact deals 4 damage to any target and you gain 4 life; - // (2) - Target opponent discards two cards - // (3) - Draw two cards - // (4) - You lose the game. - addCard(Zone.HAND, playerA, "Demonic Pact"); // Enchantment {2}{B}{B} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Demonic Pact"); - - setModeChoice(playerA, "3"); - - setModeChoice(playerA, "2"); - addTarget(playerA, playerB); - - setModeChoice(playerA, "1"); - addTarget(playerA, playerB); - - setStopAt(7, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertPermanentCount(playerA, "Demonic Pact", 1); - assertLife(playerA, 24); - assertLife(playerB, 16); - assertHandCount(playerB, 1); // discard 2 + 3 from regular draws - - assertHandCount(playerA, 5); // two from Demonic Pact + 3 from regular draws - - } - - /* - The rollback to the start of the turn does not correctly reset the already selected choices from Demonic Pact. They are not available again. - */ - @Test - public void testModeAfterRollback() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4); - // At the beginning of your upkeep, choose one that hasn't been chosen - // (1) - Demonic Pact deals 4 damage to any target and you gain 4 life; - // (2) - Target opponent discards two cards - // (3) - Draw two cards - // (4) - You lose the game. - addCard(Zone.HAND, playerA, "Demonic Pact"); // Enchantment {2}{B}{B} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Demonic Pact"); - - setModeChoice(playerA, "1"); - addTarget(playerA, playerB); - - rollbackTurns(3, PhaseStep.PRECOMBAT_MAIN, playerA, 0); - - setStopAt(3, PhaseStep.BEGIN_COMBAT); - execute(); - - assertHandCount(playerA, 1); // 1 from regular draws - assertHandCount(playerB, 1); // 1 from regular draw - - assertLife(playerA, 24); - assertLife(playerB, 16); - - } - - /** - * Rollback problem with Pact of Negation etc [cards] #4659 - * - * Potential bug here for [Pact of Negation] and similar cards with 0 cost - * and demand to pay or lose the next turn. - * - * So can you check the following scenario where I think the game is buggy: - * an opponent casts pact of negation on my turn, his next turn he requests - * a rollback to beginning of his turn -- bingo I'm a winner and he loses - * the game. The log says I'm the winner and the opponent lost and that is - * immediately after rollback request. - */ - - @Test - public void testPactOfNegationRollback() { - addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); - addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); - - - addCard(Zone.BATTLEFIELD, playerB, "Island", 5); - // Counter target spell. - // At the beginning of your next upkeep, pay {3}{U}{U}. If you don't, you lose the game. - addCard(Zone.HAND, playerB, "Pact of Negation"); // Instant {0} - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Pact of Negation", "Silvercoat Lion", "Silvercoat Lion"); - - setChoice(playerB, "Yes"); - - rollbackTurns(2, PhaseStep.PRECOMBAT_MAIN, playerB, 0); - - setStrictChooseMode(true); - setStopAt(2, PhaseStep.BEGIN_COMBAT); - execute(); - - assertAllCommandsUsed(); - - - assertGraveyardCount(playerA, "Silvercoat Lion", 1); - assertGraveyardCount(playerB, "Pact of Negation", 1); - - Assert.assertTrue("Player A is still in game", playerA.isInGame()); - Assert.assertTrue("Player B is still in game", playerB.isInGame()); - - assertTappedCount("Island", true, 5); - - - } - -} +package org.mage.test.rollback; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class DemonicPactTest extends CardTestPlayerBase { + + @Test + public void testModes() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4); + // At the beginning of your upkeep, choose one that hasn't been chosen + // (1) - Demonic Pact deals 4 damage to any target and you gain 4 life; + // (2) - Target opponent discards two cards + // (3) - Draw two cards + // (4) - You lose the game. + addCard(Zone.HAND, playerA, "Demonic Pact"); // Enchantment {2}{B}{B} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Demonic Pact"); + + setModeChoice(playerA, "3"); + + setModeChoice(playerA, "2"); + addTarget(playerA, playerB); + + setModeChoice(playerA, "1"); + addTarget(playerA, playerB); + + setStopAt(7, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertPermanentCount(playerA, "Demonic Pact", 1); + assertLife(playerA, 24); + assertLife(playerB, 16); + assertHandCount(playerB, 1); // discard 2 + 3 from regular draws + + assertHandCount(playerA, 5); // two from Demonic Pact + 3 from regular draws + + } + + /* + The rollback to the start of the turn does not correctly reset the already selected choices from Demonic Pact. They are not available again. + */ + @Test + public void testModeAfterRollback() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 4); + // At the beginning of your upkeep, choose one that hasn't been chosen + // (1) - Demonic Pact deals 4 damage to any target and you gain 4 life; + // (2) - Target opponent discards two cards + // (3) - Draw two cards + // (4) - You lose the game. + addCard(Zone.HAND, playerA, "Demonic Pact"); // Enchantment {2}{B}{B} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Demonic Pact"); + + setModeChoice(playerA, "1"); + addTarget(playerA, playerB); + + rollbackTurns(3, PhaseStep.PRECOMBAT_MAIN, playerA, 0); + + setStopAt(3, PhaseStep.BEGIN_COMBAT); + execute(); + + assertHandCount(playerA, 1); // 1 from regular draws + assertHandCount(playerB, 1); // 1 from regular draw + + assertLife(playerA, 24); + assertLife(playerB, 16); + + } + + /** + * Rollback problem with Pact of Negation etc [cards] #4659 + * + * Potential bug here for [Pact of Negation] and similar cards with 0 cost + * and demand to pay or lose the next turn. + * + * So can you check the following scenario where I think the game is buggy: + * an opponent casts pact of negation on my turn, his next turn he requests + * a rollback to beginning of his turn -- bingo I'm a winner and he loses + * the game. The log says I'm the winner and the opponent lost and that is + * immediately after rollback request. + */ + + @Test + public void testPactOfNegationRollback() { + addCard(Zone.HAND, playerA, "Silvercoat Lion", 1); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + + + addCard(Zone.BATTLEFIELD, playerB, "Island", 5); + // Counter target spell. + // At the beginning of your next upkeep, pay {3}{U}{U}. If you don't, you lose the game. + addCard(Zone.HAND, playerB, "Pact of Negation"); // Instant {0} + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Silvercoat Lion"); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerB, "Pact of Negation", "Silvercoat Lion", "Silvercoat Lion"); + + setChoice(playerB, "Yes"); + + rollbackTurns(2, PhaseStep.PRECOMBAT_MAIN, playerB, 0); + + setStrictChooseMode(true); + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertAllCommandsUsed(); + + + assertGraveyardCount(playerA, "Silvercoat Lion", 1); + assertGraveyardCount(playerB, "Pact of Negation", 1); + + Assert.assertTrue("Player A is still in game", playerA.isInGame()); + Assert.assertTrue("Player B is still in game", playerB.isInGame()); + + assertTappedCount("Island", true, 5); + + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/rollback/NewCreaturesAreRemovedTest.java b/Mage.Tests/src/test/java/org/mage/test/rollback/NewCreaturesAreRemovedTest.java index 1036836343f..a61042996f0 100644 --- a/Mage.Tests/src/test/java/org/mage/test/rollback/NewCreaturesAreRemovedTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/rollback/NewCreaturesAreRemovedTest.java @@ -1,108 +1,108 @@ - -package org.mage.test.rollback; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * @author LevelX2 - */ -public class NewCreaturesAreRemovedTest extends CardTestPlayerBase { - - /** - * I was playing with a Tamiyo's Journal in the battlefield. - *

- * During my turn I rollbacked. The clue generated by Tamiyo's Journal - * stayed on battlefield and when my turn started again, it re-investigated - * for another one. - */ - @Test - public void testTamiyosJournal() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); - // At the beginning of your upkeep, investigate (Create a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\"). - // {T}, Sacrifice three Clues: Search your library for a card and put that card into your hand. Then shuffle your library. - addCard(Zone.HAND, playerA, "Tamiyo's Journal"); // Artifact {5} - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 3); - addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 3); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tamiyo's Journal"); - - // As Port Town enters the battlefield, you may reveal a Plains or Island card from your hand. If you don't, Port Town enters the battlefield tapped. - // {T}: Add {W} or {U}. - addCard(Zone.HAND, playerA, "Port Town"); // Land - addCard(Zone.HAND, playerA, "Island"); // Land - - attack(2, playerB, "Pillarfield Ox"); - - attack(3, playerA, "Silvercoat Lion"); - - attack(4, playerB, "Pillarfield Ox"); - - attack(5, playerA, "Silvercoat Lion"); - - attack(6, playerB, "Pillarfield Ox"); - - playLand(7, PhaseStep.PRECOMBAT_MAIN, playerA, "Port Town"); - attack(7, playerA, "Silvercoat Lion"); - - setStopAt(7, PhaseStep.POSTCOMBAT_MAIN); - execute(); - - assertLife(playerA, 14); - assertLife(playerB, 14); - assertPermanentCount(playerA, "Port Town", 1); - assertTapped("Port Town", false); - assertPermanentCount(playerA, "Clue", 3); - - } - - @Test - public void testTamiyosJournalAndRollback() { - addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); - // At the beginning of your upkeep, investigate (Create a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\"). - // {T}, Sacrifice three Clues: Search your library for a card and put that card into your hand. Then shuffle your library. - addCard(Zone.HAND, playerA, "Tamiyo's Journal"); // Artifact {5} - - // As Port Town enters the battlefield, you may reveal a Plains or Island card from your hand. If you don't, Port Town enters the battlefield tapped. - // {T}: Add {W} or {U}. - addCard(Zone.HAND, playerA, "Port Town"); // Land - addCard(Zone.HAND, playerA, "Island"); // Land - - addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 3); - addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 3); - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tamiyo's Journal"); - - attack(2, playerB, "Pillarfield Ox"); - - attack(3, playerA, "Silvercoat Lion"); - rollbackTurns(3, PhaseStep.END_TURN, playerA, 0); - - attack(4, playerB, "Pillarfield Ox"); - - attack(5, playerA, "Silvercoat Lion"); - - rollbackTurns(5, PhaseStep.END_TURN, playerA, 0); - - attack(6, playerB, "Pillarfield Ox"); - - playLand(7, PhaseStep.PRECOMBAT_MAIN, playerA, "Port Town"); - attack(7, playerA, "Silvercoat Lion"); - - rollbackTurns(7, PhaseStep.POSTCOMBAT_MAIN, playerA, 0); - - setStopAt(7, PhaseStep.END_TURN); - execute(); - - assertPermanentCount(playerA, "Port Town", 1); - assertTapped("Port Town", false); - assertPermanentCount(playerA, "Clue", 3); - - assertLife(playerA, 14); - assertLife(playerB, 14); - - } - -} + +package org.mage.test.rollback; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author LevelX2 + */ +public class NewCreaturesAreRemovedTest extends CardTestPlayerBase { + + /** + * I was playing with a Tamiyo's Journal in the battlefield. + *

+ * During my turn I rollbacked. The clue generated by Tamiyo's Journal + * stayed on battlefield and when my turn started again, it re-investigated + * for another one. + */ + @Test + public void testTamiyosJournal() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + // At the beginning of your upkeep, investigate (Create a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\"). + // {T}, Sacrifice three Clues: Search your library for a card and put that card into your hand. Then shuffle your library. + addCard(Zone.HAND, playerA, "Tamiyo's Journal"); // Artifact {5} + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 3); + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tamiyo's Journal"); + + // As Port Town enters the battlefield, you may reveal a Plains or Island card from your hand. If you don't, Port Town enters the battlefield tapped. + // {T}: Add {W} or {U}. + addCard(Zone.HAND, playerA, "Port Town"); // Land + addCard(Zone.HAND, playerA, "Island"); // Land + + attack(2, playerB, "Pillarfield Ox"); + + attack(3, playerA, "Silvercoat Lion"); + + attack(4, playerB, "Pillarfield Ox"); + + attack(5, playerA, "Silvercoat Lion"); + + attack(6, playerB, "Pillarfield Ox"); + + playLand(7, PhaseStep.PRECOMBAT_MAIN, playerA, "Port Town"); + attack(7, playerA, "Silvercoat Lion"); + + setStopAt(7, PhaseStep.POSTCOMBAT_MAIN); + execute(); + + assertLife(playerA, 14); + assertLife(playerB, 14); + assertPermanentCount(playerA, "Port Town", 1); + assertTapped("Port Town", false); + assertPermanentCount(playerA, "Clue", 3); + + } + + @Test + public void testTamiyosJournalAndRollback() { + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 5); + // At the beginning of your upkeep, investigate (Create a colorless Clue artifact token onto the battlefield with \"{2}, Sacrifice this artifact: Draw a card.\"). + // {T}, Sacrifice three Clues: Search your library for a card and put that card into your hand. Then shuffle your library. + addCard(Zone.HAND, playerA, "Tamiyo's Journal"); // Artifact {5} + + // As Port Town enters the battlefield, you may reveal a Plains or Island card from your hand. If you don't, Port Town enters the battlefield tapped. + // {T}: Add {W} or {U}. + addCard(Zone.HAND, playerA, "Port Town"); // Land + addCard(Zone.HAND, playerA, "Island"); // Land + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 3); + addCard(Zone.BATTLEFIELD, playerB, "Pillarfield Ox", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Tamiyo's Journal"); + + attack(2, playerB, "Pillarfield Ox"); + + attack(3, playerA, "Silvercoat Lion"); + rollbackTurns(3, PhaseStep.END_TURN, playerA, 0); + + attack(4, playerB, "Pillarfield Ox"); + + attack(5, playerA, "Silvercoat Lion"); + + rollbackTurns(5, PhaseStep.END_TURN, playerA, 0); + + attack(6, playerB, "Pillarfield Ox"); + + playLand(7, PhaseStep.PRECOMBAT_MAIN, playerA, "Port Town"); + attack(7, playerA, "Silvercoat Lion"); + + rollbackTurns(7, PhaseStep.POSTCOMBAT_MAIN, playerA, 0); + + setStopAt(7, PhaseStep.END_TURN); + execute(); + + assertPermanentCount(playerA, "Port Town", 1); + assertTapped("Port Town", false); + assertPermanentCount(playerA, "Clue", 3); + + assertLife(playerA, 14); + assertLife(playerB, 14); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/rollback/TransformTest.java b/Mage.Tests/src/test/java/org/mage/test/rollback/TransformTest.java index bc92484c3f0..05fcab64289 100644 --- a/Mage.Tests/src/test/java/org/mage/test/rollback/TransformTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/rollback/TransformTest.java @@ -1,73 +1,73 @@ - -package org.mage.test.rollback; - -import mage.constants.PhaseStep; -import mage.constants.Zone; -import org.junit.Test; -import org.mage.test.serverside.base.CardTestPlayerBase; - -/** - * - * @author LevelX2 - */ -public class TransformTest extends CardTestPlayerBase { - - /** - * - */ - @Test - public void testTransform() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); - // First strike, lifelink - // At the beginning of the end step, if you gained 3 or more life this turn, transform Lone Rider. - // BACK: It That Rides as One - // Creature 4/4 First strike, lifelink - addCard(Zone.HAND, playerA, "Lone Rider"); // Creature {1}{W} 1/1 - // When Venerable Monk enters the battlefield, you gain 2 life. - addCard(Zone.HAND, playerA, "Venerable Monk"); // Creature {2}{W} 2/2 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lone Rider"); - castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Venerable Monk"); - - attack(3, playerA, "Lone Rider"); - - setStopAt(4, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertLife(playerA, 23); - assertLife(playerB, 19); - - assertPermanentCount(playerA, "Venerable Monk", 1); - assertPermanentCount(playerA, "It That Rides as One", 1); - - } - - @Test - public void testRollbackWithTransform() { - addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); - // First strike, lifelink - // At the beginning of the end step, if you gained 3 or more life this turn, transform Lone Rider. - // BACK: It That Rides as One - // Creature 4/4 First strike, lifelink - addCard(Zone.HAND, playerA, "Lone Rider"); // Creature {1}{W} 1/1 - // When Venerable Monk enters the battlefield, you gain 2 life. - addCard(Zone.HAND, playerA, "Venerable Monk"); // Creature {2}{W} 2/2 - - castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lone Rider"); - castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Venerable Monk"); - - attack(3, playerA, "Lone Rider"); - - rollbackTurns(3, PhaseStep.END_TURN, playerA, 0); - setStopAt(4, PhaseStep.PRECOMBAT_MAIN); - execute(); - - assertLife(playerA, 23); - assertLife(playerB, 19); - - assertPermanentCount(playerA, "Venerable Monk", 1); - assertPermanentCount(playerA, "It That Rides as One", 1); - - } - -} + +package org.mage.test.rollback; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class TransformTest extends CardTestPlayerBase { + + /** + * + */ + @Test + public void testTransform() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); + // First strike, lifelink + // At the beginning of the end step, if you gained 3 or more life this turn, transform Lone Rider. + // BACK: It That Rides as One + // Creature 4/4 First strike, lifelink + addCard(Zone.HAND, playerA, "Lone Rider"); // Creature {1}{W} 1/1 + // When Venerable Monk enters the battlefield, you gain 2 life. + addCard(Zone.HAND, playerA, "Venerable Monk"); // Creature {2}{W} 2/2 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lone Rider"); + castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Venerable Monk"); + + attack(3, playerA, "Lone Rider"); + + setStopAt(4, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertLife(playerA, 23); + assertLife(playerB, 19); + + assertPermanentCount(playerA, "Venerable Monk", 1); + assertPermanentCount(playerA, "It That Rides as One", 1); + + } + + @Test + public void testRollbackWithTransform() { + addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); + // First strike, lifelink + // At the beginning of the end step, if you gained 3 or more life this turn, transform Lone Rider. + // BACK: It That Rides as One + // Creature 4/4 First strike, lifelink + addCard(Zone.HAND, playerA, "Lone Rider"); // Creature {1}{W} 1/1 + // When Venerable Monk enters the battlefield, you gain 2 life. + addCard(Zone.HAND, playerA, "Venerable Monk"); // Creature {2}{W} 2/2 + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Lone Rider"); + castSpell(3, PhaseStep.POSTCOMBAT_MAIN, playerA, "Venerable Monk"); + + attack(3, playerA, "Lone Rider"); + + rollbackTurns(3, PhaseStep.END_TURN, playerA, 0); + setStopAt(4, PhaseStep.PRECOMBAT_MAIN); + execute(); + + assertLife(playerA, 23); + assertLife(playerB, 19); + + assertPermanentCount(playerA, "Venerable Monk", 1); + assertPermanentCount(playerA, "It That Rides as One", 1); + + } + +} diff --git a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestOathbreaker3PlayersFFA.java b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestOathbreaker3PlayersFFA.java index 003b9bcb085..9875fd05cb6 100644 --- a/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestOathbreaker3PlayersFFA.java +++ b/Mage.Tests/src/test/java/org/mage/test/serverside/base/CardTestOathbreaker3PlayersFFA.java @@ -1,38 +1,38 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package org.mage.test.serverside.base; - -import java.io.FileNotFoundException; -import mage.constants.MultiplayerAttackOption; -import mage.constants.RangeOfInfluence; -import mage.game.Game; -import mage.game.GameException; -import mage.game.OathbreakerFreeForAll; -import mage.game.mulligan.MulliganType; -import org.mage.test.serverside.base.impl.CardTestPlayerAPIImpl; - -/** - * @author LevelX2 - */ -public abstract class CardTestOathbreaker3PlayersFFA extends CardTestPlayerAPIImpl { - - public CardTestOathbreaker3PlayersFFA() { - super(); - this.deckNameA = "Oathbreaker_UR.dck"; // PW: Saheeli, Sublime Artificer SS: Thoughtcast - this.deckNameB = "Oathbreaker_UR.dck"; - this.deckNameC = "Oathbreaker_UR.dck"; - } - - @Override - protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { - Game game = new OathbreakerFreeForAll(MultiplayerAttackOption.MULTIPLE, RangeOfInfluence.ONE, MulliganType.GAME_DEFAULT.getMulligan(0), 20); - playerA = createPlayer(game, playerA, "PlayerA", deckNameA); - playerB = createPlayer(game, playerB, "PlayerB", deckNameB); - playerC = createPlayer(game, playerC, "PlayerC", deckNameC); - return game; - } - +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package org.mage.test.serverside.base; + +import java.io.FileNotFoundException; +import mage.constants.MultiplayerAttackOption; +import mage.constants.RangeOfInfluence; +import mage.game.Game; +import mage.game.GameException; +import mage.game.OathbreakerFreeForAll; +import mage.game.mulligan.MulliganType; +import org.mage.test.serverside.base.impl.CardTestPlayerAPIImpl; + +/** + * @author LevelX2 + */ +public abstract class CardTestOathbreaker3PlayersFFA extends CardTestPlayerAPIImpl { + + public CardTestOathbreaker3PlayersFFA() { + super(); + this.deckNameA = "Oathbreaker_UR.dck"; // PW: Saheeli, Sublime Artificer SS: Thoughtcast + this.deckNameB = "Oathbreaker_UR.dck"; + this.deckNameC = "Oathbreaker_UR.dck"; + } + + @Override + protected Game createNewGameAndPlayers() throws GameException, FileNotFoundException { + Game game = new OathbreakerFreeForAll(MultiplayerAttackOption.MULTIPLE, RangeOfInfluence.ONE, MulliganType.GAME_DEFAULT.getMulligan(0), 20); + playerA = createPlayer(game, playerA, "PlayerA", deckNameA); + playerB = createPlayer(game, playerB, "PlayerB", deckNameB); + playerC = createPlayer(game, playerC, "PlayerC", deckNameC); + return game; + } + } \ No newline at end of file diff --git a/Mage/src/main/java/mage/abilities/ActivationInfo.java b/Mage/src/main/java/mage/abilities/ActivationInfo.java index bed1acb2fec..0ca371695b0 100644 --- a/Mage/src/main/java/mage/abilities/ActivationInfo.java +++ b/Mage/src/main/java/mage/abilities/ActivationInfo.java @@ -1,62 +1,62 @@ - -package mage.abilities; - -import java.util.UUID; -import mage.game.Game; - -/** - * The ActivationInfo class holds the information how often an ability of an - * object was activated during a turn. It handles the check, if the object is - * still the same, so for example if a permanent left battlefield and returns, - * the counting of activations happens for each object. - * - * @author LevelX2 - */ -public class ActivationInfo { - - protected int turnNum = 0; - protected int activationCounter = 0; - protected String key; - - public static ActivationInfo getInstance(Game game, UUID sourceId) { - return ActivationInfo.getInstance(game, sourceId, game.getState().getZoneChangeCounter(sourceId)); - } - - public static ActivationInfo getInstance(Game game, UUID sourceId, int zoneChangeCounter) { - String key = "ActivationInfo" + sourceId.toString() + zoneChangeCounter; - Integer activations = (Integer) game.getState().getValue(key); - ActivationInfo activationInfo; - if (activations != null) { - Integer turnNum = (Integer) game.getState().getValue(key + 'T'); - activationInfo = new ActivationInfo(game, turnNum, activations); - } else { - activationInfo = new ActivationInfo(game, game.getTurnNum(), 0); - } - activationInfo.setKey(key); - return activationInfo; - } - - public void setKey(String key) { - this.key = key; - } - - protected ActivationInfo(Game game, int turnNum, int activationCounter) { - this.turnNum = turnNum; - this.activationCounter = activationCounter; - } - - public void addActivation(Game game) { - if (game.getTurnNum() != turnNum) { - activationCounter = 1; - turnNum = game.getTurnNum(); - } else { - activationCounter++; - } - game.getState().setValue(key, activationCounter); - game.getState().setValue(key + 'T', turnNum); - } - - public int getActivationCounter() { - return activationCounter; - } -} + +package mage.abilities; + +import java.util.UUID; +import mage.game.Game; + +/** + * The ActivationInfo class holds the information how often an ability of an + * object was activated during a turn. It handles the check, if the object is + * still the same, so for example if a permanent left battlefield and returns, + * the counting of activations happens for each object. + * + * @author LevelX2 + */ +public class ActivationInfo { + + protected int turnNum = 0; + protected int activationCounter = 0; + protected String key; + + public static ActivationInfo getInstance(Game game, UUID sourceId) { + return ActivationInfo.getInstance(game, sourceId, game.getState().getZoneChangeCounter(sourceId)); + } + + public static ActivationInfo getInstance(Game game, UUID sourceId, int zoneChangeCounter) { + String key = "ActivationInfo" + sourceId.toString() + zoneChangeCounter; + Integer activations = (Integer) game.getState().getValue(key); + ActivationInfo activationInfo; + if (activations != null) { + Integer turnNum = (Integer) game.getState().getValue(key + 'T'); + activationInfo = new ActivationInfo(game, turnNum, activations); + } else { + activationInfo = new ActivationInfo(game, game.getTurnNum(), 0); + } + activationInfo.setKey(key); + return activationInfo; + } + + public void setKey(String key) { + this.key = key; + } + + protected ActivationInfo(Game game, int turnNum, int activationCounter) { + this.turnNum = turnNum; + this.activationCounter = activationCounter; + } + + public void addActivation(Game game) { + if (game.getTurnNum() != turnNum) { + activationCounter = 1; + turnNum = game.getTurnNum(); + } else { + activationCounter++; + } + game.getState().setValue(key, activationCounter); + game.getState().setValue(key + 'T', turnNum); + } + + public int getActivationCounter() { + return activationCounter; + } +} diff --git a/Mage/src/main/java/mage/abilities/common/BecomesMonstrousTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BecomesMonstrousTriggeredAbility.java index 70eeed7514e..02f922b6c46 100644 --- a/Mage/src/main/java/mage/abilities/common/BecomesMonstrousTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BecomesMonstrousTriggeredAbility.java @@ -1,55 +1,55 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author Styxo - */ -public class BecomesMonstrousTriggeredAbility extends TriggeredAbilityImpl { - - public BecomesMonstrousTriggeredAbility(Effect effect) { - super(Zone.BATTLEFIELD, effect, false); - } - - public BecomesMonstrousTriggeredAbility(final BecomesMonstrousTriggeredAbility ability) { - super(ability); - } - - @Override - public BecomesMonstrousTriggeredAbility copy() { - return new BecomesMonstrousTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.BECOMES_MONSTROUS; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent != null && permanent.isCreature() - && (permanent.isControlledBy(getControllerId()))) { - this.getEffects().setTargetPointer(new FixedTarget(permanent, game)); - return true; - } - return false; - } - - @Override - public String getRule() { - return "Whenever a creature you control becomes monstrous, " + super.getRule(); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author Styxo + */ +public class BecomesMonstrousTriggeredAbility extends TriggeredAbilityImpl { + + public BecomesMonstrousTriggeredAbility(Effect effect) { + super(Zone.BATTLEFIELD, effect, false); + } + + public BecomesMonstrousTriggeredAbility(final BecomesMonstrousTriggeredAbility ability) { + super(ability); + } + + @Override + public BecomesMonstrousTriggeredAbility copy() { + return new BecomesMonstrousTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.BECOMES_MONSTROUS; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null && permanent.isCreature() + && (permanent.isControlledBy(getControllerId()))) { + this.getEffects().setTargetPointer(new FixedTarget(permanent, game)); + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature you control becomes monstrous, " + super.getRule(); + } +} diff --git a/Mage/src/main/java/mage/abilities/common/CantHaveMoreThanAmountCountersSourceAbility.java b/Mage/src/main/java/mage/abilities/common/CantHaveMoreThanAmountCountersSourceAbility.java index ddb331c1049..0a826b7a17e 100644 --- a/Mage/src/main/java/mage/abilities/common/CantHaveMoreThanAmountCountersSourceAbility.java +++ b/Mage/src/main/java/mage/abilities/common/CantHaveMoreThanAmountCountersSourceAbility.java @@ -1,104 +1,104 @@ - -package mage.abilities.common; - -import mage.abilities.Ability; -import mage.abilities.effects.ReplacementEffectImpl; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.util.CardUtil; - -/** - * - * @author emerald000 - */ -public class CantHaveMoreThanAmountCountersSourceAbility extends SimpleStaticAbility { - - private final CounterType counterType; - private final int amount; - - public CantHaveMoreThanAmountCountersSourceAbility(CounterType counterType, int amount) { - super(Zone.BATTLEFIELD, new CantHaveMoreThanAmountCountersSourceEffect(counterType, amount)); - this.counterType = counterType; - this.amount = amount; - } - - private CantHaveMoreThanAmountCountersSourceAbility(CantHaveMoreThanAmountCountersSourceAbility ability) { - super(ability); - this.counterType = ability.counterType; - this.amount = ability.amount; - } - - @Override - public String getRule() { - return "Rasputin can't have more than " + CardUtil.numberToText(this.amount) + ' ' + this.counterType.getName() + " counters on it."; - } - - @Override - public CantHaveMoreThanAmountCountersSourceAbility copy() { - return new CantHaveMoreThanAmountCountersSourceAbility(this); - } - - public CounterType getCounterType() { - return this.counterType; - } - - public int getAmount() { - return this.amount; - } -} - -class CantHaveMoreThanAmountCountersSourceEffect extends ReplacementEffectImpl { - - private final CounterType counterType; - private final int amount; - - CantHaveMoreThanAmountCountersSourceEffect(CounterType counterType, int amount) { - super(Duration.WhileOnBattlefield, Outcome.Detriment, false); - this.counterType = counterType; - this.amount = amount; - } - - CantHaveMoreThanAmountCountersSourceEffect(final CantHaveMoreThanAmountCountersSourceEffect effect) { - super(effect); - this.counterType = effect.counterType; - this.amount = effect.amount; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == EventType.ADD_COUNTER; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent == null) { - permanent = game.getPermanentEntering(event.getTargetId()); - } - return permanent != null - && permanent.getId().equals(source.getSourceId()) - && event.getData().equals(this.counterType.getName()) - && permanent.getCounters(game).getCount(this.counterType) == this.amount; - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public CantHaveMoreThanAmountCountersSourceEffect copy() { - return new CantHaveMoreThanAmountCountersSourceEffect(this); - } -} + +package mage.abilities.common; + +import mage.abilities.Ability; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.util.CardUtil; + +/** + * + * @author emerald000 + */ +public class CantHaveMoreThanAmountCountersSourceAbility extends SimpleStaticAbility { + + private final CounterType counterType; + private final int amount; + + public CantHaveMoreThanAmountCountersSourceAbility(CounterType counterType, int amount) { + super(Zone.BATTLEFIELD, new CantHaveMoreThanAmountCountersSourceEffect(counterType, amount)); + this.counterType = counterType; + this.amount = amount; + } + + private CantHaveMoreThanAmountCountersSourceAbility(CantHaveMoreThanAmountCountersSourceAbility ability) { + super(ability); + this.counterType = ability.counterType; + this.amount = ability.amount; + } + + @Override + public String getRule() { + return "Rasputin can't have more than " + CardUtil.numberToText(this.amount) + ' ' + this.counterType.getName() + " counters on it."; + } + + @Override + public CantHaveMoreThanAmountCountersSourceAbility copy() { + return new CantHaveMoreThanAmountCountersSourceAbility(this); + } + + public CounterType getCounterType() { + return this.counterType; + } + + public int getAmount() { + return this.amount; + } +} + +class CantHaveMoreThanAmountCountersSourceEffect extends ReplacementEffectImpl { + + private final CounterType counterType; + private final int amount; + + CantHaveMoreThanAmountCountersSourceEffect(CounterType counterType, int amount) { + super(Duration.WhileOnBattlefield, Outcome.Detriment, false); + this.counterType = counterType; + this.amount = amount; + } + + CantHaveMoreThanAmountCountersSourceEffect(final CantHaveMoreThanAmountCountersSourceEffect effect) { + super(effect); + this.counterType = effect.counterType; + this.amount = effect.amount; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.ADD_COUNTER; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent == null) { + permanent = game.getPermanentEntering(event.getTargetId()); + } + return permanent != null + && permanent.getId().equals(source.getSourceId()) + && event.getData().equals(this.counterType.getName()) + && permanent.getCounters(game).getCount(this.counterType) == this.amount; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public CantHaveMoreThanAmountCountersSourceEffect copy() { + return new CantHaveMoreThanAmountCountersSourceEffect(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/common/ControllerPlaysLandTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/ControllerPlaysLandTriggeredAbility.java index f741ee9feb5..42a69c02460 100644 --- a/Mage/src/main/java/mage/abilities/common/ControllerPlaysLandTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/ControllerPlaysLandTriggeredAbility.java @@ -1,49 +1,49 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; - -/** - * @author jeffwadsworth - */ -public class ControllerPlaysLandTriggeredAbility extends TriggeredAbilityImpl { - - public ControllerPlaysLandTriggeredAbility(Zone zone, Effect effect, Boolean optional) { - super(zone, effect, optional); - } - - public ControllerPlaysLandTriggeredAbility(ControllerPlaysLandTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.LAND_PLAYED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent land = game.getPermanent(event.getTargetId()); - return land != null && land.getControllerId().equals(controllerId); - } - - @Override - public ControllerPlaysLandTriggeredAbility copy() { - return new ControllerPlaysLandTriggeredAbility(this); - } - - @Override - public String getRule() { - return "Whenever you play a land, "; - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; + +/** + * @author jeffwadsworth + */ +public class ControllerPlaysLandTriggeredAbility extends TriggeredAbilityImpl { + + public ControllerPlaysLandTriggeredAbility(Zone zone, Effect effect, Boolean optional) { + super(zone, effect, optional); + } + + public ControllerPlaysLandTriggeredAbility(ControllerPlaysLandTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.LAND_PLAYED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent land = game.getPermanent(event.getTargetId()); + return land != null && land.getControllerId().equals(controllerId); + } + + @Override + public ControllerPlaysLandTriggeredAbility copy() { + return new ControllerPlaysLandTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Whenever you play a land, "; + } +} diff --git a/Mage/src/main/java/mage/abilities/common/DealsDamageToACreatureAllTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DealsDamageToACreatureAllTriggeredAbility.java index 87f28e4dfc5..35e66327e86 100644 --- a/Mage/src/main/java/mage/abilities/common/DealsDamageToACreatureAllTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DealsDamageToACreatureAllTriggeredAbility.java @@ -1,104 +1,104 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.SetTargetPointer; -import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.events.DamagedCreatureEvent; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author LevelX2 - */ -public class DealsDamageToACreatureAllTriggeredAbility extends TriggeredAbilityImpl { - - private final boolean combatDamageOnly; - private final FilterPermanent filterPermanent; - private final SetTargetPointer setTargetPointer; - - /** - * This ability works only for permanents doing damage. - * - * @param effect - * @param optional - * @param filterPermanent The filter that restricts which permanets have to - * trigger - * @param setTargetPointer The target to be set to target pointer of the - * effect.
- * - PLAYER = player controlling the damage source.
- * - PERMANENT = source permanent.
- * - PERMANENT_TARGET = damaged creature. - * @param combatDamageOnly The flag to determine if only combat damage has - * to trigger - */ - public DealsDamageToACreatureAllTriggeredAbility(Effect effect, boolean optional, FilterPermanent filterPermanent, SetTargetPointer setTargetPointer, boolean combatDamageOnly) { - super(Zone.BATTLEFIELD, effect, optional); - this.combatDamageOnly = combatDamageOnly; - this.setTargetPointer = setTargetPointer; - this.filterPermanent = filterPermanent; - } - - public DealsDamageToACreatureAllTriggeredAbility(final DealsDamageToACreatureAllTriggeredAbility ability) { - super(ability); - this.combatDamageOnly = ability.combatDamageOnly; - this.filterPermanent = ability.filterPermanent; - this.setTargetPointer = ability.setTargetPointer; - } - - @Override - public DealsDamageToACreatureAllTriggeredAbility copy() { - return new DealsDamageToACreatureAllTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.DAMAGED_CREATURE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (!combatDamageOnly || ((DamagedCreatureEvent) event).isCombatDamage()) { - Permanent permanent = game.getPermanentOrLKIBattlefield(event.getSourceId()); - if (permanent != null && filterPermanent.match(permanent, getSourceId(), getControllerId(), game)) { - for (Effect effect : this.getEffects()) { - effect.setValue("damage", event.getAmount()); - effect.setValue("sourceId", event.getSourceId()); - switch (setTargetPointer) { - case PLAYER: - effect.setTargetPointer(new FixedTarget(permanent.getControllerId())); - break; - case PERMANENT: - effect.setTargetPointer(new FixedTarget(permanent, game)); - break; - case PERMANENT_TARGET: - Permanent permanent_target = game.getPermanentOrLKIBattlefield(event.getTargetId()); - if (permanent_target != null) { - effect.setTargetPointer(new FixedTarget(permanent_target, game)); - } - break; - } - - } - return true; - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever " + filterPermanent.getMessage() + " deals " - + (combatDamageOnly ? "combat " : "") + "damage to a creature, " + super.getRule(); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.events.DamagedCreatureEvent; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author LevelX2 + */ +public class DealsDamageToACreatureAllTriggeredAbility extends TriggeredAbilityImpl { + + private final boolean combatDamageOnly; + private final FilterPermanent filterPermanent; + private final SetTargetPointer setTargetPointer; + + /** + * This ability works only for permanents doing damage. + * + * @param effect + * @param optional + * @param filterPermanent The filter that restricts which permanets have to + * trigger + * @param setTargetPointer The target to be set to target pointer of the + * effect.
+ * - PLAYER = player controlling the damage source.
+ * - PERMANENT = source permanent.
+ * - PERMANENT_TARGET = damaged creature. + * @param combatDamageOnly The flag to determine if only combat damage has + * to trigger + */ + public DealsDamageToACreatureAllTriggeredAbility(Effect effect, boolean optional, FilterPermanent filterPermanent, SetTargetPointer setTargetPointer, boolean combatDamageOnly) { + super(Zone.BATTLEFIELD, effect, optional); + this.combatDamageOnly = combatDamageOnly; + this.setTargetPointer = setTargetPointer; + this.filterPermanent = filterPermanent; + } + + public DealsDamageToACreatureAllTriggeredAbility(final DealsDamageToACreatureAllTriggeredAbility ability) { + super(ability); + this.combatDamageOnly = ability.combatDamageOnly; + this.filterPermanent = ability.filterPermanent; + this.setTargetPointer = ability.setTargetPointer; + } + + @Override + public DealsDamageToACreatureAllTriggeredAbility copy() { + return new DealsDamageToACreatureAllTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.DAMAGED_CREATURE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (!combatDamageOnly || ((DamagedCreatureEvent) event).isCombatDamage()) { + Permanent permanent = game.getPermanentOrLKIBattlefield(event.getSourceId()); + if (permanent != null && filterPermanent.match(permanent, getSourceId(), getControllerId(), game)) { + for (Effect effect : this.getEffects()) { + effect.setValue("damage", event.getAmount()); + effect.setValue("sourceId", event.getSourceId()); + switch (setTargetPointer) { + case PLAYER: + effect.setTargetPointer(new FixedTarget(permanent.getControllerId())); + break; + case PERMANENT: + effect.setTargetPointer(new FixedTarget(permanent, game)); + break; + case PERMANENT_TARGET: + Permanent permanent_target = game.getPermanentOrLKIBattlefield(event.getTargetId()); + if (permanent_target != null) { + effect.setTargetPointer(new FixedTarget(permanent_target, game)); + } + break; + } + + } + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever " + filterPermanent.getMessage() + " deals " + + (combatDamageOnly ? "combat " : "") + "damage to a creature, " + super.getRule(); + } +} diff --git a/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java index 97f7c15618e..397ead5d6d3 100644 --- a/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/DiscardedByOpponentTriggeredAbility.java @@ -1,54 +1,54 @@ -package mage.abilities.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.stack.StackObject; - -/** - * - * @author Styxo - */ -public class DiscardedByOpponentTriggeredAbility extends TriggeredAbilityImpl { - - public DiscardedByOpponentTriggeredAbility(Effect effect) { - this(effect, false); - } - - public DiscardedByOpponentTriggeredAbility(Effect effect, boolean optional) { - super(Zone.GRAVEYARD, effect, optional); - } - - public DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) { - super(ability); - } - - @Override - public DiscardedByOpponentTriggeredAbility copy() { - return new DiscardedByOpponentTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == EventType.DISCARDED_CARD; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (getSourceId().equals(event.getTargetId())) { - StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); - if (stackObject != null) { - return game.getOpponents(this.getControllerId()).contains(stackObject.getControllerId()); - } - } - return false; - } - - @Override - public String getRule() { - return "When a spell or ability an opponent controls causes you to discard this card, " + super.getRule(); - } -} +package mage.abilities.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.stack.StackObject; + +/** + * + * @author Styxo + */ +public class DiscardedByOpponentTriggeredAbility extends TriggeredAbilityImpl { + + public DiscardedByOpponentTriggeredAbility(Effect effect) { + this(effect, false); + } + + public DiscardedByOpponentTriggeredAbility(Effect effect, boolean optional) { + super(Zone.GRAVEYARD, effect, optional); + } + + public DiscardedByOpponentTriggeredAbility(final DiscardedByOpponentTriggeredAbility ability) { + super(ability); + } + + @Override + public DiscardedByOpponentTriggeredAbility copy() { + return new DiscardedByOpponentTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == EventType.DISCARDED_CARD; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (getSourceId().equals(event.getTargetId())) { + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (stackObject != null) { + return game.getOpponents(this.getControllerId()).contains(stackObject.getControllerId()); + } + } + return false; + } + + @Override + public String getRule() { + return "When a spell or ability an opponent controls causes you to discard this card, " + super.getRule(); + } +} diff --git a/Mage/src/main/java/mage/abilities/common/LeavesBattlefieldAllTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/LeavesBattlefieldAllTriggeredAbility.java index 4d0099aae41..1017d1bd3b1 100644 --- a/Mage/src/main/java/mage/abilities/common/LeavesBattlefieldAllTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/LeavesBattlefieldAllTriggeredAbility.java @@ -1,88 +1,88 @@ - -package mage.abilities.common; - -import java.util.UUID; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.SetTargetPointer; -import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.ZoneChangeEvent; -import mage.game.permanent.Permanent; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author Styxo - */ -public class LeavesBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl { - - protected FilterPermanent filter; - protected SetTargetPointer setTargetPointer; - - public LeavesBattlefieldAllTriggeredAbility(Effect effect, FilterPermanent filter) { - this(effect, filter, false); - } - - public LeavesBattlefieldAllTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional) { - this(Zone.BATTLEFIELD, effect, filter, optional); - } - - public LeavesBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional) { - this(zone, effect, filter, optional, SetTargetPointer.NONE); - } - - public LeavesBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer) { - super(zone, effect, optional); - this.filter = filter; - this.setTargetPointer = setTargetPointer; - } - - protected LeavesBattlefieldAllTriggeredAbility(final LeavesBattlefieldAllTriggeredAbility ability) { - super(ability); - filter = ability.filter; - setTargetPointer = ability.setTargetPointer; - } - - @Override - public LeavesBattlefieldAllTriggeredAbility copy() { - return new LeavesBattlefieldAllTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ZONE_CHANGE; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - if (zEvent.getFromZone() == Zone.BATTLEFIELD) { - UUID targetId = event.getTargetId(); - Permanent permanent = game.getPermanentOrLKIBattlefield(targetId); - if (permanent != null && filter.match(permanent, getSourceId(), getControllerId(), game)) { - if (setTargetPointer != SetTargetPointer.NONE) { - for (Effect effect : this.getEffects()) { - switch (setTargetPointer) { - case PERMANENT: - effect.setTargetPointer(new FixedTarget(permanent.getId())); - break; - case PLAYER: - effect.setTargetPointer(new FixedTarget(permanent.getControllerId())); - break; - } - } - } - return true; - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever " + filter.getMessage() + " leaves the battlefield, " + super.getRule(); - } -} + +package mage.abilities.common; + +import java.util.UUID; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author Styxo + */ +public class LeavesBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl { + + protected FilterPermanent filter; + protected SetTargetPointer setTargetPointer; + + public LeavesBattlefieldAllTriggeredAbility(Effect effect, FilterPermanent filter) { + this(effect, filter, false); + } + + public LeavesBattlefieldAllTriggeredAbility(Effect effect, FilterPermanent filter, boolean optional) { + this(Zone.BATTLEFIELD, effect, filter, optional); + } + + public LeavesBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional) { + this(zone, effect, filter, optional, SetTargetPointer.NONE); + } + + public LeavesBattlefieldAllTriggeredAbility(Zone zone, Effect effect, FilterPermanent filter, boolean optional, SetTargetPointer setTargetPointer) { + super(zone, effect, optional); + this.filter = filter; + this.setTargetPointer = setTargetPointer; + } + + protected LeavesBattlefieldAllTriggeredAbility(final LeavesBattlefieldAllTriggeredAbility ability) { + super(ability); + filter = ability.filter; + setTargetPointer = ability.setTargetPointer; + } + + @Override + public LeavesBattlefieldAllTriggeredAbility copy() { + return new LeavesBattlefieldAllTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + if (zEvent.getFromZone() == Zone.BATTLEFIELD) { + UUID targetId = event.getTargetId(); + Permanent permanent = game.getPermanentOrLKIBattlefield(targetId); + if (permanent != null && filter.match(permanent, getSourceId(), getControllerId(), game)) { + if (setTargetPointer != SetTargetPointer.NONE) { + for (Effect effect : this.getEffects()) { + switch (setTargetPointer) { + case PERMANENT: + effect.setTargetPointer(new FixedTarget(permanent.getId())); + break; + case PLAYER: + effect.setTargetPointer(new FixedTarget(permanent.getControllerId())); + break; + } + } + } + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever " + filter.getMessage() + " leaves the battlefield, " + super.getRule(); + } +} diff --git a/Mage/src/main/java/mage/abilities/common/OpponentPlaysLandTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/OpponentPlaysLandTriggeredAbility.java index d8c7ba42e06..86b230daedc 100644 --- a/Mage/src/main/java/mage/abilities/common/OpponentPlaysLandTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/OpponentPlaysLandTriggeredAbility.java @@ -1,48 +1,48 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; - -/** - * @author jeffwadsworth - */ -public class OpponentPlaysLandTriggeredAbility extends TriggeredAbilityImpl { - - public OpponentPlaysLandTriggeredAbility(Zone zone, Effect effect, Boolean optional) { - super(zone, effect, optional); - } - - public OpponentPlaysLandTriggeredAbility(OpponentPlaysLandTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.LAND_PLAYED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - Permanent land = game.getPermanent(event.getTargetId()); - return land != null && game.getOpponents(controllerId).contains(land.getControllerId()); - } - - @Override - public OpponentPlaysLandTriggeredAbility copy() { - return new OpponentPlaysLandTriggeredAbility(this); - } - - @Override - public String getRule() { - return "Whenever an opponent plays a land, "; - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +/** + * @author jeffwadsworth + */ +public class OpponentPlaysLandTriggeredAbility extends TriggeredAbilityImpl { + + public OpponentPlaysLandTriggeredAbility(Zone zone, Effect effect, Boolean optional) { + super(zone, effect, optional); + } + + public OpponentPlaysLandTriggeredAbility(OpponentPlaysLandTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.LAND_PLAYED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + Permanent land = game.getPermanent(event.getTargetId()); + return land != null && game.getOpponents(controllerId).contains(land.getControllerId()); + } + + @Override + public OpponentPlaysLandTriggeredAbility copy() { + return new OpponentPlaysLandTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Whenever an opponent plays a land, "; + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/OrCondition.java b/Mage/src/main/java/mage/abilities/condition/OrCondition.java index 0d5bb3f6ca9..621edbd9938 100644 --- a/Mage/src/main/java/mage/abilities/condition/OrCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/OrCondition.java @@ -1,38 +1,38 @@ - -package mage.abilities.condition; - -import java.util.ArrayList; -import java.util.Arrays; -import mage.abilities.Ability; -import mage.game.Game; - -/** - * Combines conditions to one compound conditon, one condition must be - * true to return true for the compound condtion. - * - * @author emerald000 - */ -public class OrCondition implements Condition { - - private final ArrayList conditions = new ArrayList<>(); - private final String text; - - public OrCondition(Condition... conditions) { - this("", conditions); - } - - public OrCondition(String text, Condition... conditions) { - this.conditions.addAll(Arrays.asList(conditions)); - this.text = text; - } - - @Override - public boolean apply(Game game, Ability source) { - return conditions.stream().anyMatch(condition -> condition.apply(game, source)); - } - - @Override - public String toString() { - return text; - } -} + +package mage.abilities.condition; + +import java.util.ArrayList; +import java.util.Arrays; +import mage.abilities.Ability; +import mage.game.Game; + +/** + * Combines conditions to one compound conditon, one condition must be + * true to return true for the compound condtion. + * + * @author emerald000 + */ +public class OrCondition implements Condition { + + private final ArrayList conditions = new ArrayList<>(); + private final String text; + + public OrCondition(Condition... conditions) { + this("", conditions); + } + + public OrCondition(String text, Condition... conditions) { + this.conditions.addAll(Arrays.asList(conditions)); + this.text = text; + } + + @Override + public boolean apply(Game game, Ability source) { + return conditions.stream().anyMatch(condition -> condition.apply(game, source)); + } + + @Override + public String toString() { + return text; + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/AttackedThisTurnSourceCondition.java b/Mage/src/main/java/mage/abilities/condition/common/AttackedThisTurnSourceCondition.java index 0bf152ec768..54d20484f46 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/AttackedThisTurnSourceCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/AttackedThisTurnSourceCondition.java @@ -1,24 +1,24 @@ - -package mage.abilities.condition.common; - -import mage.MageObjectReference; -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.watchers.common.AttackedThisTurnWatcher; - -/** - * - * @author LevelX2 - */ -public enum AttackedThisTurnSourceCondition implements Condition { - instance; - - @Override - public boolean apply(Game game, Ability source) { - Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); - AttackedThisTurnWatcher watcher = game.getState().getWatcher(AttackedThisTurnWatcher.class); - return sourcePermanent != null && watcher.getAttackedThisTurnCreatures().contains(new MageObjectReference(sourcePermanent, game)); - } -} + +package mage.abilities.condition.common; + +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.watchers.common.AttackedThisTurnWatcher; + +/** + * + * @author LevelX2 + */ +public enum AttackedThisTurnSourceCondition implements Condition { + instance; + + @Override + public boolean apply(Game game, Ability source) { + Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); + AttackedThisTurnWatcher watcher = game.getState().getWatcher(AttackedThisTurnWatcher.class); + return sourcePermanent != null && watcher.getAttackedThisTurnCreatures().contains(new MageObjectReference(sourcePermanent, game)); + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/CitysBlessingCondition.java b/Mage/src/main/java/mage/abilities/condition/common/CitysBlessingCondition.java index 158d41ae2d3..11a283338ad 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/CitysBlessingCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/CitysBlessingCondition.java @@ -1,26 +1,26 @@ - -package mage.abilities.condition.common; - -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.designations.DesignationType; -import mage.game.Game; - -/** - * - * @author LvelX2 - */ -public enum CitysBlessingCondition implements Condition { - - instance; - - @Override - public boolean apply(Game game, Ability source) { - return game.getPlayer(source.getControllerId()).hasDesignation(DesignationType.CITYS_BLESSING); - } - - @Override - public String toString() { - return "you have the city's blessing"; - } -} + +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.designations.DesignationType; +import mage.game.Game; + +/** + * + * @author LvelX2 + */ +public enum CitysBlessingCondition implements Condition { + + instance; + + @Override + public boolean apply(Game game, Ability source) { + return game.getPlayer(source.getControllerId()).hasDesignation(DesignationType.CITYS_BLESSING); + } + + @Override + public String toString() { + return "you have the city's blessing"; + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/CreatureCountCondition.java b/Mage/src/main/java/mage/abilities/condition/common/CreatureCountCondition.java index 6b2686030dd..6cb7afd8e2c 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/CreatureCountCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/CreatureCountCondition.java @@ -1,88 +1,88 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.condition.common; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.constants.TargetController; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; - -/** - * - * @author Styxo - */ -public class CreatureCountCondition implements Condition { - - private FilterCreaturePermanent filter; - private int creatureCount; - private TargetController targetController; - - public CreatureCountCondition(FilterCreaturePermanent filter, int creatureCount, TargetController targetController) { - this.filter = filter; - this.creatureCount = creatureCount; - this.targetController = targetController; - } - - public CreatureCountCondition(int creatureCount, TargetController targetController) { - this.filter = new FilterCreaturePermanent(); - this.creatureCount = creatureCount; - this.targetController = targetController; - - } - - @Override - public boolean apply(Game game, Ability source) { - switch (targetController) { - case YOU: - return game.getBattlefield().countAll(filter, source.getControllerId(), game) == creatureCount; - case OPPONENT: - for (UUID opponent : game.getOpponents(source.getControllerId())) { - if (game.getBattlefield().countAll(filter, opponent, game) != creatureCount) { - return false; - } - } - return true; - case ANY: - return game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game) == creatureCount; - default: - throw new UnsupportedOperationException("Value for targetController not supported: " + targetController.toString()); - } - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - switch (targetController) { - case YOU: - sb.append("you"); - break; - case OPPONENT: - sb.append("your opponents"); - break; - case ANY: - sb.append("if "); - sb.append(creatureCount); - sb.append(' '); - sb.append(filter.getMessage()); - sb.append(" are on the battlefield"); - return sb.toString(); - } - sb.append(" control"); - if (creatureCount == 0) { - sb.append(" no "); - } else { - sb.append(" exactly "); - sb.append(creatureCount); - sb.append(' '); - } - sb.append(filter.getMessage()); - sb.append(creatureCount != 1 ? "s" : ""); - - return sb.toString(); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.condition.common; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.constants.TargetController; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; + +/** + * + * @author Styxo + */ +public class CreatureCountCondition implements Condition { + + private FilterCreaturePermanent filter; + private int creatureCount; + private TargetController targetController; + + public CreatureCountCondition(FilterCreaturePermanent filter, int creatureCount, TargetController targetController) { + this.filter = filter; + this.creatureCount = creatureCount; + this.targetController = targetController; + } + + public CreatureCountCondition(int creatureCount, TargetController targetController) { + this.filter = new FilterCreaturePermanent(); + this.creatureCount = creatureCount; + this.targetController = targetController; + + } + + @Override + public boolean apply(Game game, Ability source) { + switch (targetController) { + case YOU: + return game.getBattlefield().countAll(filter, source.getControllerId(), game) == creatureCount; + case OPPONENT: + for (UUID opponent : game.getOpponents(source.getControllerId())) { + if (game.getBattlefield().countAll(filter, opponent, game) != creatureCount) { + return false; + } + } + return true; + case ANY: + return game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game) == creatureCount; + default: + throw new UnsupportedOperationException("Value for targetController not supported: " + targetController.toString()); + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + switch (targetController) { + case YOU: + sb.append("you"); + break; + case OPPONENT: + sb.append("your opponents"); + break; + case ANY: + sb.append("if "); + sb.append(creatureCount); + sb.append(' '); + sb.append(filter.getMessage()); + sb.append(" are on the battlefield"); + return sb.toString(); + } + sb.append(" control"); + if (creatureCount == 0) { + sb.append(" no "); + } else { + sb.append(" exactly "); + sb.append(creatureCount); + sb.append(' '); + } + sb.append(filter.getMessage()); + sb.append(creatureCount != 1 ? "s" : ""); + + return sb.toString(); + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java b/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java index 1db22ed9f82..4d42a696c45 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java @@ -1,29 +1,29 @@ - -package mage.abilities.condition.common; - -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.game.Game; -import mage.watchers.common.LifeLossOtherFromCombatWatcher; - -/** - * Describes condition when an opponent has been dealt any amount of non-combat - * damage - * - * @author Styxo - */ -public enum HateCondition implements Condition { - - instance; - - @Override - public boolean apply(Game game, Ability source) { - LifeLossOtherFromCombatWatcher watcher = game.getState().getWatcher(LifeLossOtherFromCombatWatcher.class); - return watcher != null && watcher.opponentLostLifeOtherFromCombat(source.getControllerId(), game); - } - - @Override - public String toString() { - return "if an opponent lost life from source other than combat damage this turn"; - } -} + +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.game.Game; +import mage.watchers.common.LifeLossOtherFromCombatWatcher; + +/** + * Describes condition when an opponent has been dealt any amount of non-combat + * damage + * + * @author Styxo + */ +public enum HateCondition implements Condition { + + instance; + + @Override + public boolean apply(Game game, Ability source) { + LifeLossOtherFromCombatWatcher watcher = game.getState().getWatcher(LifeLossOtherFromCombatWatcher.class); + return watcher != null && watcher.opponentLostLifeOtherFromCombat(source.getControllerId(), game); + } + + @Override + public String toString() { + return "if an opponent lost life from source other than combat damage this turn"; + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/LiveLostLastTurnCondition.java b/Mage/src/main/java/mage/abilities/condition/common/LiveLostLastTurnCondition.java index 7025aca0bcf..fc625230ab8 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/LiveLostLastTurnCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/LiveLostLastTurnCondition.java @@ -1,28 +1,28 @@ - -package mage.abilities.condition.common; - -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.game.Game; -import mage.watchers.WatcherUtils; -import mage.watchers.common.PlayerLostLifeWatcher; - -/** - * - * @author LevelX - */ -public enum LiveLostLastTurnCondition implements Condition { - - instance; - - @Override - public boolean apply(Game game, Ability source) { - PlayerLostLifeWatcher watcher = game.getState().getWatcher(PlayerLostLifeWatcher.class); - if (watcher != null) { - return watcher.getLifeLostLastTurn(source.getControllerId()) > 0; - } else { - WatcherUtils.logMissingWatcher(game, source, PlayerLostLifeWatcher.class, this.getClass()); - } - return false; - } -} + +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.game.Game; +import mage.watchers.WatcherUtils; +import mage.watchers.common.PlayerLostLifeWatcher; + +/** + * + * @author LevelX + */ +public enum LiveLostLastTurnCondition implements Condition { + + instance; + + @Override + public boolean apply(Game game, Ability source) { + PlayerLostLifeWatcher watcher = game.getState().getWatcher(PlayerLostLifeWatcher.class); + if (watcher != null) { + return watcher.getLifeLostLastTurn(source.getControllerId()) > 0; + } else { + WatcherUtils.logMissingWatcher(game, source, PlayerLostLifeWatcher.class, this.getClass()); + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/SourceRemainsInZoneCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SourceRemainsInZoneCondition.java index 2d4e6a3d03c..67fe507a4a4 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/SourceRemainsInZoneCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/SourceRemainsInZoneCondition.java @@ -1,40 +1,40 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.condition.common; - -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.constants.Zone; -import mage.game.Game; - -/** - * - * @author LevelX2 - */ -public class SourceRemainsInZoneCondition implements Condition { - - private final Zone zone; - private int timesChangedZones = -1; - - public SourceRemainsInZoneCondition(Zone zone) { - this.zone = zone; - this.timesChangedZones = -1; - } - - @Override - public boolean apply(Game game, Ability source) { - if (timesChangedZones == -1) { // Only changed on first execution - timesChangedZones = game.getState().getZoneChangeCounter(source.getSourceId()); - } - return (timesChangedZones == game.getState().getZoneChangeCounter(source.getSourceId()) - && zone.equals(game.getState().getZone(source.getSourceId()))); - } - - @Override - public String toString() { - return "for as long as {this} remains on the " + zone.toString(); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.constants.Zone; +import mage.game.Game; + +/** + * + * @author LevelX2 + */ +public class SourceRemainsInZoneCondition implements Condition { + + private final Zone zone; + private int timesChangedZones = -1; + + public SourceRemainsInZoneCondition(Zone zone) { + this.zone = zone; + this.timesChangedZones = -1; + } + + @Override + public boolean apply(Game game, Ability source) { + if (timesChangedZones == -1) { // Only changed on first execution + timesChangedZones = game.getState().getZoneChangeCounter(source.getSourceId()); + } + return (timesChangedZones == game.getState().getZoneChangeCounter(source.getSourceId()) + && zone.equals(game.getState().getZone(source.getSourceId()))); + } + + @Override + public String toString() { + return "for as long as {this} remains on the " + zone.toString(); + } +} diff --git a/Mage/src/main/java/mage/abilities/condition/common/TargetHasCounterCondition.java b/Mage/src/main/java/mage/abilities/condition/common/TargetHasCounterCondition.java index 469a2bede07..da48962f3ff 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/TargetHasCounterCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/TargetHasCounterCondition.java @@ -1,72 +1,72 @@ - -package mage.abilities.condition.common; - -import mage.abilities.Ability; -import mage.abilities.condition.Condition; -import mage.cards.Card; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author Styxo - */ -public class TargetHasCounterCondition implements Condition { - - private final CounterType counterType; - private int amount = 1; - private int from = -1; - private int to; - - public TargetHasCounterCondition(CounterType type) { - this.counterType = type; - } - - public TargetHasCounterCondition(CounterType type, int amount) { - this.counterType = type; - this.amount = amount; - } - - public TargetHasCounterCondition(CounterType type, int from, int to) { - this.counterType = type; - this.from = from; - this.to = to; - } - - @Override - @SuppressWarnings("null") - public boolean apply(Game game, Ability source) { - Card card = null; - Permanent permanent = game.getPermanentOrLKIBattlefield(source.getFirstTarget()); - if (permanent == null) { - card = game.getCard(source.getFirstTarget()); - if (card == null) { - return false; - } - } - if (from != -1) { //range compare - int count; - if (card != null) { - count = card.getCounters(game).getCount(counterType); - } else { - count = permanent.getCounters(game).getCount(counterType); - } - if (to == Integer.MAX_VALUE) { - return count >= from; - } - return count >= from && count <= to; - } else { // single compare (lte) - if (card != null) { - return card.getCounters(game).getCount(counterType) >= amount; - } else { - return permanent.getCounters(game).getCount(counterType) >= amount; - } - } - } - - @Override - public String toString() { - return "if it has a " + counterType.getName() + " on it"; - } -} + +package mage.abilities.condition.common; + +import mage.abilities.Ability; +import mage.abilities.condition.Condition; +import mage.cards.Card; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class TargetHasCounterCondition implements Condition { + + private final CounterType counterType; + private int amount = 1; + private int from = -1; + private int to; + + public TargetHasCounterCondition(CounterType type) { + this.counterType = type; + } + + public TargetHasCounterCondition(CounterType type, int amount) { + this.counterType = type; + this.amount = amount; + } + + public TargetHasCounterCondition(CounterType type, int from, int to) { + this.counterType = type; + this.from = from; + this.to = to; + } + + @Override + @SuppressWarnings("null") + public boolean apply(Game game, Ability source) { + Card card = null; + Permanent permanent = game.getPermanentOrLKIBattlefield(source.getFirstTarget()); + if (permanent == null) { + card = game.getCard(source.getFirstTarget()); + if (card == null) { + return false; + } + } + if (from != -1) { //range compare + int count; + if (card != null) { + count = card.getCounters(game).getCount(counterType); + } else { + count = permanent.getCounters(game).getCount(counterType); + } + if (to == Integer.MAX_VALUE) { + return count >= from; + } + return count >= from && count <= to; + } else { // single compare (lte) + if (card != null) { + return card.getCounters(game).getCount(counterType) >= amount; + } else { + return permanent.getCounters(game).getCount(counterType) >= amount; + } + } + } + + @Override + public String toString() { + return "if it has a " + counterType.getName() + " on it"; + } +} diff --git a/Mage/src/main/java/mage/abilities/costs/common/CyclingDiscardCost.java b/Mage/src/main/java/mage/abilities/costs/common/CyclingDiscardCost.java index f4d5d4bcf93..5c846b0bdc4 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/CyclingDiscardCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/CyclingDiscardCost.java @@ -1,63 +1,63 @@ -package mage.abilities.costs.common; - -import mage.MageObjectReference; -import mage.abilities.Ability; -import mage.abilities.costs.Cost; -import mage.abilities.costs.CostImpl; -import mage.cards.Card; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.players.Player; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public class CyclingDiscardCost extends CostImpl { - - private MageObjectReference cycledCard = null; - - public CyclingDiscardCost() { - } - - private CyclingDiscardCost(CyclingDiscardCost cost) { - super(cost); - } - - @Override - public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { - return game.getPlayer(controllerId).getHand().contains(sourceId); - } - - @Override - public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { - Player player = game.getPlayer(controllerId); - if (player != null) { - Card card = player.getHand().get(sourceId, game); - if (card != null) { - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.CYCLE_CARD, card.getId(), card.getId(), card.getOwnerId())); - paid = player.discard(card, null, game); - if (paid) { - cycledCard = new MageObjectReference(card, game); - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.CYCLED_CARD, card.getId(), card.getId(), card.getOwnerId())); - } - } - } - return paid; - } - - @Override - public String getText() { - return "Discard this card"; - } - - @Override - public CyclingDiscardCost copy() { - return new CyclingDiscardCost(this); - } - - public MageObjectReference getCycledCard() { - return cycledCard; - } -} +package mage.abilities.costs.common; + +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.cards.Card; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public class CyclingDiscardCost extends CostImpl { + + private MageObjectReference cycledCard = null; + + public CyclingDiscardCost() { + } + + private CyclingDiscardCost(CyclingDiscardCost cost) { + super(cost); + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + return game.getPlayer(controllerId).getHand().contains(sourceId); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { + Player player = game.getPlayer(controllerId); + if (player != null) { + Card card = player.getHand().get(sourceId, game); + if (card != null) { + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.CYCLE_CARD, card.getId(), card.getId(), card.getOwnerId())); + paid = player.discard(card, null, game); + if (paid) { + cycledCard = new MageObjectReference(card, game); + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.CYCLED_CARD, card.getId(), card.getId(), card.getOwnerId())); + } + } + } + return paid; + } + + @Override + public String getText() { + return "Discard this card"; + } + + @Override + public CyclingDiscardCost copy() { + return new CyclingDiscardCost(this); + } + + public MageObjectReference getCycledCard() { + return cycledCard; + } +} diff --git a/Mage/src/main/java/mage/abilities/costs/common/ExertSourceCost.java b/Mage/src/main/java/mage/abilities/costs/common/ExertSourceCost.java index 957921b67f9..f17236eb5be 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/ExertSourceCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/ExertSourceCost.java @@ -1,54 +1,54 @@ - -package mage.abilities.costs.common; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.costs.Cost; -import mage.abilities.costs.CostImpl; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.players.Player; -import mage.target.targetpointer.FixedTarget; - -/** - * - * @author emerald000 - */ -public class ExertSourceCost extends CostImpl { - - public ExertSourceCost() { - this.text = "Exert {this}"; - } - - public ExertSourceCost(ExertSourceCost cost) { - super(cost); - } - - @Override - public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { - return true; - } - - @Override - public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { - Player player = game.getPlayer(controllerId); - Permanent permanent = game.getPermanent(sourceId); - if (player != null && permanent != null) { - game.fireEvent(GameEvent.getEvent(EventType.BECOMES_EXERTED, permanent.getId(), permanent.getId(), permanent.getControllerId())); - ContinuousEffect effect = new DontUntapInControllersNextUntapStepTargetEffect("", permanent.getControllerId()); - effect.setTargetPointer(new FixedTarget(permanent, game)); - game.addEffect(effect, ability); - paid = true; - } - return paid; - } - - @Override - public ExertSourceCost copy() { - return new ExertSourceCost(this); - } -} + +package mage.abilities.costs.common; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author emerald000 + */ +public class ExertSourceCost extends CostImpl { + + public ExertSourceCost() { + this.text = "Exert {this}"; + } + + public ExertSourceCost(ExertSourceCost cost) { + super(cost); + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + return true; + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { + Player player = game.getPlayer(controllerId); + Permanent permanent = game.getPermanent(sourceId); + if (player != null && permanent != null) { + game.fireEvent(GameEvent.getEvent(EventType.BECOMES_EXERTED, permanent.getId(), permanent.getId(), permanent.getControllerId())); + ContinuousEffect effect = new DontUntapInControllersNextUntapStepTargetEffect("", permanent.getControllerId()); + effect.setTargetPointer(new FixedTarget(permanent, game)); + game.addEffect(effect, ability); + paid = true; + } + return paid; + } + + @Override + public ExertSourceCost copy() { + return new ExertSourceCost(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/costs/common/PutCardFromHandOnTopOfLibraryCost.java b/Mage/src/main/java/mage/abilities/costs/common/PutCardFromHandOnTopOfLibraryCost.java index bd235979693..cd2820b391c 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/PutCardFromHandOnTopOfLibraryCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/PutCardFromHandOnTopOfLibraryCost.java @@ -1,60 +1,60 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.costs.common; - -import mage.abilities.Ability; -import mage.abilities.costs.Cost; -import mage.abilities.costs.CostImpl; -import mage.cards.Card; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetCardInHand; - -import java.util.UUID; - -/** - * @author jeffwadsworth - */ - -public class PutCardFromHandOnTopOfLibraryCost extends CostImpl { - - public PutCardFromHandOnTopOfLibraryCost() { - this.text = "Put a card from your hand on top of your library"; - } - - public PutCardFromHandOnTopOfLibraryCost(PutCardFromHandOnTopOfLibraryCost cost) { - super(cost); - } - - @Override - public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { - Player controller = game.getPlayer(controllerId); - TargetCardInHand targetCardInHand = new TargetCardInHand(); - targetCardInHand.setRequired(false); - Card card; - if (targetCardInHand.canChoose(controllerId, game) - && controller.choose(Outcome.PreventDamage, targetCardInHand, sourceId, game)) { - card = game.getCard(targetCardInHand.getFirstTarget()); - paid = card != null && controller.moveCardToLibraryWithInfo(card, sourceId, game, Zone.HAND, true, true); - } - return paid; - } - - @Override - public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { - Player controller = game.getPlayer(controllerId); - return (controller != null - && !controller.getHand().isEmpty()); - } - - @Override - public PutCardFromHandOnTopOfLibraryCost copy() { - return new PutCardFromHandOnTopOfLibraryCost(this); - } -} - +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.costs.common; + +import mage.abilities.Ability; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.cards.Card; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInHand; + +import java.util.UUID; + +/** + * @author jeffwadsworth + */ + +public class PutCardFromHandOnTopOfLibraryCost extends CostImpl { + + public PutCardFromHandOnTopOfLibraryCost() { + this.text = "Put a card from your hand on top of your library"; + } + + public PutCardFromHandOnTopOfLibraryCost(PutCardFromHandOnTopOfLibraryCost cost) { + super(cost); + } + + @Override + public boolean pay(Ability ability, Game game, UUID sourceId, UUID controllerId, boolean noMana, Cost costToPay) { + Player controller = game.getPlayer(controllerId); + TargetCardInHand targetCardInHand = new TargetCardInHand(); + targetCardInHand.setRequired(false); + Card card; + if (targetCardInHand.canChoose(controllerId, game) + && controller.choose(Outcome.PreventDamage, targetCardInHand, sourceId, game)) { + card = game.getCard(targetCardInHand.getFirstTarget()); + paid = card != null && controller.moveCardToLibraryWithInfo(card, sourceId, game, Zone.HAND, true, true); + } + return paid; + } + + @Override + public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { + Player controller = game.getPlayer(controllerId); + return (controller != null + && !controller.getHand().isEmpty()); + } + + @Override + public PutCardFromHandOnTopOfLibraryCost copy() { + return new PutCardFromHandOnTopOfLibraryCost(this); + } +} + diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/LockedInDynamicValue.java b/Mage/src/main/java/mage/abilities/dynamicvalue/LockedInDynamicValue.java index a156036ac36..54a902dab1e 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/LockedInDynamicValue.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/LockedInDynamicValue.java @@ -1,51 +1,51 @@ - -package mage.abilities.dynamicvalue; - -import mage.abilities.Ability; -import mage.abilities.effects.Effect; -import mage.game.Game; - -/** - * The first calculated value is used as long as the class instance is in use - * - * IMPORTANT: If used the ability / effect that uses a locked in dynamic value - * has to really copy the dnamic value in its copy method (not reference) - * - * @author LevelX2 - */ -public class LockedInDynamicValue implements DynamicValue { - - private boolean valueChecked = false; - private int lockedInValue; - private final DynamicValue basicDynamicValue; - - public LockedInDynamicValue(DynamicValue dynamicValue) { - this.basicDynamicValue = dynamicValue; - } - - public LockedInDynamicValue(LockedInDynamicValue dynamicValue, final boolean copy) { - this.basicDynamicValue = dynamicValue.basicDynamicValue; - this.lockedInValue = dynamicValue.lockedInValue; - this.valueChecked = dynamicValue.valueChecked; - } - - @Override - public int calculate(Game game, Ability sourceAbility, Effect effect) { - if (!valueChecked) { - lockedInValue = basicDynamicValue.calculate(game, sourceAbility, effect); - valueChecked = true; - } - return lockedInValue; - } - - @Override - public LockedInDynamicValue copy() { - return new LockedInDynamicValue(this, true); - } - - @Override - public String getMessage() { - return basicDynamicValue.getMessage(); - } - -} + +package mage.abilities.dynamicvalue; + +import mage.abilities.Ability; +import mage.abilities.effects.Effect; +import mage.game.Game; + +/** + * The first calculated value is used as long as the class instance is in use + * + * IMPORTANT: If used the ability / effect that uses a locked in dynamic value + * has to really copy the dnamic value in its copy method (not reference) + * + * @author LevelX2 + */ +public class LockedInDynamicValue implements DynamicValue { + + private boolean valueChecked = false; + private int lockedInValue; + private final DynamicValue basicDynamicValue; + + public LockedInDynamicValue(DynamicValue dynamicValue) { + this.basicDynamicValue = dynamicValue; + } + + public LockedInDynamicValue(LockedInDynamicValue dynamicValue, final boolean copy) { + this.basicDynamicValue = dynamicValue.basicDynamicValue; + this.lockedInValue = dynamicValue.lockedInValue; + this.valueChecked = dynamicValue.valueChecked; + } + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + if (!valueChecked) { + lockedInValue = basicDynamicValue.calculate(game, sourceAbility, effect); + valueChecked = true; + } + return lockedInValue; + } + + @Override + public LockedInDynamicValue copy() { + return new LockedInDynamicValue(this, true); + } + + @Override + public String getMessage() { + return basicDynamicValue.getMessage(); + } + +} diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/CountersCount.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/CountersCount.java index 488ea629559..5922c1608c8 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/CountersCount.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/CountersCount.java @@ -1,58 +1,58 @@ - -package mage.abilities.dynamicvalue.common; - -import mage.abilities.Ability; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.effects.Effect; -import mage.counters.CounterType; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author Styxo - */ -public class CountersCount implements DynamicValue { - - private CounterType counter; - private FilterPermanent filter; - - public CountersCount(CounterType counterType) { - this(counterType, new FilterPermanent()); - } - - public CountersCount(CounterType counter, FilterPermanent filter) { - this.counter = counter; - this.filter = filter; - } - - public CountersCount(final CountersCount countersCount) { - this.counter = countersCount.counter; - this.filter = countersCount.filter; - } - - @Override - public int calculate(Game game, Ability sourceAbility, Effect effect) { - int count = 0; - for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, game)) { - count += permanent.getCounters(game).getCount(counter); - } - return count; - } - - @Override - public CountersCount copy() { - return new CountersCount(this); - } - - @Override - public String toString() { - return "1"; - } - - @Override - public String getMessage() { - return counter.getName() + " counter on " + filter.getMessage(); - } -} + +package mage.abilities.dynamicvalue.common; + +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class CountersCount implements DynamicValue { + + private CounterType counter; + private FilterPermanent filter; + + public CountersCount(CounterType counterType) { + this(counterType, new FilterPermanent()); + } + + public CountersCount(CounterType counter, FilterPermanent filter) { + this.counter = counter; + this.filter = filter; + } + + public CountersCount(final CountersCount countersCount) { + this.counter = countersCount.counter; + this.filter = countersCount.filter; + } + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + int count = 0; + for (Permanent permanent : game.getBattlefield().getAllActivePermanents(filter, game)) { + count += permanent.getCounters(game).getCount(counter); + } + return count; + } + + @Override + public CountersCount copy() { + return new CountersCount(this); + } + + @Override + public String toString() { + return "1"; + } + + @Override + public String getMessage() { + return counter.getName() + " counter on " + filter.getMessage(); + } +} diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestPowerAmongControlledCreaturesValue.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestPowerAmongControlledCreaturesValue.java index 8989267cc2a..98ad23a0ea7 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestPowerAmongControlledCreaturesValue.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestPowerAmongControlledCreaturesValue.java @@ -1,44 +1,44 @@ - -package mage.abilities.dynamicvalue.common; - -import mage.abilities.Ability; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.effects.Effect; -import mage.filter.StaticFilters; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * @author Styxo - */ -public enum GreatestPowerAmongControlledCreaturesValue implements DynamicValue { - instance; - - @Override - public int calculate(Game game, Ability sourceAbility, Effect effect) { - int amount = 0; - for (Permanent p : game.getBattlefield().getActivePermanents( - StaticFilters.FILTER_CONTROLLED_CREATURE, sourceAbility.getControllerId(), game - )) { - amount = Math.max(p.getPower().getValue(), amount); - } - return amount; - } - - @Override - public GreatestPowerAmongControlledCreaturesValue copy() { - return GreatestPowerAmongControlledCreaturesValue.instance; - } - - @Override - public String getMessage() { - return "the greatest power among creatures you control"; - } - - @Override - public String toString() { - return "X"; - } - -} + +package mage.abilities.dynamicvalue.common; + +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * @author Styxo + */ +public enum GreatestPowerAmongControlledCreaturesValue implements DynamicValue { + instance; + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + int amount = 0; + for (Permanent p : game.getBattlefield().getActivePermanents( + StaticFilters.FILTER_CONTROLLED_CREATURE, sourceAbility.getControllerId(), game + )) { + amount = Math.max(p.getPower().getValue(), amount); + } + return amount; + } + + @Override + public GreatestPowerAmongControlledCreaturesValue copy() { + return GreatestPowerAmongControlledCreaturesValue.instance; + } + + @Override + public String getMessage() { + return "the greatest power among creatures you control"; + } + + @Override + public String toString() { + return "X"; + } + +} diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestToughnessAmongControlledCreaturesValue.java b/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestToughnessAmongControlledCreaturesValue.java index 2ffddc55f0f..68896429014 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestToughnessAmongControlledCreaturesValue.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/common/GreatestToughnessAmongControlledCreaturesValue.java @@ -1,43 +1,43 @@ - -package mage.abilities.dynamicvalue.common; - -import mage.abilities.Ability; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.effects.Effect; -import mage.filter.StaticFilters; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * @author TheElk801 - */ -public enum GreatestToughnessAmongControlledCreaturesValue implements DynamicValue { - instance; - - @Override - public int calculate(Game game, Ability sourceAbility, Effect effect) { - int amount = 0; - for (Permanent p : game.getBattlefield().getActivePermanents( - StaticFilters.FILTER_CONTROLLED_CREATURE, sourceAbility.getControllerId(), game - )) { - amount = Math.max(p.getToughness().getValue(), amount); - } - return amount; - } - - @Override - public GreatestToughnessAmongControlledCreaturesValue copy() { - return GreatestToughnessAmongControlledCreaturesValue.instance; - } - - @Override - public String getMessage() { - return "the greatest toughness among creatures you control"; - } - - @Override - public String toString() { - return "X"; - } - -} + +package mage.abilities.dynamicvalue.common; + +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * @author TheElk801 + */ +public enum GreatestToughnessAmongControlledCreaturesValue implements DynamicValue { + instance; + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + int amount = 0; + for (Permanent p : game.getBattlefield().getActivePermanents( + StaticFilters.FILTER_CONTROLLED_CREATURE, sourceAbility.getControllerId(), game + )) { + amount = Math.max(p.getToughness().getValue(), amount); + } + return amount; + } + + @Override + public GreatestToughnessAmongControlledCreaturesValue copy() { + return GreatestToughnessAmongControlledCreaturesValue.instance; + } + + @Override + public String getMessage() { + return "the greatest toughness among creatures you control"; + } + + @Override + public String toString() { + return "X"; + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/PreventDamageAndRemoveCountersEffect.java b/Mage/src/main/java/mage/abilities/effects/PreventDamageAndRemoveCountersEffect.java index 813f1ad7905..14c49680178 100644 --- a/Mage/src/main/java/mage/abilities/effects/PreventDamageAndRemoveCountersEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/PreventDamageAndRemoveCountersEffect.java @@ -1,66 +1,66 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects; - -import mage.abilities.Ability; -import mage.constants.Duration; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; - -/** - * @author antoni-g - */ -public class PreventDamageAndRemoveCountersEffect extends PreventionEffectImpl { - private final boolean thatMany; - - public PreventDamageAndRemoveCountersEffect(boolean thatMany) { - super(Duration.WhileOnBattlefield, Integer.MAX_VALUE, false, false); - this.thatMany = thatMany; - staticText = "If damage would be dealt to {this} while it has a +1/+1 counter on it, " + - "prevent that damage and remove " + (thatMany ? "that many +1/+1 counters" : "a +1/+1 counter") + " from it"; - } - - private PreventDamageAndRemoveCountersEffect(final PreventDamageAndRemoveCountersEffect effect) { - super(effect); - this.thatMany = effect.thatMany; - } - - @Override - public PreventDamageAndRemoveCountersEffect copy() { - return new PreventDamageAndRemoveCountersEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - int damage = event.getAmount(); - preventDamageAction(event, source, game); - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent == null) { - return false; - } - if (!thatMany) { - damage = 1; - } - permanent.removeCounters(CounterType.P1P1.createInstance(damage), game); //MTG ruling (this) loses counters even if the damage isn't prevented - return false; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - Permanent permanent = game.getPermanent(event.getTargetId()); - return super.applies(event, source, game) - && permanent != null - && event.getTargetId().equals(source.getSourceId()) - && permanent.getCounters(game).containsKey(CounterType.P1P1); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects; + +import mage.abilities.Ability; +import mage.constants.Duration; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +/** + * @author antoni-g + */ +public class PreventDamageAndRemoveCountersEffect extends PreventionEffectImpl { + private final boolean thatMany; + + public PreventDamageAndRemoveCountersEffect(boolean thatMany) { + super(Duration.WhileOnBattlefield, Integer.MAX_VALUE, false, false); + this.thatMany = thatMany; + staticText = "If damage would be dealt to {this} while it has a +1/+1 counter on it, " + + "prevent that damage and remove " + (thatMany ? "that many +1/+1 counters" : "a +1/+1 counter") + " from it"; + } + + private PreventDamageAndRemoveCountersEffect(final PreventDamageAndRemoveCountersEffect effect) { + super(effect); + this.thatMany = effect.thatMany; + } + + @Override + public PreventDamageAndRemoveCountersEffect copy() { + return new PreventDamageAndRemoveCountersEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + int damage = event.getAmount(); + preventDamageAction(event, source, game); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent == null) { + return false; + } + if (!thatMany) { + damage = 1; + } + permanent.removeCounters(CounterType.P1P1.createInstance(damage), game); //MTG ruling (this) loses counters even if the damage isn't prevented + return false; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Permanent permanent = game.getPermanent(event.getTargetId()); + return super.applies(event, source, game) + && permanent != null + && event.getTargetId().equals(source.getSourceId()) + && permanent.getCounters(game).containsKey(CounterType.P1P1); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedCardsGraveyardsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedCardsGraveyardsEffect.java index 67b64383c8e..9ba6c55c46e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedCardsGraveyardsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CantBeTargetedCardsGraveyardsEffect.java @@ -1,56 +1,56 @@ - -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; -import mage.cards.Card; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.stack.StackObject; - -/** - * - * @author LevelX2 - */ -public class CantBeTargetedCardsGraveyardsEffect extends ContinuousRuleModifyingEffectImpl { - - public CantBeTargetedCardsGraveyardsEffect() { - super(Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "Cards in graveyards can't be the targets of spells or abilities"; - } - - public CantBeTargetedCardsGraveyardsEffect(final CantBeTargetedCardsGraveyardsEffect effect) { - super(effect); - } - - @Override - public CantBeTargetedCardsGraveyardsEffect copy() { - return new CantBeTargetedCardsGraveyardsEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.TARGET; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - Card targetCard = game.getCard(event.getTargetId()); - StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); - if (targetCard != null && stackObject != null) { - Zone zone = game.getState().getZone(targetCard.getId()); - if (zone != null && zone == Zone.GRAVEYARD) { - return true; - } - } - return false; - } -} + +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; +import mage.cards.Card; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.stack.StackObject; + +/** + * + * @author LevelX2 + */ +public class CantBeTargetedCardsGraveyardsEffect extends ContinuousRuleModifyingEffectImpl { + + public CantBeTargetedCardsGraveyardsEffect() { + super(Duration.WhileOnBattlefield, Outcome.Benefit); + staticText = "Cards in graveyards can't be the targets of spells or abilities"; + } + + public CantBeTargetedCardsGraveyardsEffect(final CantBeTargetedCardsGraveyardsEffect effect) { + super(effect); + } + + @Override + public CantBeTargetedCardsGraveyardsEffect copy() { + return new CantBeTargetedCardsGraveyardsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TARGET; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + Card targetCard = game.getCard(event.getTargetId()); + StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); + if (targetCard != null && stackObject != null) { + Zone zone = game.getState().getZone(targetCard.getId()); + if (zone != null && zone == Zone.GRAVEYARD) { + return true; + } + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/DiscardCardControllerTriggeredAbility.java b/Mage/src/main/java/mage/abilities/effects/common/DiscardCardControllerTriggeredAbility.java index e13214695ff..5f5cc1875c8 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DiscardCardControllerTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DiscardCardControllerTriggeredAbility.java @@ -1,53 +1,53 @@ -package mage.abilities.effects.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.StaticFilters; -import mage.game.Game; -import mage.game.events.GameEvent; - -/** - * @author TheElk801 - */ - -public class DiscardCardControllerTriggeredAbility extends TriggeredAbilityImpl { - - private final FilterCard filter; - - public DiscardCardControllerTriggeredAbility(Effect effect, boolean isOptional) { - this(effect, isOptional, StaticFilters.FILTER_CARD_A); - } - - public DiscardCardControllerTriggeredAbility(Effect effect, boolean isOptional, FilterCard filter) { - super(Zone.BATTLEFIELD, effect, isOptional); - this.filter = filter; - } - - private DiscardCardControllerTriggeredAbility(final DiscardCardControllerTriggeredAbility ability) { - super(ability); - this.filter = ability.filter; - } - - @Override - public DiscardCardControllerTriggeredAbility copy() { - return new DiscardCardControllerTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DISCARDED_CARD; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - return event.getPlayerId().equals(getControllerId()) - && filter.match(game.getCard(event.getTargetId()), getId(), getControllerId(), game); - } - - @Override - public String getRule() { - return "Whenever you discard " + filter.getMessage() + ", " + super.getRule(); - } +package mage.abilities.effects.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.StaticFilters; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * @author TheElk801 + */ + +public class DiscardCardControllerTriggeredAbility extends TriggeredAbilityImpl { + + private final FilterCard filter; + + public DiscardCardControllerTriggeredAbility(Effect effect, boolean isOptional) { + this(effect, isOptional, StaticFilters.FILTER_CARD_A); + } + + public DiscardCardControllerTriggeredAbility(Effect effect, boolean isOptional, FilterCard filter) { + super(Zone.BATTLEFIELD, effect, isOptional); + this.filter = filter; + } + + private DiscardCardControllerTriggeredAbility(final DiscardCardControllerTriggeredAbility ability) { + super(ability); + this.filter = ability.filter; + } + + @Override + public DiscardCardControllerTriggeredAbility copy() { + return new DiscardCardControllerTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DISCARDED_CARD; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return event.getPlayerId().equals(getControllerId()) + && filter.match(game.getCard(event.getTargetId()), getId(), getControllerId(), game); + } + + @Override + public String getRule() { + return "Whenever you discard " + filter.getMessage() + ", " + super.getRule(); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/abilities/effects/common/DiscardCardPlayerTriggeredAbility.java b/Mage/src/main/java/mage/abilities/effects/common/DiscardCardPlayerTriggeredAbility.java index a977e752fda..a97f6dc9a41 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DiscardCardPlayerTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DiscardCardPlayerTriggeredAbility.java @@ -1,51 +1,51 @@ -package mage.abilities.effects.common; - -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.constants.SetTargetPointer; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; - -/** - * @author jeffwadsworth - */ - -public class DiscardCardPlayerTriggeredAbility extends TriggeredAbilityImpl { - - private SetTargetPointer setTargetPointer; - - public DiscardCardPlayerTriggeredAbility(Effect effect, boolean isOptional) { - this(effect, isOptional, SetTargetPointer.NONE); - } - - public DiscardCardPlayerTriggeredAbility(Effect effect, boolean isOptional, SetTargetPointer setTargetPointer) { - super(Zone.BATTLEFIELD, effect, isOptional); - this.setTargetPointer = setTargetPointer; - } - - private DiscardCardPlayerTriggeredAbility(final DiscardCardPlayerTriggeredAbility ability) { - super(ability); - this.setTargetPointer = ability.setTargetPointer; - } - - @Override - public DiscardCardPlayerTriggeredAbility copy() { - return new DiscardCardPlayerTriggeredAbility(this); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DISCARDED_CARD; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - return true; - } - - @Override - public String getRule() { - return "Whenever a player discards a card, " + super.getRule(); - } +package mage.abilities.effects.common; + +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.constants.SetTargetPointer; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * @author jeffwadsworth + */ + +public class DiscardCardPlayerTriggeredAbility extends TriggeredAbilityImpl { + + private SetTargetPointer setTargetPointer; + + public DiscardCardPlayerTriggeredAbility(Effect effect, boolean isOptional) { + this(effect, isOptional, SetTargetPointer.NONE); + } + + public DiscardCardPlayerTriggeredAbility(Effect effect, boolean isOptional, SetTargetPointer setTargetPointer) { + super(Zone.BATTLEFIELD, effect, isOptional); + this.setTargetPointer = setTargetPointer; + } + + private DiscardCardPlayerTriggeredAbility(final DiscardCardPlayerTriggeredAbility ability) { + super(ability); + this.setTargetPointer = ability.setTargetPointer; + } + + @Override + public DiscardCardPlayerTriggeredAbility copy() { + return new DiscardCardPlayerTriggeredAbility(this); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DISCARDED_CARD; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + return true; + } + + @Override + public String getRule() { + return "Whenever a player discards a card, " + super.getRule(); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExchangeLifeTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExchangeLifeTargetEffect.java index beaf72ba8cd..725072c7dc5 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExchangeLifeTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExchangeLifeTargetEffect.java @@ -1,65 +1,65 @@ - -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.game.Game; -import mage.players.Player; - -/** - * - * @author Styxo - */ -public class ExchangeLifeTargetEffect extends OneShotEffect { - - public ExchangeLifeTargetEffect() { - super(Outcome.Neutral); - } - - public ExchangeLifeTargetEffect(final ExchangeLifeTargetEffect effect) { - super(effect); - } - - @Override - public ExchangeLifeTargetEffect copy() { - return new ExchangeLifeTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Player player = game.getPlayer(source.getFirstTarget()); - if (controller != null && player != null) { - int lifeController = controller.getLife(); - int lifePlayer = player.getLife(); - - if (lifeController == lifePlayer) { - return false; - } - - if (!controller.isLifeTotalCanChange() || !player.isLifeTotalCanChange()) { - return false; - } - - if (lifeController < lifePlayer && (!controller.isCanGainLife() || !player.isCanLoseLife())) { - return false; - } - - if (lifeController > lifePlayer && (!controller.isCanLoseLife() || !player.isCanGainLife())) { - return false; - } - - controller.setLife(lifePlayer, game, source); - player.setLife(lifeController, game, source); - return true; - } - return false; - } - - @Override - public String getText(Mode mode) { - return "Exchange life totals with target " + mode.getTargets().get(0).getTargetName(); - } -} + +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class ExchangeLifeTargetEffect extends OneShotEffect { + + public ExchangeLifeTargetEffect() { + super(Outcome.Neutral); + } + + public ExchangeLifeTargetEffect(final ExchangeLifeTargetEffect effect) { + super(effect); + } + + @Override + public ExchangeLifeTargetEffect copy() { + return new ExchangeLifeTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Player player = game.getPlayer(source.getFirstTarget()); + if (controller != null && player != null) { + int lifeController = controller.getLife(); + int lifePlayer = player.getLife(); + + if (lifeController == lifePlayer) { + return false; + } + + if (!controller.isLifeTotalCanChange() || !player.isLifeTotalCanChange()) { + return false; + } + + if (lifeController < lifePlayer && (!controller.isCanGainLife() || !player.isCanLoseLife())) { + return false; + } + + if (lifeController > lifePlayer && (!controller.isCanLoseLife() || !player.isCanGainLife())) { + return false; + } + + controller.setLife(lifePlayer, game, source); + player.setLife(lifeController, game, source); + return true; + } + return false; + } + + @Override + public String getText(Mode mode) { + return "Exchange life totals with target " + mode.getTargets().get(0).getTargetName(); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileAttachedEffect.java index 26b09fb3aed..c37072315a4 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileAttachedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileAttachedEffect.java @@ -1,47 +1,47 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * - * @author Styxo - */ -public class ExileAttachedEffect extends OneShotEffect { - - public ExileAttachedEffect() { - super(Outcome.Exile); - staticText = "Exile enchanted creature"; - } - - public ExileAttachedEffect(final ExileAttachedEffect effect) { - super(effect); - } - - @Override - public ExileAttachedEffect copy() { - return new ExileAttachedEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Permanent enchantment = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if (controller != null && enchantment != null && enchantment.getAttachedTo() != null) { - Permanent creature = game.getPermanent(enchantment.getAttachedTo()); - if (creature != null) { - controller.moveCardsToExile(creature, source, game, true, null, ""); - } - } - return false; - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class ExileAttachedEffect extends OneShotEffect { + + public ExileAttachedEffect() { + super(Outcome.Exile); + staticText = "Exile enchanted creature"; + } + + public ExileAttachedEffect(final ExileAttachedEffect effect) { + super(effect); + } + + @Override + public ExileAttachedEffect copy() { + return new ExileAttachedEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Permanent enchantment = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (controller != null && enchantment != null && enchantment.getAttachedTo() != null) { + Permanent creature = game.getPermanent(enchantment.getAttachedTo()); + if (creature != null) { + controller.moveCardsToExile(creature, source, game, true, null, ""); + } + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetIfDiesEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetIfDiesEffect.java index bc826973559..ceb64907ca7 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileTargetIfDiesEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileTargetIfDiesEffect.java @@ -1,41 +1,41 @@ - -package mage.abilities.effects.common; - -import mage.MageObjectReference; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.replacement.DiesReplacementEffect; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author LevelX2 - */ -public class ExileTargetIfDiesEffect extends OneShotEffect { - - public ExileTargetIfDiesEffect() { - super(Outcome.Damage); - this.staticText = "If that creature would die this turn, exile it instead"; - } - - public ExileTargetIfDiesEffect(final ExileTargetIfDiesEffect effect) { - super(effect); - } - - @Override - public ExileTargetIfDiesEffect copy() { - return new ExileTargetIfDiesEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); - if (targetCreature != null) { - game.addEffect(new DiesReplacementEffect(new MageObjectReference(targetCreature, game), Duration.EndOfTurn), source); - } - return true; - } -} + +package mage.abilities.effects.common; + +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.replacement.DiesReplacementEffect; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author LevelX2 + */ +public class ExileTargetIfDiesEffect extends OneShotEffect { + + public ExileTargetIfDiesEffect() { + super(Outcome.Damage); + this.staticText = "If that creature would die this turn, exile it instead"; + } + + public ExileTargetIfDiesEffect(final ExileTargetIfDiesEffect effect) { + super(effect); + } + + @Override + public ExileTargetIfDiesEffect copy() { + return new ExileTargetIfDiesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); + if (targetCreature != null) { + game.addEffect(new DiesReplacementEffect(new MageObjectReference(targetCreature, game), Duration.EndOfTurn), source); + } + return true; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileUntilSourceLeavesEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileUntilSourceLeavesEffect.java index 433a7c97cff..22a73d8e0e9 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileUntilSourceLeavesEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileUntilSourceLeavesEffect.java @@ -1,47 +1,47 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.util.CardUtil; - -/** - * - * @author Styxo - */ -public class ExileUntilSourceLeavesEffect extends OneShotEffect { - - public ExileUntilSourceLeavesEffect(String targetName) { - super(Outcome.Removal); - this.staticText = "exile target " + targetName + " an opponent controls until {this} leaves the battlefield"; - } - - public ExileUntilSourceLeavesEffect(final ExileUntilSourceLeavesEffect effect) { - super(effect); - } - - @Override - public ExileUntilSourceLeavesEffect copy() { - return new ExileUntilSourceLeavesEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - ExileTargetEffect effect = new ExileTargetEffect(CardUtil.getCardExileZoneId(game, source), permanent.getIdName()); - if (targetPointer != null) { // Grasping Giant - effect.setTargetPointer(targetPointer); - } - return effect.apply(game, source); - } - return false; - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.util.CardUtil; + +/** + * + * @author Styxo + */ +public class ExileUntilSourceLeavesEffect extends OneShotEffect { + + public ExileUntilSourceLeavesEffect(String targetName) { + super(Outcome.Removal); + this.staticText = "exile target " + targetName + " an opponent controls until {this} leaves the battlefield"; + } + + public ExileUntilSourceLeavesEffect(final ExileUntilSourceLeavesEffect effect) { + super(effect); + } + + @Override + public ExileUntilSourceLeavesEffect copy() { + return new ExileUntilSourceLeavesEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + ExileTargetEffect effect = new ExileTargetEffect(CardUtil.getCardExileZoneId(game, source), permanent.getIdName()); + if (targetPointer != null) { // Grasping Giant + effect.setTargetPointer(targetPointer); + } + return effect.apply(game, source); + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/FlipCoinEffect.java b/Mage/src/main/java/mage/abilities/effects/common/FlipCoinEffect.java index 954d77c1920..afa980f0390 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/FlipCoinEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/FlipCoinEffect.java @@ -1,92 +1,92 @@ - -package mage.abilities.effects.common; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.effects.ContinuousEffect; -import mage.abilities.effects.Effect; -import mage.abilities.effects.Effects; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.game.Game; -import mage.players.Player; - -/** - * - * @author LevelX2 - */ -public class FlipCoinEffect extends OneShotEffect { - - protected Effects executingEffectsWon = new Effects(); - protected Effects executingEffectsLost = new Effects(); - - public FlipCoinEffect(Effect effectWon) { - this(effectWon, null); - } - - public FlipCoinEffect(Effect effectWon, Effect effectLost) { - this(effectWon, effectLost, Outcome.Benefit); - - } - - public FlipCoinEffect(Effect effectWon, Effect effectLost, Outcome outcome) { - super(outcome); - addEffectWon(effectWon); - addEffectLost(effectLost); - } - - public FlipCoinEffect(final FlipCoinEffect effect) { - super(effect); - this.executingEffectsWon = effect.executingEffectsWon.copy(); - this.executingEffectsLost = effect.executingEffectsLost.copy(); - } - - public void addEffectWon(Effect effect) { - if (effect != null) { - executingEffectsWon.add(effect); - } - } - - public void addEffectLost(Effect effect) { - if (effect != null) { - executingEffectsLost.add(effect); - } - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - MageObject mageObject = game.getObject(source.getSourceId()); - if (controller != null && mageObject != null) { - boolean result = true; - for (Effect effect : controller.flipCoin(source, game, true) ? executingEffectsWon : executingEffectsLost) { - effect.setTargetPointer(this.targetPointer); - if (effect instanceof OneShotEffect) { - result &= effect.apply(game, source); - } else { - game.addEffect((ContinuousEffect) effect, source); - } - } - return result; - } - return false; - } - - @Override - public String getText(Mode mode) { - if (!staticText.isEmpty()) { - return staticText; - } - StringBuilder sb = new StringBuilder("Flip a coin. If you win the flip, ").append(executingEffectsWon.getText(mode)); - if (!executingEffectsLost.isEmpty()) { - sb.append(" If you lose the flip, ").append(executingEffectsLost.getText(mode)); - } - return sb.toString(); - } - - @Override - public FlipCoinEffect copy() { - return new FlipCoinEffect(this); - } -} + +package mage.abilities.effects.common; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.ContinuousEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.Effects; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class FlipCoinEffect extends OneShotEffect { + + protected Effects executingEffectsWon = new Effects(); + protected Effects executingEffectsLost = new Effects(); + + public FlipCoinEffect(Effect effectWon) { + this(effectWon, null); + } + + public FlipCoinEffect(Effect effectWon, Effect effectLost) { + this(effectWon, effectLost, Outcome.Benefit); + + } + + public FlipCoinEffect(Effect effectWon, Effect effectLost, Outcome outcome) { + super(outcome); + addEffectWon(effectWon); + addEffectLost(effectLost); + } + + public FlipCoinEffect(final FlipCoinEffect effect) { + super(effect); + this.executingEffectsWon = effect.executingEffectsWon.copy(); + this.executingEffectsLost = effect.executingEffectsLost.copy(); + } + + public void addEffectWon(Effect effect) { + if (effect != null) { + executingEffectsWon.add(effect); + } + } + + public void addEffectLost(Effect effect) { + if (effect != null) { + executingEffectsLost.add(effect); + } + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject mageObject = game.getObject(source.getSourceId()); + if (controller != null && mageObject != null) { + boolean result = true; + for (Effect effect : controller.flipCoin(source, game, true) ? executingEffectsWon : executingEffectsLost) { + effect.setTargetPointer(this.targetPointer); + if (effect instanceof OneShotEffect) { + result &= effect.apply(game, source); + } else { + game.addEffect((ContinuousEffect) effect, source); + } + } + return result; + } + return false; + } + + @Override + public String getText(Mode mode) { + if (!staticText.isEmpty()) { + return staticText; + } + StringBuilder sb = new StringBuilder("Flip a coin. If you win the flip, ").append(executingEffectsWon.getText(mode)); + if (!executingEffectsLost.isEmpty()) { + sb.append(" If you lose the flip, ").append(executingEffectsLost.getText(mode)); + } + return sb.toString(); + } + + @Override + public FlipCoinEffect copy() { + return new FlipCoinEffect(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/LoseHalfLifeTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/LoseHalfLifeTargetEffect.java index 196612959dc..230c26baf89 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/LoseHalfLifeTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/LoseHalfLifeTargetEffect.java @@ -1,42 +1,42 @@ - -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.game.Game; -import mage.players.Player; - -/** - * - * @author Styxo - */ -public class LoseHalfLifeTargetEffect extends OneShotEffect { - - public LoseHalfLifeTargetEffect() { - super(Outcome.Damage); - staticText = "that player loses half their life, rounded up"; - } - - public LoseHalfLifeTargetEffect(final LoseHalfLifeTargetEffect effect) { - super(effect); - } - - @Override - public LoseHalfLifeTargetEffect copy() { - return new LoseHalfLifeTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(targetPointer.getFirst(game, source)); - if (player != null) { - Integer amount = (int) Math.ceil(player.getLife() / 2f); - if (amount > 0) { - player.loseLife(amount, game, false); - return true; - } - } - return false; - } -} + +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class LoseHalfLifeTargetEffect extends OneShotEffect { + + public LoseHalfLifeTargetEffect() { + super(Outcome.Damage); + staticText = "that player loses half their life, rounded up"; + } + + public LoseHalfLifeTargetEffect(final LoseHalfLifeTargetEffect effect) { + super(effect); + } + + @Override + public LoseHalfLifeTargetEffect copy() { + return new LoseHalfLifeTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(targetPointer.getFirst(game, source)); + if (player != null) { + Integer amount = (int) Math.ceil(player.getLife() / 2f); + if (amount > 0) { + player.loseLife(amount, game, false); + return true; + } + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnCreaturesFromExileEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnCreaturesFromExileEffect.java index a33ef0f2d45..76594aa066c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnCreaturesFromExileEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnCreaturesFromExileEffect.java @@ -1,46 +1,46 @@ -package mage.abilities.effects.common; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.common.FilterCreatureCard; -import mage.game.ExileZone; -import mage.game.Game; -import mage.players.Player; - -public class ReturnCreaturesFromExileEffect extends OneShotEffect { - - private UUID exileId; - private boolean byOwner; - - public ReturnCreaturesFromExileEffect(UUID exileId, boolean byOwner, String description) { - super(Outcome.PutCardInPlay); - this.exileId = exileId; - this.setText(description); - this.byOwner = byOwner; - } - - - public ReturnCreaturesFromExileEffect(final ReturnCreaturesFromExileEffect effect) { - super(effect); - this.exileId = effect.exileId; - } - - @Override - public ReturnCreaturesFromExileEffect copy() { - return new ReturnCreaturesFromExileEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - ExileZone exile = game.getExile().getExileZone(exileId); - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null && exile != null) { - controller.moveCards(exile.getCards(new FilterCreatureCard(), game), Zone.BATTLEFIELD, source, game, false, false, this.byOwner, null); - return true; - } - return false; - } -} +package mage.abilities.effects.common; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.game.ExileZone; +import mage.game.Game; +import mage.players.Player; + +public class ReturnCreaturesFromExileEffect extends OneShotEffect { + + private UUID exileId; + private boolean byOwner; + + public ReturnCreaturesFromExileEffect(UUID exileId, boolean byOwner, String description) { + super(Outcome.PutCardInPlay); + this.exileId = exileId; + this.setText(description); + this.byOwner = byOwner; + } + + + public ReturnCreaturesFromExileEffect(final ReturnCreaturesFromExileEffect effect) { + super(effect); + this.exileId = effect.exileId; + } + + @Override + public ReturnCreaturesFromExileEffect copy() { + return new ReturnCreaturesFromExileEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + ExileZone exile = game.getExile().getExileZone(exileId); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && exile != null) { + controller.moveCards(exile.getCards(new FilterCreatureCard(), game), Zone.BATTLEFIELD, source, game, false, false, this.byOwner, null); + return true; + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java b/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java index 346e8efeb20..2d381520ed3 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/RevealCardsFromLibraryUntilEffect.java @@ -1,149 +1,149 @@ - -package mage.abilities.effects.common; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.players.Library; -import mage.players.Player; - -/** - * - * @author Styxo - */ -public class RevealCardsFromLibraryUntilEffect extends OneShotEffect { - - private FilterCard filter; - private Zone zoneToPutRest; - private Zone zoneToPutCard; - private boolean shuffleRestInto; - private boolean anyOrder; - - public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest) { - this(filter, zoneToPutCard, zoneToPutRest, false, false); - } - - public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest, boolean shuffleRestInto) { - this(filter, zoneToPutCard, zoneToPutRest, shuffleRestInto, false); - } - - public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest, boolean shuffleRestInto, boolean anyOrder) { - super(Outcome.Benefit); - this.filter = filter; - this.zoneToPutCard = zoneToPutCard; - this.zoneToPutRest = zoneToPutRest; - this.shuffleRestInto = shuffleRestInto; - this.anyOrder = anyOrder; - setText(); - } - - public RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) { - super(effect); - this.filter = effect.filter; - this.zoneToPutCard = effect.zoneToPutCard; - this.zoneToPutRest = effect.zoneToPutRest; - this.shuffleRestInto = effect.shuffleRestInto; - this.anyOrder = effect.anyOrder; - setText(); - } - - @Override - public RevealCardsFromLibraryUntilEffect copy() { - return new RevealCardsFromLibraryUntilEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = game.getObject(source.getSourceId()); - if (controller != null && controller.getLibrary().hasCards()) { - Cards cards = new CardsImpl(); - Library library = controller.getLibrary(); - Card card = null; - do { - card = library.removeFromTop(game); - if (card != null) { - cards.add(card); - } - } while (library.hasCards() && card != null && !filter.match(card, game)); - // reveal cards - if (!cards.isEmpty()) { - controller.revealCards(sourceObject.getIdName(), cards, game); - if (filter.match(card, game)) { - // put card in correct zone - controller.moveCards(card, zoneToPutCard, source, game); - // remove it from revealed card list - cards.remove(card); - } - // Put the rest in correct zone - switch (zoneToPutRest) { - case LIBRARY: { - if (!cards.isEmpty()) { - if (shuffleRestInto) { - library.addAll(cards.getCards(game), game); - } else { - controller.putCardsOnBottomOfLibrary(cards, game, source, anyOrder); - } - } - break; - } - default: - if (!cards.isEmpty()) { - controller.moveCards(cards, zoneToPutRest, source, game); - } - } - } - return true; - } - return false; - } - - private void setText() { - StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal a " + filter.getMessage() + ". Put that card "); - - switch (zoneToPutCard) { - case HAND: { - sb.append("into your hand "); - break; - } - case BATTLEFIELD: { - sb.append("onto the battlefield"); - break; - } - } - - switch (zoneToPutRest) { - case GRAVEYARD: { - sb.append(" and put all other cards revealed this way into your graveyard."); - break; - } - case LIBRARY: { - if (shuffleRestInto) { - sb.append(", then shuffles the rest into their library."); - } else { - sb.append(" and the rest on the bottom of your library in "); - if (anyOrder) { - sb.append("any"); - } else { - sb.append("a random"); - - } - sb.append(" order"); - } - break; - } - case EXILED: { - sb.append(" and exile all other cards revealed this way."); - break; - } - } - staticText = sb.toString(); - } -} + +package mage.abilities.effects.common; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.players.Library; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class RevealCardsFromLibraryUntilEffect extends OneShotEffect { + + private FilterCard filter; + private Zone zoneToPutRest; + private Zone zoneToPutCard; + private boolean shuffleRestInto; + private boolean anyOrder; + + public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest) { + this(filter, zoneToPutCard, zoneToPutRest, false, false); + } + + public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest, boolean shuffleRestInto) { + this(filter, zoneToPutCard, zoneToPutRest, shuffleRestInto, false); + } + + public RevealCardsFromLibraryUntilEffect(FilterCard filter, Zone zoneToPutCard, Zone zoneToPutRest, boolean shuffleRestInto, boolean anyOrder) { + super(Outcome.Benefit); + this.filter = filter; + this.zoneToPutCard = zoneToPutCard; + this.zoneToPutRest = zoneToPutRest; + this.shuffleRestInto = shuffleRestInto; + this.anyOrder = anyOrder; + setText(); + } + + public RevealCardsFromLibraryUntilEffect(final RevealCardsFromLibraryUntilEffect effect) { + super(effect); + this.filter = effect.filter; + this.zoneToPutCard = effect.zoneToPutCard; + this.zoneToPutRest = effect.zoneToPutRest; + this.shuffleRestInto = effect.shuffleRestInto; + this.anyOrder = effect.anyOrder; + setText(); + } + + @Override + public RevealCardsFromLibraryUntilEffect copy() { + return new RevealCardsFromLibraryUntilEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = game.getObject(source.getSourceId()); + if (controller != null && controller.getLibrary().hasCards()) { + Cards cards = new CardsImpl(); + Library library = controller.getLibrary(); + Card card = null; + do { + card = library.removeFromTop(game); + if (card != null) { + cards.add(card); + } + } while (library.hasCards() && card != null && !filter.match(card, game)); + // reveal cards + if (!cards.isEmpty()) { + controller.revealCards(sourceObject.getIdName(), cards, game); + if (filter.match(card, game)) { + // put card in correct zone + controller.moveCards(card, zoneToPutCard, source, game); + // remove it from revealed card list + cards.remove(card); + } + // Put the rest in correct zone + switch (zoneToPutRest) { + case LIBRARY: { + if (!cards.isEmpty()) { + if (shuffleRestInto) { + library.addAll(cards.getCards(game), game); + } else { + controller.putCardsOnBottomOfLibrary(cards, game, source, anyOrder); + } + } + break; + } + default: + if (!cards.isEmpty()) { + controller.moveCards(cards, zoneToPutRest, source, game); + } + } + } + return true; + } + return false; + } + + private void setText() { + StringBuilder sb = new StringBuilder("reveal cards from the top of your library until you reveal a " + filter.getMessage() + ". Put that card "); + + switch (zoneToPutCard) { + case HAND: { + sb.append("into your hand "); + break; + } + case BATTLEFIELD: { + sb.append("onto the battlefield"); + break; + } + } + + switch (zoneToPutRest) { + case GRAVEYARD: { + sb.append(" and put all other cards revealed this way into your graveyard."); + break; + } + case LIBRARY: { + if (shuffleRestInto) { + sb.append(", then shuffles the rest into their library."); + } else { + sb.append(" and the rest on the bottom of your library in "); + if (anyOrder) { + sb.append("any"); + } else { + sb.append("a random"); + + } + sb.append(" order"); + } + break; + } + case EXILED: { + sb.append(" and exile all other cards revealed this way."); + break; + } + } + staticText = sb.toString(); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/SetPlayerLifeTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SetPlayerLifeTargetEffect.java index cb79f6e1f68..1ac1c709002 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SetPlayerLifeTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SetPlayerLifeTargetEffect.java @@ -1,55 +1,55 @@ - -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.game.Game; -import mage.players.Player; - -/** - * - * @author Styxo - */ -public class SetPlayerLifeTargetEffect extends OneShotEffect { - - protected DynamicValue amount; - - public SetPlayerLifeTargetEffect(int amount) { - this(StaticValue.get(amount)); - } - - public SetPlayerLifeTargetEffect(DynamicValue amount) { - super(Outcome.Neutral); - this.amount = amount; - this.staticText = setText(); - } - - public SetPlayerLifeTargetEffect(final SetPlayerLifeTargetEffect effect) { - super(effect); - this.amount = effect.amount; - } - - @Override - public SetPlayerLifeTargetEffect copy() { - return new SetPlayerLifeTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(targetPointer.getFirst(game, source)); - if (player != null) { - player.setLife(amount.calculate(game, source, this), game, source); - return true; - } - return false; - } - - private String setText() { - StringBuilder sb = new StringBuilder("Target player's life total becomes "); - sb.append(amount.toString()); - return sb.toString(); - } + +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class SetPlayerLifeTargetEffect extends OneShotEffect { + + protected DynamicValue amount; + + public SetPlayerLifeTargetEffect(int amount) { + this(StaticValue.get(amount)); + } + + public SetPlayerLifeTargetEffect(DynamicValue amount) { + super(Outcome.Neutral); + this.amount = amount; + this.staticText = setText(); + } + + public SetPlayerLifeTargetEffect(final SetPlayerLifeTargetEffect effect) { + super(effect); + this.amount = effect.amount; + } + + @Override + public SetPlayerLifeTargetEffect copy() { + return new SetPlayerLifeTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(targetPointer.getFirst(game, source)); + if (player != null) { + player.setLife(amount.calculate(game, source, this), game, source); + return true; + } + return false; + } + + private String setText() { + StringBuilder sb = new StringBuilder("Target player's life total becomes "); + sb.append(amount.toString()); + return sb.toString(); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibraryTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibraryTargetEffect.java index 5166946dfa3..09ced2946b9 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibraryTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ShuffleIntoLibraryTargetEffect.java @@ -1,62 +1,62 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * - * @author Styxo - */ -public class ShuffleIntoLibraryTargetEffect extends OneShotEffect { - - public ShuffleIntoLibraryTargetEffect() { - super(Outcome.Detriment); - } - - public ShuffleIntoLibraryTargetEffect(String effectText) { - super(Outcome.Detriment); - this.staticText = effectText; - } - - public ShuffleIntoLibraryTargetEffect(final ShuffleIntoLibraryTargetEffect effect) { - super(effect); - } - - @Override - public ShuffleIntoLibraryTargetEffect copy() { - return new ShuffleIntoLibraryTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); - Player controller = game.getPlayer(source.getControllerId()); - if (permanent != null && controller != null) { - if (controller.moveCards(permanent, Zone.LIBRARY, source, game)) { - game.getPlayer(permanent.getOwnerId()).shuffleLibrary(source, game); - } - return true; - } - return false; - } - - @Override - public String getText(Mode mode) { - if (staticText != null && !staticText.isEmpty()) { - return staticText; - } else { - return "choose target " + mode.getTargets().get(0).getTargetName() + ". Its owner shuffles it into their library"; - } - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class ShuffleIntoLibraryTargetEffect extends OneShotEffect { + + public ShuffleIntoLibraryTargetEffect() { + super(Outcome.Detriment); + } + + public ShuffleIntoLibraryTargetEffect(String effectText) { + super(Outcome.Detriment); + this.staticText = effectText; + } + + public ShuffleIntoLibraryTargetEffect(final ShuffleIntoLibraryTargetEffect effect) { + super(effect); + } + + @Override + public ShuffleIntoLibraryTargetEffect copy() { + return new ShuffleIntoLibraryTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); + Player controller = game.getPlayer(source.getControllerId()); + if (permanent != null && controller != null) { + if (controller.moveCards(permanent, Zone.LIBRARY, source, game)) { + game.getPlayer(permanent.getOwnerId()).shuffleLibrary(source, game); + } + return true; + } + return false; + } + + @Override + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } else { + return "choose target " + mode.getTargets().get(0).getTargetName() + ". Its owner shuffles it into their library"; + } + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/SkipCombatStepEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SkipCombatStepEffect.java index 4d72fe19fd0..dee8ec1f450 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SkipCombatStepEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SkipCombatStepEffect.java @@ -1,55 +1,55 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.effects.ReplacementEffectImpl; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.events.GameEvent; - -/** - * - * @author jeffwadsworth - */ - -public class SkipCombatStepEffect extends ReplacementEffectImpl { - - public SkipCombatStepEffect(Duration duration) { - super(duration, Outcome.Detriment); - staticText = "that player skips their next combat phase"; - } - - public SkipCombatStepEffect(final SkipCombatStepEffect effect) { - super(effect); - } - - @Override - public SkipCombatStepEffect copy() { - return new SkipCombatStepEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.COMBAT_PHASE; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - return event.getPlayerId().equals(targetPointer.getFirst(game, source)); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * + * @author jeffwadsworth + */ + +public class SkipCombatStepEffect extends ReplacementEffectImpl { + + public SkipCombatStepEffect(Duration duration) { + super(duration, Outcome.Detriment); + staticText = "that player skips their next combat phase"; + } + + public SkipCombatStepEffect(final SkipCombatStepEffect effect) { + super(effect); + } + + @Override + public SkipCombatStepEffect copy() { + return new SkipCombatStepEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COMBAT_PHASE; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getPlayerId().equals(targetPointer.getFirst(game, source)); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/SkipNextDrawStepTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/SkipNextDrawStepTargetEffect.java index e0d819beaff..17dc0aba8ad 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/SkipNextDrawStepTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/SkipNextDrawStepTargetEffect.java @@ -1,55 +1,55 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common; - -import mage.abilities.Ability; -import mage.abilities.effects.ReplacementEffectImpl; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.events.GameEvent; - -/** - * - * @author jeffwadsworth - */ - -public class SkipNextDrawStepTargetEffect extends ReplacementEffectImpl { - - public SkipNextDrawStepTargetEffect() { - super(Duration.OneUse, Outcome.Detriment); - staticText = "Target player skips their next draw step"; - } - - public SkipNextDrawStepTargetEffect(final SkipNextDrawStepTargetEffect effect) { - super(effect); - } - - @Override - public SkipNextDrawStepTargetEffect copy() { - return new SkipNextDrawStepTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.DRAW_STEP; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - return event.getPlayerId().equals(source.getFirstTarget()); - } +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * + * @author jeffwadsworth + */ + +public class SkipNextDrawStepTargetEffect extends ReplacementEffectImpl { + + public SkipNextDrawStepTargetEffect() { + super(Duration.OneUse, Outcome.Detriment); + staticText = "Target player skips their next draw step"; + } + + public SkipNextDrawStepTargetEffect(final SkipNextDrawStepTargetEffect effect) { + super(effect); + } + + @Override + public SkipNextDrawStepTargetEffect copy() { + return new SkipNextDrawStepTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.DRAW_STEP; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getPlayerId().equals(source.getFirstTarget()); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/abilities/effects/common/WishEffect.java b/Mage/src/main/java/mage/abilities/effects/common/WishEffect.java index 074459a3850..001dd53aafa 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/WishEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/WishEffect.java @@ -1,120 +1,120 @@ -package mage.abilities.effects.common; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; - -import java.util.List; -import java.util.Set; - -/** - * @author Styxo - */ -public class WishEffect extends OneShotEffect { - - private final FilterCard filter; - private final boolean reveal; - private final boolean alsoFromExile; - private final String choiceText; - - public WishEffect() { - this(new FilterCard()); - } - - public WishEffect(FilterCard filter) { - this(filter, true); - } - - public WishEffect(FilterCard filter, boolean reveal) { - this(filter, reveal, false); - } - - public WishEffect(FilterCard filter, boolean reveal, boolean alsoFromExile) { - super(Outcome.DrawCard); - this.filter = filter; - this.alsoFromExile = alsoFromExile; - this.reveal = reveal; - choiceText = "Choose " + filter.getMessage() + " you own from outside the game" - + (alsoFromExile ? " or in exile" : "") - + (reveal ? ", reveal that card," : "") - + " and put it into your hand."; - staticText = "You may c" + choiceText.substring(1, choiceText.length() - 1); - - } - - public WishEffect(final WishEffect effect) { - super(effect); - this.filter = effect.filter; - this.alsoFromExile = effect.alsoFromExile; - this.reveal = effect.reveal; - this.choiceText = effect.choiceText; - } - - @Override - public WishEffect copy() { - return new WishEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = source.getSourceObject(game); - if (controller != null && sourceObject != null) { - if (controller.chooseUse(Outcome.Benefit, choiceText, source, game)) { - Cards cards = controller.getSideboard(); - List exile = game.getExile().getAllCards(game); - boolean noTargets = cards.isEmpty() && (!alsoFromExile || exile.isEmpty()); - if (noTargets) { - game.informPlayer(controller, "You have no cards outside the game" + (alsoFromExile ? " or in exile" : "") + '.'); - return true; - } - - Set filtered = cards.getCards(filter, game); - Cards filteredCards = new CardsImpl(); - for (Card card : filtered) { - filteredCards.add(card.getId()); - } - if (alsoFromExile) { - for (Card exileCard : exile) { - if (exileCard.isOwnedBy(source.getControllerId()) && filter.match(exileCard, game)) { - filteredCards.add(exileCard); - } - } - } - if (filteredCards.isEmpty()) { - game.informPlayer(controller, "You don't have " + filter.getMessage() + " outside the game" + (alsoFromExile ? " or in exile" : "") + '.'); - return true; - } - - TargetCard target = new TargetCard(Zone.ALL, filter); - target.setNotTarget(true); - if (controller.choose(Outcome.Benefit, filteredCards, target, game)) { - Card card = controller.getSideboard().get(target.getFirstTarget(), game); - if (card == null && alsoFromExile) { - card = game.getCard(target.getFirstTarget()); - } - if (card != null) { - card.moveToZone(Zone.HAND, source.getSourceId(), game, false); - if (reveal) { - Cards revealCard = new CardsImpl(); - revealCard.add(card); - controller.revealCards(sourceObject.getIdName(), revealCard, game); - } - } - } - } - return true; - } - return false; - } - -} +package mage.abilities.effects.common; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; + +import java.util.List; +import java.util.Set; + +/** + * @author Styxo + */ +public class WishEffect extends OneShotEffect { + + private final FilterCard filter; + private final boolean reveal; + private final boolean alsoFromExile; + private final String choiceText; + + public WishEffect() { + this(new FilterCard()); + } + + public WishEffect(FilterCard filter) { + this(filter, true); + } + + public WishEffect(FilterCard filter, boolean reveal) { + this(filter, reveal, false); + } + + public WishEffect(FilterCard filter, boolean reveal, boolean alsoFromExile) { + super(Outcome.DrawCard); + this.filter = filter; + this.alsoFromExile = alsoFromExile; + this.reveal = reveal; + choiceText = "Choose " + filter.getMessage() + " you own from outside the game" + + (alsoFromExile ? " or in exile" : "") + + (reveal ? ", reveal that card," : "") + + " and put it into your hand."; + staticText = "You may c" + choiceText.substring(1, choiceText.length() - 1); + + } + + public WishEffect(final WishEffect effect) { + super(effect); + this.filter = effect.filter; + this.alsoFromExile = effect.alsoFromExile; + this.reveal = effect.reveal; + this.choiceText = effect.choiceText; + } + + @Override + public WishEffect copy() { + return new WishEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + if (controller.chooseUse(Outcome.Benefit, choiceText, source, game)) { + Cards cards = controller.getSideboard(); + List exile = game.getExile().getAllCards(game); + boolean noTargets = cards.isEmpty() && (!alsoFromExile || exile.isEmpty()); + if (noTargets) { + game.informPlayer(controller, "You have no cards outside the game" + (alsoFromExile ? " or in exile" : "") + '.'); + return true; + } + + Set filtered = cards.getCards(filter, game); + Cards filteredCards = new CardsImpl(); + for (Card card : filtered) { + filteredCards.add(card.getId()); + } + if (alsoFromExile) { + for (Card exileCard : exile) { + if (exileCard.isOwnedBy(source.getControllerId()) && filter.match(exileCard, game)) { + filteredCards.add(exileCard); + } + } + } + if (filteredCards.isEmpty()) { + game.informPlayer(controller, "You don't have " + filter.getMessage() + " outside the game" + (alsoFromExile ? " or in exile" : "") + '.'); + return true; + } + + TargetCard target = new TargetCard(Zone.ALL, filter); + target.setNotTarget(true); + if (controller.choose(Outcome.Benefit, filteredCards, target, game)) { + Card card = controller.getSideboard().get(target.getFirstTarget(), game); + if (card == null && alsoFromExile) { + card = game.getCard(target.getFirstTarget()); + } + if (card != null) { + card.moveToZone(Zone.HAND, source.getSourceId(), game, false); + if (reveal) { + Cards revealCard = new CardsImpl(); + revealCard.add(card); + controller.revealCards(sourceObject.getIdName(), revealCard, game); + } + } + } + } + return true; + } + return false; + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect.java index 16b27519ee6..e7727fe2b65 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect.java @@ -1,165 +1,165 @@ -package mage.abilities.effects.common.continuous; - -import mage.MageObjectReference; -import mage.abilities.Ability; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.constants.*; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.permanent.token.Token; - -/** - * @author jeffwadsworth - */ -public class BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect extends ContinuousEffectImpl { - - public enum LoseType { - NONE, ALL, ALL_BUT_COLOR, ABILITIES, ABILITIES_SUBTYPE_AND_PT - } - - protected Token token; - protected String type; - protected LoseType loseType; // what attributes are lost - - public BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(Token token, String text, Duration duration) { - this(token, text, duration, LoseType.NONE); - } - - public BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(Token token, String text, Duration duration, LoseType loseType) { - super(duration, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.BecomeCreature); - this.token = token; - this.loseType = loseType; - staticText = text; - } - - public BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(final BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect effect) { - super(effect); - this.token = effect.token.copy(); - this.type = effect.type; - this.loseType = effect.loseType; - } - - @Override - public BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect copy() { - return new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(this); - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - Permanent attachedPermanent = game.getPermanent(source.getSourceId()); - if (attachedPermanent != null) { - Permanent permanentAttachedTo = game.getPermanent(attachedPermanent.getAttachedTo()); - if (permanentAttachedTo != null) { - affectedObjectList.add(new MageObjectReference(permanentAttachedTo, game)); - } - } - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - boolean attachedExists = false; - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null) { - for (MageObjectReference mageObjectReference : affectedObjectList) { - Permanent permanentAttachedTo = mageObjectReference.getPermanent(game); - if (permanentAttachedTo != null) { - attachedExists = true; - switch (layer) { - case TypeChangingEffects_4: - if (sublayer == SubLayer.NA) { - for (SuperType superType : token.getSuperType()) { - permanentAttachedTo.addSuperType(superType); - - } - // card type - switch (loseType) { - case ALL: - case ALL_BUT_COLOR: - permanentAttachedTo.getCardType().clear(); - break; - } - for (CardType cardType : token.getCardType()) { - permanentAttachedTo.addCardType(cardType); - } - - // sub type - switch (loseType) { - case ALL: - case ALL_BUT_COLOR: - case ABILITIES_SUBTYPE_AND_PT: - permanentAttachedTo.getSubtype(game).retainAll(SubType.getLandTypes()); - break; - } - for (SubType subType : token.getSubtype(game)) { - if (!permanentAttachedTo.hasSubtype(subType, game)) { - permanentAttachedTo.getSubtype(game).add(subType); - } - } - - } - break; - - case ColorChangingEffects_5: - if (sublayer == SubLayer.NA) { - if (loseType == LoseType.ALL) { - permanentAttachedTo.getColor(game).setBlack(false); - permanentAttachedTo.getColor(game).setGreen(false); - permanentAttachedTo.getColor(game).setBlue(false); - permanentAttachedTo.getColor(game).setWhite(false); - permanentAttachedTo.getColor(game).setRed(false); - } - if (token.getColor(game).hasColor()) { - permanentAttachedTo.getColor(game).setColor(token.getColor(game)); - } - } - break; - - case AbilityAddingRemovingEffects_6: - if (sublayer == SubLayer.NA) { - switch (loseType) { - case ALL: - case ALL_BUT_COLOR: - case ABILITIES: - case ABILITIES_SUBTYPE_AND_PT: - permanentAttachedTo.removeAllAbilities(source.getSourceId(), game); - break; - } - for (Ability ability : token.getAbilities()) { - permanentAttachedTo.addAbility(ability, source.getSourceId(), game); - } - - } - break; - - case PTChangingEffects_7: - if (sublayer == SubLayer.SetPT_7b) { - permanentAttachedTo.getPower().setValue(token.getPower().getValue()); - permanentAttachedTo.getToughness().setValue(token.getToughness().getValue()); - } - break; - } - } - if (!attachedExists) { - discard(); - } - return true; - } - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.PTChangingEffects_7 - || layer == Layer.AbilityAddingRemovingEffects_6 - || layer == Layer.ColorChangingEffects_5 - || layer == Layer.TypeChangingEffects_4; - } - -} +package mage.abilities.effects.common.continuous; + +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.*; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.permanent.token.Token; + +/** + * @author jeffwadsworth + */ +public class BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect extends ContinuousEffectImpl { + + public enum LoseType { + NONE, ALL, ALL_BUT_COLOR, ABILITIES, ABILITIES_SUBTYPE_AND_PT + } + + protected Token token; + protected String type; + protected LoseType loseType; // what attributes are lost + + public BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(Token token, String text, Duration duration) { + this(token, text, duration, LoseType.NONE); + } + + public BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(Token token, String text, Duration duration, LoseType loseType) { + super(duration, Layer.TypeChangingEffects_4, SubLayer.NA, Outcome.BecomeCreature); + this.token = token; + this.loseType = loseType; + staticText = text; + } + + public BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(final BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect effect) { + super(effect); + this.token = effect.token.copy(); + this.type = effect.type; + this.loseType = effect.loseType; + } + + @Override + public BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect copy() { + return new BecomesCreatureAttachedWithActivatedAbilityOrSpellEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + Permanent attachedPermanent = game.getPermanent(source.getSourceId()); + if (attachedPermanent != null) { + Permanent permanentAttachedTo = game.getPermanent(attachedPermanent.getAttachedTo()); + if (permanentAttachedTo != null) { + affectedObjectList.add(new MageObjectReference(permanentAttachedTo, game)); + } + } + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + boolean attachedExists = false; + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null) { + for (MageObjectReference mageObjectReference : affectedObjectList) { + Permanent permanentAttachedTo = mageObjectReference.getPermanent(game); + if (permanentAttachedTo != null) { + attachedExists = true; + switch (layer) { + case TypeChangingEffects_4: + if (sublayer == SubLayer.NA) { + for (SuperType superType : token.getSuperType()) { + permanentAttachedTo.addSuperType(superType); + + } + // card type + switch (loseType) { + case ALL: + case ALL_BUT_COLOR: + permanentAttachedTo.getCardType().clear(); + break; + } + for (CardType cardType : token.getCardType()) { + permanentAttachedTo.addCardType(cardType); + } + + // sub type + switch (loseType) { + case ALL: + case ALL_BUT_COLOR: + case ABILITIES_SUBTYPE_AND_PT: + permanentAttachedTo.getSubtype(game).retainAll(SubType.getLandTypes()); + break; + } + for (SubType subType : token.getSubtype(game)) { + if (!permanentAttachedTo.hasSubtype(subType, game)) { + permanentAttachedTo.getSubtype(game).add(subType); + } + } + + } + break; + + case ColorChangingEffects_5: + if (sublayer == SubLayer.NA) { + if (loseType == LoseType.ALL) { + permanentAttachedTo.getColor(game).setBlack(false); + permanentAttachedTo.getColor(game).setGreen(false); + permanentAttachedTo.getColor(game).setBlue(false); + permanentAttachedTo.getColor(game).setWhite(false); + permanentAttachedTo.getColor(game).setRed(false); + } + if (token.getColor(game).hasColor()) { + permanentAttachedTo.getColor(game).setColor(token.getColor(game)); + } + } + break; + + case AbilityAddingRemovingEffects_6: + if (sublayer == SubLayer.NA) { + switch (loseType) { + case ALL: + case ALL_BUT_COLOR: + case ABILITIES: + case ABILITIES_SUBTYPE_AND_PT: + permanentAttachedTo.removeAllAbilities(source.getSourceId(), game); + break; + } + for (Ability ability : token.getAbilities()) { + permanentAttachedTo.addAbility(ability, source.getSourceId(), game); + } + + } + break; + + case PTChangingEffects_7: + if (sublayer == SubLayer.SetPT_7b) { + permanentAttachedTo.getPower().setValue(token.getPower().getValue()); + permanentAttachedTo.getToughness().setValue(token.getToughness().getValue()); + } + break; + } + } + if (!attachedExists) { + discard(); + } + return true; + } + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.PTChangingEffects_7 + || layer == Layer.AbilityAddingRemovingEffects_6 + || layer == Layer.ColorChangingEffects_5 + || layer == Layer.TypeChangingEffects_4; + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesEnchantmentSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesEnchantmentSourceEffect.java index e16f3d033af..064e11c4a04 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesEnchantmentSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesEnchantmentSourceEffect.java @@ -1,79 +1,79 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common.continuous; - -import mage.MageObjectReference; -import mage.abilities.Ability; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.constants.CardType; -import mage.constants.DependencyType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author jeffwadsworth - */ -public class BecomesEnchantmentSourceEffect extends ContinuousEffectImpl implements SourceEffect { - - public BecomesEnchantmentSourceEffect() { - super(Duration.Custom, Outcome.AddAbility); - staticText = "{this} becomes an Enchantment"; - dependencyTypes.add(DependencyType.EnchantmentAddingRemoving); - - } - - public BecomesEnchantmentSourceEffect(final BecomesEnchantmentSourceEffect effect) { - super(effect); - } - - @Override - public BecomesEnchantmentSourceEffect copy() { - return new BecomesEnchantmentSourceEffect(this); - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - affectedObjectList.add(new MageObjectReference(source.getSourceId(), game)); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Permanent permanent = affectedObjectList.get(0).getPermanent(game); - if (permanent != null) { - switch (layer) { - case TypeChangingEffects_4: - if (sublayer == SubLayer.NA) { - permanent.getCardType().clear(); - permanent.getSubtype(game).clear(); - if (!permanent.getCardType().contains(CardType.ENCHANTMENT)) { - permanent.getCardType().add(CardType.ENCHANTMENT); - } - } - break; - } - return true; - } - this.discard(); - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return Layer.TypeChangingEffects_4 == layer; - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common.continuous; + +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.CardType; +import mage.constants.DependencyType; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author jeffwadsworth + */ +public class BecomesEnchantmentSourceEffect extends ContinuousEffectImpl implements SourceEffect { + + public BecomesEnchantmentSourceEffect() { + super(Duration.Custom, Outcome.AddAbility); + staticText = "{this} becomes an Enchantment"; + dependencyTypes.add(DependencyType.EnchantmentAddingRemoving); + + } + + public BecomesEnchantmentSourceEffect(final BecomesEnchantmentSourceEffect effect) { + super(effect); + } + + @Override + public BecomesEnchantmentSourceEffect copy() { + return new BecomesEnchantmentSourceEffect(this); + } + + @Override + public void init(Ability source, Game game) { + super.init(source, game); + affectedObjectList.add(new MageObjectReference(source.getSourceId(), game)); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Permanent permanent = affectedObjectList.get(0).getPermanent(game); + if (permanent != null) { + switch (layer) { + case TypeChangingEffects_4: + if (sublayer == SubLayer.NA) { + permanent.getCardType().clear(); + permanent.getSubtype(game).clear(); + if (!permanent.getCardType().contains(CardType.ENCHANTMENT)) { + permanent.getCardType().add(CardType.ENCHANTMENT); + } + } + break; + } + return true; + } + this.discard(); + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return Layer.TypeChangingEffects_4 == layer; + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllOfChosenSubtypeEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllOfChosenSubtypeEffect.java index 17e459fdc7b..e9351a24e8a 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllOfChosenSubtypeEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllOfChosenSubtypeEffect.java @@ -1,51 +1,51 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common.continuous; - -import mage.abilities.Ability; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author LevelX2 - */ -public class GainAbilityAllOfChosenSubtypeEffect extends GainAbilityAllEffect { - - SubType subtype = null; - - public GainAbilityAllOfChosenSubtypeEffect(Ability ability, Duration duration, FilterPermanent filter) { - super(ability, duration, filter); - } - - public GainAbilityAllOfChosenSubtypeEffect(final GainAbilityAllOfChosenSubtypeEffect effect) { - super(effect); - this.subtype = effect.subtype; - } - - @Override - public GainAbilityAllOfChosenSubtypeEffect copy() { - return new GainAbilityAllOfChosenSubtypeEffect(this); - } - - @Override - protected boolean selectedByRuntimeData(Permanent permanent, Ability source, Game game) { - if (subtype != null) { - return permanent.hasSubtype(subtype, game); - } - return false; - } - - @Override - protected void setRuntimeData(Ability source, Game game) { - subtype = (SubType) game.getState().getValue(source.getSourceId() + "_type"); - - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common.continuous; + +import mage.abilities.Ability; +import mage.constants.Duration; +import mage.constants.SubType; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author LevelX2 + */ +public class GainAbilityAllOfChosenSubtypeEffect extends GainAbilityAllEffect { + + SubType subtype = null; + + public GainAbilityAllOfChosenSubtypeEffect(Ability ability, Duration duration, FilterPermanent filter) { + super(ability, duration, filter); + } + + public GainAbilityAllOfChosenSubtypeEffect(final GainAbilityAllOfChosenSubtypeEffect effect) { + super(effect); + this.subtype = effect.subtype; + } + + @Override + public GainAbilityAllOfChosenSubtypeEffect copy() { + return new GainAbilityAllOfChosenSubtypeEffect(this); + } + + @Override + protected boolean selectedByRuntimeData(Permanent permanent, Ability source, Game game) { + if (subtype != null) { + return permanent.hasSubtype(subtype, game); + } + return false; + } + + @Override + protected void setRuntimeData(Ability source, Game game) { + subtype = (SubType) game.getState().getValue(source.getSourceId() + "_type"); + + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledSpellsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledSpellsEffect.java index 62daa0db0eb..a772956485d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledSpellsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledSpellsEffect.java @@ -1,83 +1,83 @@ -package mage.abilities.effects.common.continuous; - -import mage.abilities.Ability; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.cards.Card; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.game.stack.Spell; -import mage.game.stack.StackObject; -import mage.players.Player; - -/** - * @author Styxo - */ -public class GainAbilityControlledSpellsEffect extends ContinuousEffectImpl { - - private final Ability ability; - private final FilterCard filter; - - public GainAbilityControlledSpellsEffect(Ability ability, FilterCard filter) { - super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); - this.ability = ability; - this.filter = filter; - staticText = filter.getMessage() + " you cast have " + ability.getRule() + '.'; - } - - public GainAbilityControlledSpellsEffect(final GainAbilityControlledSpellsEffect effect) { - super(effect); - this.ability = effect.ability; - this.filter = effect.filter; - } - - @Override - public GainAbilityControlledSpellsEffect copy() { - return new GainAbilityControlledSpellsEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - Permanent permanent = game.getPermanent(source.getSourceId()); - if (player != null && permanent != null) { - for (Card card : game.getExile().getAllCards(game)) { - if (card.isOwnedBy(source.getControllerId()) && filter.match(card, game)) { - game.getState().addOtherAbility(card, ability); - } - } - for (Card card : player.getLibrary().getCards(game)) { - if (filter.match(card, game)) { - game.getState().addOtherAbility(card, ability); - } - } - for (Card card : player.getHand().getCards(game)) { - if (filter.match(card, game)) { - game.getState().addOtherAbility(card, ability); - } - } - for (Card card : player.getGraveyard().getCards(game)) { - if (filter.match(card, game)) { - game.getState().addOtherAbility(card, ability); - } - } - for (StackObject stackObject : game.getStack()) { - // only spells cast, so no copies of spells - if ((stackObject instanceof Spell) && !stackObject.isCopy() && stackObject.isControlledBy(source.getControllerId())) { - Card card = game.getCard(stackObject.getSourceId()); - if (card != null && filter.match(card, game)) { - if (!card.hasAbility(ability, game)) { - game.getState().addOtherAbility(card, ability); - } - } - } - } - return true; - } - return false; - } -} +package mage.abilities.effects.common.continuous; + +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.cards.Card; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.game.stack.Spell; +import mage.game.stack.StackObject; +import mage.players.Player; + +/** + * @author Styxo + */ +public class GainAbilityControlledSpellsEffect extends ContinuousEffectImpl { + + private final Ability ability; + private final FilterCard filter; + + public GainAbilityControlledSpellsEffect(Ability ability, FilterCard filter) { + super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); + this.ability = ability; + this.filter = filter; + staticText = filter.getMessage() + " you cast have " + ability.getRule() + '.'; + } + + public GainAbilityControlledSpellsEffect(final GainAbilityControlledSpellsEffect effect) { + super(effect); + this.ability = effect.ability; + this.filter = effect.filter; + } + + @Override + public GainAbilityControlledSpellsEffect copy() { + return new GainAbilityControlledSpellsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (player != null && permanent != null) { + for (Card card : game.getExile().getAllCards(game)) { + if (card.isOwnedBy(source.getControllerId()) && filter.match(card, game)) { + game.getState().addOtherAbility(card, ability); + } + } + for (Card card : player.getLibrary().getCards(game)) { + if (filter.match(card, game)) { + game.getState().addOtherAbility(card, ability); + } + } + for (Card card : player.getHand().getCards(game)) { + if (filter.match(card, game)) { + game.getState().addOtherAbility(card, ability); + } + } + for (Card card : player.getGraveyard().getCards(game)) { + if (filter.match(card, game)) { + game.getState().addOtherAbility(card, ability); + } + } + for (StackObject stackObject : game.getStack()) { + // only spells cast, so no copies of spells + if ((stackObject instanceof Spell) && !stackObject.isCopy() && stackObject.isControlledBy(source.getControllerId())) { + Card card = game.getCard(stackObject.getSourceId()); + if (card != null && filter.match(card, game)) { + if (!card.hasAbility(ability, game)) { + game.getState().addOtherAbility(card, ability); + } + } + } + } + return true; + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/SetPowerToughnessEnchantedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/SetPowerToughnessEnchantedEffect.java index a5f1cf72e30..cabb1b5de33 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/SetPowerToughnessEnchantedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/SetPowerToughnessEnchantedEffect.java @@ -1,57 +1,57 @@ -package mage.abilities.effects.common.continuous; - -import mage.abilities.Ability; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author LevelX2 - */ -public class SetPowerToughnessEnchantedEffect extends ContinuousEffectImpl { - - private final int power; - private final int toughness; - - public SetPowerToughnessEnchantedEffect() { - this(0, 2); - } - - public SetPowerToughnessEnchantedEffect(int power, int toughness) { - super(Duration.WhileOnBattlefield, Layer.PTChangingEffects_7, SubLayer.SetPT_7b, Outcome.BoostCreature); - staticText = "Enchanted creature has base power and toughness " + power + "/" + toughness; - this.power = power; - this.toughness = toughness; - } - - public SetPowerToughnessEnchantedEffect(final SetPowerToughnessEnchantedEffect effect) { - super(effect); - this.power = effect.power; - this.toughness = effect.toughness; - } - - @Override - public SetPowerToughnessEnchantedEffect copy() { - return new SetPowerToughnessEnchantedEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null && enchantment.getAttachedTo() != null) { - Permanent enchanted = game.getPermanent(enchantment.getAttachedTo()); - if (enchanted != null) { - enchanted.getPower().setValue(power); - enchanted.getToughness().setValue(toughness); - } - return true; - } - return false; - } - -} +package mage.abilities.effects.common.continuous; + +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author LevelX2 + */ +public class SetPowerToughnessEnchantedEffect extends ContinuousEffectImpl { + + private final int power; + private final int toughness; + + public SetPowerToughnessEnchantedEffect() { + this(0, 2); + } + + public SetPowerToughnessEnchantedEffect(int power, int toughness) { + super(Duration.WhileOnBattlefield, Layer.PTChangingEffects_7, SubLayer.SetPT_7b, Outcome.BoostCreature); + staticText = "Enchanted creature has base power and toughness " + power + "/" + toughness; + this.power = power; + this.toughness = toughness; + } + + public SetPowerToughnessEnchantedEffect(final SetPowerToughnessEnchantedEffect effect) { + super(effect); + this.power = effect.power; + this.toughness = effect.toughness; + } + + @Override + public SetPowerToughnessEnchantedEffect copy() { + return new SetPowerToughnessEnchantedEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null && enchantment.getAttachedTo() != null) { + Permanent enchanted = game.getPermanent(enchantment.getAttachedTo()); + if (enchanted != null) { + enchanted.getPower().setValue(power); + enchanted.getToughness().setValue(toughness); + } + return true; + } + return false; + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/AbilitiesCostReductionControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/AbilitiesCostReductionControllerEffect.java index b0b53d2d82c..aad1ebcc761 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/AbilitiesCostReductionControllerEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/AbilitiesCostReductionControllerEffect.java @@ -1,50 +1,50 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common.cost; - -import mage.abilities.Ability; -import mage.constants.CostModificationType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.game.Game; -import mage.util.CardUtil; - -/** - * - * @author Styxo - */ -public class AbilitiesCostReductionControllerEffect extends CostModificationEffectImpl { - - private Class activatedAbility; - - public AbilitiesCostReductionControllerEffect(Class activatedAbility, String activatedAbilityName) { - super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); - this.activatedAbility = activatedAbility; - staticText = activatedAbilityName + " costs you pay cost {1} less"; - } - - public AbilitiesCostReductionControllerEffect(AbilitiesCostReductionControllerEffect effect) { - super(effect); - this.activatedAbility = effect.activatedAbility; - } - - @Override - public AbilitiesCostReductionControllerEffect copy() { - return new AbilitiesCostReductionControllerEffect(this); - } - - @Override - public boolean apply(Game game, Ability source, Ability abilityToModify) { - CardUtil.reduceCost(abilityToModify, 1); - return true; - } - - @Override - public boolean applies(Ability abilityToModify, Ability source, Game game) { - return abilityToModify.isControlledBy(source.getControllerId()) - && activatedAbility.isInstance(abilityToModify); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common.cost; + +import mage.abilities.Ability; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.util.CardUtil; + +/** + * + * @author Styxo + */ +public class AbilitiesCostReductionControllerEffect extends CostModificationEffectImpl { + + private Class activatedAbility; + + public AbilitiesCostReductionControllerEffect(Class activatedAbility, String activatedAbilityName) { + super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST); + this.activatedAbility = activatedAbility; + staticText = activatedAbilityName + " costs you pay cost {1} less"; + } + + public AbilitiesCostReductionControllerEffect(AbilitiesCostReductionControllerEffect effect) { + super(effect); + this.activatedAbility = effect.activatedAbility; + } + + @Override + public AbilitiesCostReductionControllerEffect copy() { + return new AbilitiesCostReductionControllerEffect(this); + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + CardUtil.reduceCost(abilityToModify, 1); + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + return abilityToModify.isControlledBy(source.getControllerId()) + && activatedAbility.isInstance(abilityToModify); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/counter/MoveCountersTargetsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/counter/MoveCountersTargetsEffect.java index bd6ff6892c2..1c6f4102668 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/counter/MoveCountersTargetsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/counter/MoveCountersTargetsEffect.java @@ -1,78 +1,78 @@ - -package mage.abilities.effects.common.counter; - -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author Styxo - */ -public class MoveCountersTargetsEffect extends OneShotEffect { - - private final CounterType counterType; - private final int amount; - - public MoveCountersTargetsEffect(CounterType counterType, int amount) { - super(Outcome.Detriment); - this.counterType = counterType; - this.amount = amount; - - } - - public MoveCountersTargetsEffect(final MoveCountersTargetsEffect effect) { - super(effect); - this.counterType = effect.counterType; - this.amount = effect.amount; - } - - @Override - public MoveCountersTargetsEffect copy() { - return new MoveCountersTargetsEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent removeTargetCreature = game.getPermanent(targetPointer.getTargets(game, source).get(0)); - Permanent addTargetCreature = game.getPermanent(targetPointer.getTargets(game, source).get(1)); - if (removeTargetCreature != null && addTargetCreature != null && removeTargetCreature.getCounters(game).getCount(counterType) >= amount) { - removeTargetCreature.removeCounters(counterType.createInstance(amount), game); - addTargetCreature.addCounters(counterType.createInstance(amount), source, game); - if (!game.isSimulation()) { - game.informPlayers("Moved " + amount + ' ' + counterType.getName() + " counter" + (amount > 1 ? "s" : "") + " from " + removeTargetCreature.getLogName() + " to " + addTargetCreature.getLogName()); - } - return true; - } - return false; - } - - @Override - public String getText(Mode mode) { - if (!staticText.isEmpty()) { - return staticText; - } - - StringBuilder sb = new StringBuilder("move "); - if (amount > 1) { - sb.append(amount); - } else { - sb.append('a'); - } - sb.append(' '); - sb.append(counterType.getName()); - sb.append(" counter"); - if (amount > 1) { - sb.append("s "); - } else { - sb.append(' '); - } - sb.append("from one target creature to another target creature"); - - return sb.toString(); - } -} + +package mage.abilities.effects.common.counter; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author Styxo + */ +public class MoveCountersTargetsEffect extends OneShotEffect { + + private final CounterType counterType; + private final int amount; + + public MoveCountersTargetsEffect(CounterType counterType, int amount) { + super(Outcome.Detriment); + this.counterType = counterType; + this.amount = amount; + + } + + public MoveCountersTargetsEffect(final MoveCountersTargetsEffect effect) { + super(effect); + this.counterType = effect.counterType; + this.amount = effect.amount; + } + + @Override + public MoveCountersTargetsEffect copy() { + return new MoveCountersTargetsEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent removeTargetCreature = game.getPermanent(targetPointer.getTargets(game, source).get(0)); + Permanent addTargetCreature = game.getPermanent(targetPointer.getTargets(game, source).get(1)); + if (removeTargetCreature != null && addTargetCreature != null && removeTargetCreature.getCounters(game).getCount(counterType) >= amount) { + removeTargetCreature.removeCounters(counterType.createInstance(amount), game); + addTargetCreature.addCounters(counterType.createInstance(amount), source, game); + if (!game.isSimulation()) { + game.informPlayers("Moved " + amount + ' ' + counterType.getName() + " counter" + (amount > 1 ? "s" : "") + " from " + removeTargetCreature.getLogName() + " to " + addTargetCreature.getLogName()); + } + return true; + } + return false; + } + + @Override + public String getText(Mode mode) { + if (!staticText.isEmpty()) { + return staticText; + } + + StringBuilder sb = new StringBuilder("move "); + if (amount > 1) { + sb.append(amount); + } else { + sb.append('a'); + } + sb.append(' '); + sb.append(counterType.getName()); + sb.append(" counter"); + if (amount > 1) { + sb.append("s "); + } else { + sb.append(' '); + } + sb.append("from one target creature to another target creature"); + + return sb.toString(); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/enterAttribute/EnterAttributeAddChosenSubtypeEffect.java b/Mage/src/main/java/mage/abilities/effects/common/enterAttribute/EnterAttributeAddChosenSubtypeEffect.java index b70c8bb1815..1f6ca305ad8 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/enterAttribute/EnterAttributeAddChosenSubtypeEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/enterAttribute/EnterAttributeAddChosenSubtypeEffect.java @@ -1,46 +1,46 @@ - -package mage.abilities.effects.common.enterAttribute; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * IMPORTANT: This only adds the chosen subtype while the source permanent is entering the battlefield. - * You should also use @link{mage.abilities.effects.common.continuous.AddChosenSubtypeEffect} to make the subtype persist. - * @author LevelX2 - */ -public class EnterAttributeAddChosenSubtypeEffect extends OneShotEffect { - - public EnterAttributeAddChosenSubtypeEffect() { - super(Outcome.Benefit); - this.staticText = "{this} is the chosen type in addition to its other types"; - } - - public EnterAttributeAddChosenSubtypeEffect(final EnterAttributeAddChosenSubtypeEffect effect) { - super(effect); - } - - @Override - public EnterAttributeAddChosenSubtypeEffect copy() { - return new EnterAttributeAddChosenSubtypeEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent permanent = game.getPermanentEntering(source.getSourceId()); - SubType subtype = (SubType) game.getState().getValue(source.getSourceId() + "_type"); - if (permanent != null && subtype != null) { - if (!permanent.getSubtype(game).contains(subtype)) { - permanent.getSubtype(game).add(subtype); - } - return true; - } - return false; - } -} + +package mage.abilities.effects.common.enterAttribute; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * IMPORTANT: This only adds the chosen subtype while the source permanent is entering the battlefield. + * You should also use @link{mage.abilities.effects.common.continuous.AddChosenSubtypeEffect} to make the subtype persist. + * @author LevelX2 + */ +public class EnterAttributeAddChosenSubtypeEffect extends OneShotEffect { + + public EnterAttributeAddChosenSubtypeEffect() { + super(Outcome.Benefit); + this.staticText = "{this} is the chosen type in addition to its other types"; + } + + public EnterAttributeAddChosenSubtypeEffect(final EnterAttributeAddChosenSubtypeEffect effect) { + super(effect); + } + + @Override + public EnterAttributeAddChosenSubtypeEffect copy() { + return new EnterAttributeAddChosenSubtypeEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanentEntering(source.getSourceId()); + SubType subtype = (SubType) game.getState().getValue(source.getSourceId() + "_type"); + if (permanent != null && subtype != null) { + if (!permanent.getSubtype(game).contains(subtype)) { + permanent.getSubtype(game).add(subtype); + } + return true; + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/replacement/CreateTwiceThatManyTokensEffect.java b/Mage/src/main/java/mage/abilities/effects/common/replacement/CreateTwiceThatManyTokensEffect.java index ed699d4ecd0..799881bca84 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/replacement/CreateTwiceThatManyTokensEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/replacement/CreateTwiceThatManyTokensEffect.java @@ -1,47 +1,47 @@ - -package mage.abilities.effects.common.replacement; - -import mage.abilities.Ability; -import mage.abilities.effects.ReplacementEffectImpl; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.game.Game; -import mage.game.events.GameEvent; - -/** - * - * @author LevelX2 - */ -public class CreateTwiceThatManyTokensEffect extends ReplacementEffectImpl { - - public CreateTwiceThatManyTokensEffect() { - super(Duration.WhileOnBattlefield, Outcome.Copy); - staticText = "If an effect would create one or more tokens under your control, it creates twice that many of those tokens instead"; - } - - public CreateTwiceThatManyTokensEffect(final CreateTwiceThatManyTokensEffect effect) { - super(effect); - } - - @Override - public CreateTwiceThatManyTokensEffect copy() { - return new CreateTwiceThatManyTokensEffect(this); - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.CREATE_TOKEN; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - return event.getPlayerId().equals(source.getControllerId()); - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - event.setAmount(event.getAmount() * 2); - return false; - } - -} + +package mage.abilities.effects.common.replacement; + +import mage.abilities.Ability; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * + * @author LevelX2 + */ +public class CreateTwiceThatManyTokensEffect extends ReplacementEffectImpl { + + public CreateTwiceThatManyTokensEffect() { + super(Duration.WhileOnBattlefield, Outcome.Copy); + staticText = "If an effect would create one or more tokens under your control, it creates twice that many of those tokens instead"; + } + + public CreateTwiceThatManyTokensEffect(final CreateTwiceThatManyTokensEffect effect) { + super(effect); + } + + @Override + public CreateTwiceThatManyTokensEffect copy() { + return new CreateTwiceThatManyTokensEffect(this); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CREATE_TOKEN; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + return event.getPlayerId().equals(source.getControllerId()); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + event.setAmount(event.getAmount() * 2); + return false; + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/replacement/DiesReplacementEffect.java b/Mage/src/main/java/mage/abilities/effects/common/replacement/DiesReplacementEffect.java index 48c2d0a67fc..3f5051ae44e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/replacement/DiesReplacementEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/replacement/DiesReplacementEffect.java @@ -1,72 +1,72 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common.replacement; - -import mage.MageObjectReference; -import mage.abilities.Ability; -import mage.abilities.effects.ReplacementEffectImpl; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.events.ZoneChangeEvent; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * - * @author LevelX2 - */ -public class DiesReplacementEffect extends ReplacementEffectImpl { - - private final MageObjectReference objectRef; - - public DiesReplacementEffect(MageObjectReference objectRef, Duration duration) { - super(duration, Outcome.Exile); - this.objectRef = objectRef; - staticText = "If that creature would die " + (duration == Duration.EndOfTurn ? "this turn" : "") + ", exile it instead"; - } - - public DiesReplacementEffect(final DiesReplacementEffect effect) { - super(effect); - this.objectRef = effect.objectRef; - } - - @Override - public DiesReplacementEffect copy() { - return new DiesReplacementEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - Permanent permanent = ((ZoneChangeEvent) event).getTarget(); - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null && permanent != null) { - return controller.moveCards(permanent, Zone.EXILED, source, game); - } - return false; - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == EventType.ZONE_CHANGE; - } - - @Override - public boolean applies(GameEvent event, Ability source, Game game) { - ZoneChangeEvent zce = (ZoneChangeEvent) event; - return zce.isDiesEvent() - && objectRef.equals(new MageObjectReference(zce.getTarget(), game)); - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.common.replacement; + +import mage.MageObjectReference; +import mage.abilities.Ability; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class DiesReplacementEffect extends ReplacementEffectImpl { + + private final MageObjectReference objectRef; + + public DiesReplacementEffect(MageObjectReference objectRef, Duration duration) { + super(duration, Outcome.Exile); + this.objectRef = objectRef; + staticText = "If that creature would die " + (duration == Duration.EndOfTurn ? "this turn" : "") + ", exile it instead"; + } + + public DiesReplacementEffect(final DiesReplacementEffect effect) { + super(effect); + this.objectRef = effect.objectRef; + } + + @Override + public DiesReplacementEffect copy() { + return new DiesReplacementEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + Permanent permanent = ((ZoneChangeEvent) event).getTarget(); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && permanent != null) { + return controller.moveCards(permanent, Zone.EXILED, source, game); + } + return false; + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.ZONE_CHANGE; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + ZoneChangeEvent zce = (ZoneChangeEvent) event; + return zce.isDiesEvent() + && objectRef.equals(new MageObjectReference(zce.getTarget(), game)); + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutOntoBattlefieldEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutOntoBattlefieldEffect.java index 90fefbc79f1..1afa6c7f272 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutOntoBattlefieldEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutOntoBattlefieldEffect.java @@ -1,92 +1,92 @@ -package mage.abilities.effects.common.search; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; -import mage.target.common.TargetCardInLibrary; -import mage.target.common.TargetCardInYourGraveyard; - -/** - * @author Styxo - */ -public class SearchLibraryGraveyardPutOntoBattlefieldEffect extends OneShotEffect { - - private FilterCard filter; - private boolean forceToSearchBoth; - - public SearchLibraryGraveyardPutOntoBattlefieldEffect(FilterCard filter) { - this(filter, false); - } - - public SearchLibraryGraveyardPutOntoBattlefieldEffect(FilterCard filter, boolean forceToSearchBoth) { - this(filter, forceToSearchBoth, false); - } - - public SearchLibraryGraveyardPutOntoBattlefieldEffect(FilterCard filter, boolean forceToSearchBoth, boolean youMay) { - super(Outcome.Benefit); - this.filter = filter; - this.forceToSearchBoth = forceToSearchBoth; - staticText = (youMay ? "You may " : "") + "search your library and" + (forceToSearchBoth ? "" : "/or") + " graveyard for a " + filter.getMessage() - + " and put it onto the battlefield. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it"); - } - - public SearchLibraryGraveyardPutOntoBattlefieldEffect(final SearchLibraryGraveyardPutOntoBattlefieldEffect effect) { - super(effect); - this.filter = effect.filter; - this.forceToSearchBoth = effect.forceToSearchBoth; - } - - @Override - public SearchLibraryGraveyardPutOntoBattlefieldEffect copy() { - return new SearchLibraryGraveyardPutOntoBattlefieldEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = source.getSourceObject(game); - Card cardFound = null; - boolean needShuffle = false; - if (controller != null && sourceObject != null) { - if (forceToSearchBoth || controller.chooseUse(outcome, "Search your library for a " + filter.getMessage() + '?', source, game)) { - TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter); - target.clearChosen(); - if (controller.searchLibrary(target, source, game)) { - if (!target.getTargets().isEmpty()) { - cardFound = game.getCard(target.getFirstTarget()); - } - } - needShuffle = true; - } - - if (cardFound == null && controller.chooseUse(outcome, "Search your graveyard for a " + filter.getMessage() + '?', source, game)) { - TargetCard target = new TargetCardInYourGraveyard(0, 1, filter, true); - target.clearChosen(); - if (controller.choose(outcome, controller.getGraveyard(), target, game)) { - if (!target.getTargets().isEmpty()) { - cardFound = game.getCard(target.getFirstTarget()); - } - } - } - - if (cardFound != null) { - controller.moveCards(cardFound, Zone.BATTLEFIELD, source, game); - } - - if (needShuffle) { - controller.shuffleLibrary(source, game); - } - - return true; - } - - return false; - } -} +package mage.abilities.effects.common.search; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * @author Styxo + */ +public class SearchLibraryGraveyardPutOntoBattlefieldEffect extends OneShotEffect { + + private FilterCard filter; + private boolean forceToSearchBoth; + + public SearchLibraryGraveyardPutOntoBattlefieldEffect(FilterCard filter) { + this(filter, false); + } + + public SearchLibraryGraveyardPutOntoBattlefieldEffect(FilterCard filter, boolean forceToSearchBoth) { + this(filter, forceToSearchBoth, false); + } + + public SearchLibraryGraveyardPutOntoBattlefieldEffect(FilterCard filter, boolean forceToSearchBoth, boolean youMay) { + super(Outcome.Benefit); + this.filter = filter; + this.forceToSearchBoth = forceToSearchBoth; + staticText = (youMay ? "You may " : "") + "search your library and" + (forceToSearchBoth ? "" : "/or") + " graveyard for a " + filter.getMessage() + + " and put it onto the battlefield. " + (forceToSearchBoth ? "Then shuffle your library" : "If you search your library this way, shuffle it"); + } + + public SearchLibraryGraveyardPutOntoBattlefieldEffect(final SearchLibraryGraveyardPutOntoBattlefieldEffect effect) { + super(effect); + this.filter = effect.filter; + this.forceToSearchBoth = effect.forceToSearchBoth; + } + + @Override + public SearchLibraryGraveyardPutOntoBattlefieldEffect copy() { + return new SearchLibraryGraveyardPutOntoBattlefieldEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + Card cardFound = null; + boolean needShuffle = false; + if (controller != null && sourceObject != null) { + if (forceToSearchBoth || controller.chooseUse(outcome, "Search your library for a " + filter.getMessage() + '?', source, game)) { + TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter); + target.clearChosen(); + if (controller.searchLibrary(target, source, game)) { + if (!target.getTargets().isEmpty()) { + cardFound = game.getCard(target.getFirstTarget()); + } + } + needShuffle = true; + } + + if (cardFound == null && controller.chooseUse(outcome, "Search your graveyard for a " + filter.getMessage() + '?', source, game)) { + TargetCard target = new TargetCardInYourGraveyard(0, 1, filter, true); + target.clearChosen(); + if (controller.choose(outcome, controller.getGraveyard(), target, game)) { + if (!target.getTargets().isEmpty()) { + cardFound = game.getCard(target.getFirstTarget()); + } + } + } + + if (cardFound != null) { + controller.moveCards(cardFound, Zone.BATTLEFIELD, source, game); + } + + if (needShuffle) { + controller.shuffleLibrary(source, game); + } + + return true; + } + + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardWithLessCMCPutIntoPlay.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardWithLessCMCPutIntoPlay.java index 09754429ba9..9a37206fe45 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardWithLessCMCPutIntoPlay.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardWithLessCMCPutIntoPlay.java @@ -1,87 +1,87 @@ -package mage.abilities.effects.common.search; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.constants.ComparisonType; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.cards.CardsImpl; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.TargetCard; -import mage.target.common.TargetCardInLibrary; - -/** - * - * @author antoni-g - */ -public class SearchLibraryGraveyardWithLessCMCPutIntoPlay extends OneShotEffect { - - private final FilterCard filter; - - public SearchLibraryGraveyardWithLessCMCPutIntoPlay() { - this(new FilterCard()); - } - - public SearchLibraryGraveyardWithLessCMCPutIntoPlay(FilterCard filter) { - super(Outcome.PutCreatureInPlay); - this.filter = filter; - staticText = "Search your library or graveyard for a " + filter.getMessage() + " with converted mana cost X or less, put it onto the battlefield, then shuffle your library"; - } - - public SearchLibraryGraveyardWithLessCMCPutIntoPlay(final SearchLibraryGraveyardWithLessCMCPutIntoPlay effect) { - super(effect); - this.filter = effect.filter; - } - - @Override - public SearchLibraryGraveyardWithLessCMCPutIntoPlay copy() { - return new SearchLibraryGraveyardWithLessCMCPutIntoPlay(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = source.getSourceObject(game); - Card cardFound = null; - if (controller != null && sourceObject != null) { - // create x cost filter - FilterCard advancedFilter = filter.copy(); // never change static objects so copy the object here before - advancedFilter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, source.getManaCostsToPay().getX() + 1)); - - if (controller.chooseUse(outcome, "Search your library for a " + filter.getMessage() + " with CMC X or less" + '?', source, game)) { - TargetCardInLibrary target = new TargetCardInLibrary(advancedFilter); - target.clearChosen(); - if (controller.searchLibrary(target, source, game)) { - if (!target.getTargets().isEmpty()) { - cardFound = game.getCard(target.getFirstTarget()); - } - } - controller.shuffleLibrary(source, game); - } - - if (cardFound == null && controller.chooseUse(outcome, "Search your graveyard for a " + filter.getMessage() + " with CMC X or less" + '?', source, game)) { - TargetCard target = new TargetCard(0, 1, Zone.GRAVEYARD, advancedFilter); - target.clearChosen(); - if (controller.choose(outcome, controller.getGraveyard(), target, game)) { - if (!target.getTargets().isEmpty()) { - cardFound = game.getCard(target.getFirstTarget()); - } - } - } - - if (cardFound != null) { - controller.revealCards(sourceObject.getIdName(), new CardsImpl(cardFound), game); - controller.moveCards(cardFound, Zone.BATTLEFIELD, source, game); - } - - return true; - } - return false; - } - -} +package mage.abilities.effects.common.search; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.constants.ComparisonType; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardsImpl; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author antoni-g + */ +public class SearchLibraryGraveyardWithLessCMCPutIntoPlay extends OneShotEffect { + + private final FilterCard filter; + + public SearchLibraryGraveyardWithLessCMCPutIntoPlay() { + this(new FilterCard()); + } + + public SearchLibraryGraveyardWithLessCMCPutIntoPlay(FilterCard filter) { + super(Outcome.PutCreatureInPlay); + this.filter = filter; + staticText = "Search your library or graveyard for a " + filter.getMessage() + " with converted mana cost X or less, put it onto the battlefield, then shuffle your library"; + } + + public SearchLibraryGraveyardWithLessCMCPutIntoPlay(final SearchLibraryGraveyardWithLessCMCPutIntoPlay effect) { + super(effect); + this.filter = effect.filter; + } + + @Override + public SearchLibraryGraveyardWithLessCMCPutIntoPlay copy() { + return new SearchLibraryGraveyardWithLessCMCPutIntoPlay(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + Card cardFound = null; + if (controller != null && sourceObject != null) { + // create x cost filter + FilterCard advancedFilter = filter.copy(); // never change static objects so copy the object here before + advancedFilter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, source.getManaCostsToPay().getX() + 1)); + + if (controller.chooseUse(outcome, "Search your library for a " + filter.getMessage() + " with CMC X or less" + '?', source, game)) { + TargetCardInLibrary target = new TargetCardInLibrary(advancedFilter); + target.clearChosen(); + if (controller.searchLibrary(target, source, game)) { + if (!target.getTargets().isEmpty()) { + cardFound = game.getCard(target.getFirstTarget()); + } + } + controller.shuffleLibrary(source, game); + } + + if (cardFound == null && controller.chooseUse(outcome, "Search your graveyard for a " + filter.getMessage() + " with CMC X or less" + '?', source, game)) { + TargetCard target = new TargetCard(0, 1, Zone.GRAVEYARD, advancedFilter); + target.clearChosen(); + if (controller.choose(outcome, controller.getGraveyard(), target, game)) { + if (!target.getTargets().isEmpty()) { + cardFound = game.getCard(target.getFirstTarget()); + } + } + } + + if (cardFound != null) { + controller.revealCards(sourceObject.getIdName(), new CardsImpl(cardFound), game); + controller.moveCards(cardFound, Zone.BATTLEFIELD, source, game); + } + + return true; + } + return false; + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryWithLessCMCPutInPlayEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryWithLessCMCPutInPlayEffect.java index c116004e5e4..8f4bb5f1055 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryWithLessCMCPutInPlayEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryWithLessCMCPutInPlayEffect.java @@ -1,65 +1,65 @@ - -package mage.abilities.effects.common.search; - -import mage.abilities.Ability; -import mage.constants.ComparisonType; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetCardInLibrary; - -/** - * - * @author Styxo - */ -public class SearchLibraryWithLessCMCPutInPlayEffect extends OneShotEffect { - - private final FilterCard filter; - - public SearchLibraryWithLessCMCPutInPlayEffect() { - this(new FilterCard()); - } - - public SearchLibraryWithLessCMCPutInPlayEffect(FilterCard filter) { - super(Outcome.PutCreatureInPlay); - this.filter = filter; - staticText = "Search your library for a " + filter.getMessage() + " with converted mana cost X or less, put it onto the battlefield, then shuffle your library"; - } - - public SearchLibraryWithLessCMCPutInPlayEffect(final SearchLibraryWithLessCMCPutInPlayEffect effect) { - super(effect); - this.filter = effect.filter; - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - FilterCard advancedFilter = filter.copy(); // never change static objects so copy the object here before - advancedFilter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, source.getManaCostsToPay().getX() + 1)); - TargetCardInLibrary target = new TargetCardInLibrary(advancedFilter); - if (controller.searchLibrary(target, source, game)) { - if (!target.getTargets().isEmpty()) { - Card card = controller.getLibrary().getCard(target.getFirstTarget(), game); - if (card != null) { - controller.moveCards(card, Zone.BATTLEFIELD, source, game); - } - } - controller.shuffleLibrary(source, game); - } - return true; - } - return false; - } - - @Override - public SearchLibraryWithLessCMCPutInPlayEffect copy() { - return new SearchLibraryWithLessCMCPutInPlayEffect(this); - } - -} + +package mage.abilities.effects.common.search; + +import mage.abilities.Ability; +import mage.constants.ComparisonType; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author Styxo + */ +public class SearchLibraryWithLessCMCPutInPlayEffect extends OneShotEffect { + + private final FilterCard filter; + + public SearchLibraryWithLessCMCPutInPlayEffect() { + this(new FilterCard()); + } + + public SearchLibraryWithLessCMCPutInPlayEffect(FilterCard filter) { + super(Outcome.PutCreatureInPlay); + this.filter = filter; + staticText = "Search your library for a " + filter.getMessage() + " with converted mana cost X or less, put it onto the battlefield, then shuffle your library"; + } + + public SearchLibraryWithLessCMCPutInPlayEffect(final SearchLibraryWithLessCMCPutInPlayEffect effect) { + super(effect); + this.filter = effect.filter; + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + FilterCard advancedFilter = filter.copy(); // never change static objects so copy the object here before + advancedFilter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, source.getManaCostsToPay().getX() + 1)); + TargetCardInLibrary target = new TargetCardInLibrary(advancedFilter); + if (controller.searchLibrary(target, source, game)) { + if (!target.getTargets().isEmpty()) { + Card card = controller.getLibrary().getCard(target.getFirstTarget(), game); + if (card != null) { + controller.moveCards(card, Zone.BATTLEFIELD, source, game); + } + } + controller.shuffleLibrary(source, game); + } + return true; + } + return false; + } + + @Override + public SearchLibraryWithLessCMCPutInPlayEffect copy() { + return new SearchLibraryWithLessCMCPutInPlayEffect(this); + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/ExploreTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/ExploreTargetEffect.java index 1a6ff1285e9..2484a0e84db 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/ExploreTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/ExploreTargetEffect.java @@ -1,38 +1,38 @@ - -package mage.abilities.effects.keyword; - -import mage.abilities.Ability; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.game.Game; - -/** - * - * @author LevelX2 - */ -public class ExploreTargetEffect extends OneShotEffect { - - public ExploreTargetEffect() { - this(true); - } - - public ExploreTargetEffect(boolean showAbilityHint) { - super(Outcome.Benefit); - this.staticText = ExploreSourceEffect.getRuleText(showAbilityHint); - } - - public ExploreTargetEffect(final ExploreTargetEffect effect) { - super(effect); - } - - @Override - public ExploreTargetEffect copy() { - return new ExploreTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - return ExploreSourceEffect.explorePermanent(game, getTargetPointer().getFirst(game, source), source); - } - -} + +package mage.abilities.effects.keyword; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.game.Game; + +/** + * + * @author LevelX2 + */ +public class ExploreTargetEffect extends OneShotEffect { + + public ExploreTargetEffect() { + this(true); + } + + public ExploreTargetEffect(boolean showAbilityHint) { + super(Outcome.Benefit); + this.staticText = ExploreSourceEffect.getRuleText(showAbilityHint); + } + + public ExploreTargetEffect(final ExploreTargetEffect effect) { + super(effect); + } + + @Override + public ExploreTargetEffect copy() { + return new ExploreTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + return ExploreSourceEffect.explorePermanent(game, getTargetPointer().getFirst(game, source), source); + } + +} diff --git a/Mage/src/main/java/mage/abilities/effects/mana/AddConditionalManaOfTwoDifferentColorsEffect.java b/Mage/src/main/java/mage/abilities/effects/mana/AddConditionalManaOfTwoDifferentColorsEffect.java index 4c58fda7d63..419a2c25a7f 100644 --- a/Mage/src/main/java/mage/abilities/effects/mana/AddConditionalManaOfTwoDifferentColorsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/mana/AddConditionalManaOfTwoDifferentColorsEffect.java @@ -1,61 +1,61 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.mana; - -import mage.ConditionalMana; -import mage.Mana; -import mage.abilities.Ability; -import mage.abilities.effects.common.ManaEffect; -import mage.abilities.mana.builder.ConditionalManaBuilder; -import mage.choices.ManaChoice; -import mage.game.Game; -import mage.players.Player; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author jeffwadsworth - */ -public class AddConditionalManaOfTwoDifferentColorsEffect extends ManaEffect { - - private final ConditionalManaBuilder manaBuilder; - - public AddConditionalManaOfTwoDifferentColorsEffect(ConditionalManaBuilder manaBuilder) { - super(); - this.manaBuilder = manaBuilder; - staticText = "Add two mana of different colors. " + manaBuilder.getRule(); - } - - private AddConditionalManaOfTwoDifferentColorsEffect(final AddConditionalManaOfTwoDifferentColorsEffect effect) { - super(effect); - this.manaBuilder = effect.manaBuilder; - } - - @Override - public List getNetMana(Game game, Ability source) { - List netMana = new ArrayList<>(); - netMana.add(Mana.AnyMana(2)); - return netMana; - } - - @Override - public Mana produceMana(Game game, Ability source) { - if (game != null) { - Player player = getPlayer(game, source); - Mana mana = new ConditionalMana(manaBuilder.setMana( - ManaChoice.chooseTwoDifferentColors( - player, game), source, game).build()); - return mana; - } - return new Mana(); - } - - @Override - public AddConditionalManaOfTwoDifferentColorsEffect copy() { - return new AddConditionalManaOfTwoDifferentColorsEffect(this); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.effects.mana; + +import mage.ConditionalMana; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.effects.common.ManaEffect; +import mage.abilities.mana.builder.ConditionalManaBuilder; +import mage.choices.ManaChoice; +import mage.game.Game; +import mage.players.Player; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author jeffwadsworth + */ +public class AddConditionalManaOfTwoDifferentColorsEffect extends ManaEffect { + + private final ConditionalManaBuilder manaBuilder; + + public AddConditionalManaOfTwoDifferentColorsEffect(ConditionalManaBuilder manaBuilder) { + super(); + this.manaBuilder = manaBuilder; + staticText = "Add two mana of different colors. " + manaBuilder.getRule(); + } + + private AddConditionalManaOfTwoDifferentColorsEffect(final AddConditionalManaOfTwoDifferentColorsEffect effect) { + super(effect); + this.manaBuilder = effect.manaBuilder; + } + + @Override + public List getNetMana(Game game, Ability source) { + List netMana = new ArrayList<>(); + netMana.add(Mana.AnyMana(2)); + return netMana; + } + + @Override + public Mana produceMana(Game game, Ability source) { + if (game != null) { + Player player = getPlayer(game, source); + Mana mana = new ConditionalMana(manaBuilder.setMana( + ManaChoice.chooseTwoDifferentColors( + player, game), source, game).build()); + return mana; + } + return new Mana(); + } + + @Override + public AddConditionalManaOfTwoDifferentColorsEffect copy() { + return new AddConditionalManaOfTwoDifferentColorsEffect(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/mana/AddManaOfTwoDifferentColorsEffect.java b/Mage/src/main/java/mage/abilities/effects/mana/AddManaOfTwoDifferentColorsEffect.java index 8a8999b8f86..1bd4bd3f901 100644 --- a/Mage/src/main/java/mage/abilities/effects/mana/AddManaOfTwoDifferentColorsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/mana/AddManaOfTwoDifferentColorsEffect.java @@ -1,46 +1,46 @@ -package mage.abilities.effects.mana; - - -import mage.Mana; -import mage.abilities.Ability; -import mage.abilities.effects.common.ManaEffect; -import mage.choices.ManaChoice; -import mage.game.Game; -import mage.players.Player; - -import java.util.ArrayList; -import java.util.List; - -public class AddManaOfTwoDifferentColorsEffect extends ManaEffect { - - public AddManaOfTwoDifferentColorsEffect() { - super(); - staticText = "Add two mana of different colors."; - } - - private AddManaOfTwoDifferentColorsEffect(final AddManaOfTwoDifferentColorsEffect effect) { - super(effect); - } - - @Override - public List getNetMana(Game game, Ability source) { - List netMana = new ArrayList<>(); - netMana.add(Mana.AnyMana(2)); - return netMana; - } - - @Override - public Mana produceMana(Game game, Ability source) { - if (game != null) { - Player player = getPlayer(game, source); - return ManaChoice.chooseTwoDifferentColors(player, game); - } else { - return new Mana(); - } - } - - @Override - public AddManaOfTwoDifferentColorsEffect copy() { - return new AddManaOfTwoDifferentColorsEffect(this); - } -} +package mage.abilities.effects.mana; + + +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.effects.common.ManaEffect; +import mage.choices.ManaChoice; +import mage.game.Game; +import mage.players.Player; + +import java.util.ArrayList; +import java.util.List; + +public class AddManaOfTwoDifferentColorsEffect extends ManaEffect { + + public AddManaOfTwoDifferentColorsEffect() { + super(); + staticText = "Add two mana of different colors."; + } + + private AddManaOfTwoDifferentColorsEffect(final AddManaOfTwoDifferentColorsEffect effect) { + super(effect); + } + + @Override + public List getNetMana(Game game, Ability source) { + List netMana = new ArrayList<>(); + netMana.add(Mana.AnyMana(2)); + return netMana; + } + + @Override + public Mana produceMana(Game game, Ability source) { + if (game != null) { + Player player = getPlayer(game, source); + return ManaChoice.chooseTwoDifferentColors(player, game); + } else { + return new Mana(); + } + } + + @Override + public AddManaOfTwoDifferentColorsEffect copy() { + return new AddManaOfTwoDifferentColorsEffect(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/BountyAbility.java b/Mage/src/main/java/mage/abilities/keyword/BountyAbility.java index 38dda22c8d2..779fddfa7a4 100644 --- a/Mage/src/main/java/mage/abilities/keyword/BountyAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/BountyAbility.java @@ -1,54 +1,54 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.keyword; - -import mage.abilities.common.DiesCreatureTriggeredAbility; -import mage.abilities.effects.Effect; -import mage.constants.TargetController; -import mage.counters.CounterType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.permanent.CounterPredicate; - -/** - * - * @author Styxo - */ -public class BountyAbility extends DiesCreatureTriggeredAbility { - - private static final FilterCreaturePermanent bountyCounterFilter = new FilterCreaturePermanent("creature an opponent controls with a bounty counter on it"); - - static { - bountyCounterFilter.add(TargetController.OPPONENT.getControllerPredicate()); - bountyCounterFilter.add(new CounterPredicate(CounterType.BOUNTY)); - } - - public BountyAbility(Effect effect) { - super(effect, false, bountyCounterFilter); - } - - public BountyAbility(Effect effect, boolean optional) { - super(effect, optional, bountyCounterFilter); - } - - public BountyAbility(Effect effect, boolean optional, boolean setTargetPointer) { - super(effect, optional, bountyCounterFilter, setTargetPointer); - } - - public BountyAbility(final BountyAbility ability) { - super(ability); - } - - @Override - public BountyAbility copy() { - return new BountyAbility(this); - } - - @Override - public String getRule() { - return "Bounty — " + super.getRule(); - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.keyword; + +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.constants.TargetController; +import mage.counters.CounterType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.permanent.CounterPredicate; + +/** + * + * @author Styxo + */ +public class BountyAbility extends DiesCreatureTriggeredAbility { + + private static final FilterCreaturePermanent bountyCounterFilter = new FilterCreaturePermanent("creature an opponent controls with a bounty counter on it"); + + static { + bountyCounterFilter.add(TargetController.OPPONENT.getControllerPredicate()); + bountyCounterFilter.add(new CounterPredicate(CounterType.BOUNTY)); + } + + public BountyAbility(Effect effect) { + super(effect, false, bountyCounterFilter); + } + + public BountyAbility(Effect effect, boolean optional) { + super(effect, optional, bountyCounterFilter); + } + + public BountyAbility(Effect effect, boolean optional, boolean setTargetPointer) { + super(effect, optional, bountyCounterFilter, setTargetPointer); + } + + public BountyAbility(final BountyAbility ability) { + super(ability); + } + + @Override + public BountyAbility copy() { + return new BountyAbility(this); + } + + @Override + public String getRule() { + return "Bounty — " + super.getRule(); + } + +} diff --git a/Mage/src/main/java/mage/abilities/keyword/CanBlockSpaceflightAbility.java b/Mage/src/main/java/mage/abilities/keyword/CanBlockSpaceflightAbility.java index 68138e2f0fd..79161890576 100644 --- a/Mage/src/main/java/mage/abilities/keyword/CanBlockSpaceflightAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/CanBlockSpaceflightAbility.java @@ -1,43 +1,43 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.keyword; - -import java.io.ObjectStreamException; -import mage.abilities.MageSingleton; -import mage.abilities.StaticAbility; -import mage.constants.Zone; - -/** - * - * @author LevelX2 - */ -public class CanBlockSpaceflightAbility extends StaticAbility implements MageSingleton { - - private static final CanBlockSpaceflightAbility instance = new CanBlockSpaceflightAbility(); - - private Object readResolve() throws ObjectStreamException { - return instance; - } - - public static CanBlockSpaceflightAbility getInstance() { - return instance; - } - - private CanBlockSpaceflightAbility() { - super(Zone.ALL, null); - } - - @Override - public String getRule() { - return "{this} can block creatures with spaceflight."; - } - - @Override - public CanBlockSpaceflightAbility copy() { - return instance; - } - -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.keyword; + +import java.io.ObjectStreamException; +import mage.abilities.MageSingleton; +import mage.abilities.StaticAbility; +import mage.constants.Zone; + +/** + * + * @author LevelX2 + */ +public class CanBlockSpaceflightAbility extends StaticAbility implements MageSingleton { + + private static final CanBlockSpaceflightAbility instance = new CanBlockSpaceflightAbility(); + + private Object readResolve() throws ObjectStreamException { + return instance; + } + + public static CanBlockSpaceflightAbility getInstance() { + return instance; + } + + private CanBlockSpaceflightAbility() { + super(Zone.ALL, null); + } + + @Override + public String getRule() { + return "{this} can block creatures with spaceflight."; + } + + @Override + public CanBlockSpaceflightAbility copy() { + return instance; + } + +} diff --git a/Mage/src/main/java/mage/abilities/keyword/EmbalmAbility.java b/Mage/src/main/java/mage/abilities/keyword/EmbalmAbility.java index 4baac2c65c3..cd50dd7120e 100644 --- a/Mage/src/main/java/mage/abilities/keyword/EmbalmAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/EmbalmAbility.java @@ -1,102 +1,102 @@ - -package mage.abilities.keyword; - -import mage.ObjectColor; -import mage.abilities.Ability; -import mage.abilities.ActivatedAbilityImpl; -import mage.abilities.costs.Cost; -import mage.abilities.costs.common.ExileSourceFromGraveCost; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.constants.Outcome; -import mage.constants.SubType; -import mage.constants.TimingRule; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.token.EmptyToken; -import mage.players.Player; -import mage.util.CardUtil; - -/** - * - * @author LevelX2 - */ -public class EmbalmAbility extends ActivatedAbilityImpl { - - private String rule; - - public EmbalmAbility(Cost cost, Card card) { - super(Zone.GRAVEYARD, new EmbalmEffect(), cost); - addCost(new ExileSourceFromGraveCost()); - this.rule = setRule(cost, card); - this.timing = TimingRule.SORCERY; - setRule(cost, card); - } - - public EmbalmAbility(final EmbalmAbility ability) { - super(ability); - this.rule = ability.rule; - } - - @Override - public EmbalmAbility copy() { - return new EmbalmAbility(this); - } - - @Override - public String getRule() { - return rule; - } - - private String setRule(Cost cost, Card card) { - StringBuilder sb = new StringBuilder("Embalm ").append(cost.getText()); - sb.append(" (").append(cost.getText()); - sb.append(", Exile this card from your graveyard: Create a token that's a copy of it, except it's a white Zombie "); - for (SubType subtype : card.getSubtype(null)) { - sb.append(subtype).append(" "); - } - sb.append(" with no mana cost. Embalm only as a sorcery.)"); - return sb.toString(); - } -} - -class EmbalmEffect extends OneShotEffect { - - public EmbalmEffect() { - super(Outcome.PutCreatureInPlay); - } - - public EmbalmEffect(final EmbalmEffect effect) { - super(effect); - } - - @Override - public EmbalmEffect copy() { - return new EmbalmEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Card card = game.getCard(source.getSourceId()); - if (card == null) { - return false; - } - Player controller = game.getPlayer(card.getOwnerId()); - if (controller == null) { - return false; - } - EmptyToken token = new EmptyToken(); - CardUtil.copyTo(token).from(card); // needed so that entersBattlefied triggered abilities see the attributes (e.g. Master Biomancer) - token.getColor(game).setColor(ObjectColor.WHITE); - if (!token.hasSubtype(SubType.ZOMBIE, game)) { - token.getSubtype(game).add(0, SubType.ZOMBIE); - } - token.getManaCost().clear(); - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.EMBALMED_CREATURE, token.getId(), source.getSourceId(), controller.getId())); - token.putOntoBattlefield(1, game, source.getSourceId(), controller.getId(), false, false, null); - // Probably it makes sense to remove also the Embalm ability (it's not shown on the token cards). - // Also it can never get active or? But it's not mentioned in the reminder text. - return true; - } -} + +package mage.abilities.keyword; + +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.ExileSourceFromGraveCost; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.TimingRule; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.token.EmptyToken; +import mage.players.Player; +import mage.util.CardUtil; + +/** + * + * @author LevelX2 + */ +public class EmbalmAbility extends ActivatedAbilityImpl { + + private String rule; + + public EmbalmAbility(Cost cost, Card card) { + super(Zone.GRAVEYARD, new EmbalmEffect(), cost); + addCost(new ExileSourceFromGraveCost()); + this.rule = setRule(cost, card); + this.timing = TimingRule.SORCERY; + setRule(cost, card); + } + + public EmbalmAbility(final EmbalmAbility ability) { + super(ability); + this.rule = ability.rule; + } + + @Override + public EmbalmAbility copy() { + return new EmbalmAbility(this); + } + + @Override + public String getRule() { + return rule; + } + + private String setRule(Cost cost, Card card) { + StringBuilder sb = new StringBuilder("Embalm ").append(cost.getText()); + sb.append(" (").append(cost.getText()); + sb.append(", Exile this card from your graveyard: Create a token that's a copy of it, except it's a white Zombie "); + for (SubType subtype : card.getSubtype(null)) { + sb.append(subtype).append(" "); + } + sb.append(" with no mana cost. Embalm only as a sorcery.)"); + return sb.toString(); + } +} + +class EmbalmEffect extends OneShotEffect { + + public EmbalmEffect() { + super(Outcome.PutCreatureInPlay); + } + + public EmbalmEffect(final EmbalmEffect effect) { + super(effect); + } + + @Override + public EmbalmEffect copy() { + return new EmbalmEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Card card = game.getCard(source.getSourceId()); + if (card == null) { + return false; + } + Player controller = game.getPlayer(card.getOwnerId()); + if (controller == null) { + return false; + } + EmptyToken token = new EmptyToken(); + CardUtil.copyTo(token).from(card); // needed so that entersBattlefied triggered abilities see the attributes (e.g. Master Biomancer) + token.getColor(game).setColor(ObjectColor.WHITE); + if (!token.hasSubtype(SubType.ZOMBIE, game)) { + token.getSubtype(game).add(0, SubType.ZOMBIE); + } + token.getManaCost().clear(); + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.EMBALMED_CREATURE, token.getId(), source.getSourceId(), controller.getId())); + token.putOntoBattlefield(1, game, source.getSourceId(), controller.getId(), false, false, null); + // Probably it makes sense to remove also the Embalm ability (it's not shown on the token cards). + // Also it can never get active or? But it's not mentioned in the reminder text. + return true; + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/EscalateAbility.java b/Mage/src/main/java/mage/abilities/keyword/EscalateAbility.java index 6d8317b751b..4fba5ecc282 100644 --- a/Mage/src/main/java/mage/abilities/keyword/EscalateAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/EscalateAbility.java @@ -1,72 +1,72 @@ - -package mage.abilities.keyword; - -import mage.abilities.Ability; -import mage.abilities.SpellAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.Cost; -import mage.abilities.effects.common.cost.CostModificationEffectImpl; -import mage.constants.CostModificationType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; -import mage.game.Game; - -/** - * - * @author emerald000 - */ -public class EscalateAbility extends SimpleStaticAbility { - - public EscalateAbility(Cost cost) { - super(Zone.ALL, new EscalateEffect(cost)); - this.setRuleAtTheTop(true); - } - - public EscalateAbility(final EscalateAbility ability) { - super(ability); - } - - @Override - public EscalateAbility copy() { - return new EscalateAbility(this); - } -} - -class EscalateEffect extends CostModificationEffectImpl { - - private final Cost cost; - - EscalateEffect(Cost cost) { - super(Duration.WhileOnBattlefield, Outcome.Detriment, CostModificationType.INCREASE_COST); - this.cost = cost; - this.staticText = "Escalate " + cost.getText() + " (Pay this cost for each mode chosen beyond the first.)"; - } - - EscalateEffect(final EscalateEffect effect) { - super(effect); - this.cost = effect.cost; - } - - @Override - public boolean apply(Game game, Ability source, Ability abilityToModify) { - int numCosts = abilityToModify.getModes().getSelectedModes().size() - 1; - for (int i = 0; i < numCosts; i++) { - abilityToModify.addCost(cost.copy()); - } - return true; - } - - @Override - public boolean applies(Ability abilityToModify, Ability source, Game game) { - if (abilityToModify.getSourceId().equals(source.getSourceId()) && (abilityToModify instanceof SpellAbility)) { - return abilityToModify.getModes().getSelectedModes().size() > 1; - } - return false; - } - - @Override - public EscalateEffect copy() { - return new EscalateEffect(this); - } -} + +package mage.abilities.keyword; + +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.Cost; +import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; + +/** + * + * @author emerald000 + */ +public class EscalateAbility extends SimpleStaticAbility { + + public EscalateAbility(Cost cost) { + super(Zone.ALL, new EscalateEffect(cost)); + this.setRuleAtTheTop(true); + } + + public EscalateAbility(final EscalateAbility ability) { + super(ability); + } + + @Override + public EscalateAbility copy() { + return new EscalateAbility(this); + } +} + +class EscalateEffect extends CostModificationEffectImpl { + + private final Cost cost; + + EscalateEffect(Cost cost) { + super(Duration.WhileOnBattlefield, Outcome.Detriment, CostModificationType.INCREASE_COST); + this.cost = cost; + this.staticText = "Escalate " + cost.getText() + " (Pay this cost for each mode chosen beyond the first.)"; + } + + EscalateEffect(final EscalateEffect effect) { + super(effect); + this.cost = effect.cost; + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + int numCosts = abilityToModify.getModes().getSelectedModes().size() - 1; + for (int i = 0; i < numCosts; i++) { + abilityToModify.addCost(cost.copy()); + } + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + if (abilityToModify.getSourceId().equals(source.getSourceId()) && (abilityToModify instanceof SpellAbility)) { + return abilityToModify.getModes().getSelectedModes().size() > 1; + } + return false; + } + + @Override + public EscalateEffect copy() { + return new EscalateEffect(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/FabricateAbility.java b/Mage/src/main/java/mage/abilities/keyword/FabricateAbility.java index e767d1ca96f..14584854cf2 100644 --- a/Mage/src/main/java/mage/abilities/keyword/FabricateAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/FabricateAbility.java @@ -1,79 +1,79 @@ - -package mage.abilities.keyword; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.effects.OneShotEffect; -import mage.cards.Card; -import mage.constants.Outcome; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.permanent.token.ServoToken; -import mage.players.Player; -import mage.util.CardUtil; - -/** - * @author emerald000 - */ -public class FabricateAbility extends EntersBattlefieldTriggeredAbility { - - public FabricateAbility(int value) { - super(new FabricateEffect(value), false, true); - } - - public FabricateAbility(final FabricateAbility ability) { - super(ability); - } - - @Override - public FabricateAbility copy() { - return new FabricateAbility(this); - } -} - -class FabricateEffect extends OneShotEffect { - - private final int value; - - FabricateEffect(int value) { - super(Outcome.Benefit); - this.value = value; - this.staticText = "Fabricate " + value - + " (When this creature enters the battlefield, put " + CardUtil.numberToText(value, "a") + " +1/+1 counter" + (value > 1 ? "s" : "") - + " on it or create " + CardUtil.numberToText(value, "a") + " 1/1 colorless Servo artifact creature token" + (value > 1 ? "s" : "") + ".)"; - } - - FabricateEffect(final FabricateEffect effect) { - super(effect); - this.value = effect.value; - } - - @Override - public FabricateEffect copy() { - return new FabricateEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - MageObject sourceObject = source.getSourceObjectIfItStillExists(game); - if (sourceObject != null && controller.chooseUse( - Outcome.BoostCreature, - "Fabricate " + value, - null, - "Put " + CardUtil.numberToText(value, "a") + " +1/+1 counter" + (value > 1 ? "s" : ""), - "Create " + CardUtil.numberToText(value, "a") + " 1/1 token" + (value > 1 ? "s" : ""), - source, - game)) { - ((Card) sourceObject).addCounters(CounterType.P1P1.createInstance(value), source, game); - } - else { - new ServoToken().putOntoBattlefield(value, game, source.getSourceId(), controller.getId()); - } - return true; - } - return false; - } -} + +package mage.abilities.keyword; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.constants.Outcome; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.permanent.token.ServoToken; +import mage.players.Player; +import mage.util.CardUtil; + +/** + * @author emerald000 + */ +public class FabricateAbility extends EntersBattlefieldTriggeredAbility { + + public FabricateAbility(int value) { + super(new FabricateEffect(value), false, true); + } + + public FabricateAbility(final FabricateAbility ability) { + super(ability); + } + + @Override + public FabricateAbility copy() { + return new FabricateAbility(this); + } +} + +class FabricateEffect extends OneShotEffect { + + private final int value; + + FabricateEffect(int value) { + super(Outcome.Benefit); + this.value = value; + this.staticText = "Fabricate " + value + + " (When this creature enters the battlefield, put " + CardUtil.numberToText(value, "a") + " +1/+1 counter" + (value > 1 ? "s" : "") + + " on it or create " + CardUtil.numberToText(value, "a") + " 1/1 colorless Servo artifact creature token" + (value > 1 ? "s" : "") + ".)"; + } + + FabricateEffect(final FabricateEffect effect) { + super(effect); + this.value = effect.value; + } + + @Override + public FabricateEffect copy() { + return new FabricateEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + MageObject sourceObject = source.getSourceObjectIfItStillExists(game); + if (sourceObject != null && controller.chooseUse( + Outcome.BoostCreature, + "Fabricate " + value, + null, + "Put " + CardUtil.numberToText(value, "a") + " +1/+1 counter" + (value > 1 ? "s" : ""), + "Create " + CardUtil.numberToText(value, "a") + " 1/1 token" + (value > 1 ? "s" : ""), + source, + game)) { + ((Card) sourceObject).addCounters(CounterType.P1P1.createInstance(value), source, game); + } + else { + new ServoToken().putOntoBattlefield(value, game, source.getSourceId(), controller.getId()); + } + return true; + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/MeditateAbility.java b/Mage/src/main/java/mage/abilities/keyword/MeditateAbility.java index af486663ba0..f40165312f1 100644 --- a/Mage/src/main/java/mage/abilities/keyword/MeditateAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/MeditateAbility.java @@ -1,80 +1,80 @@ - -package mage.abilities.keyword; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.ActivatedAbilityImpl; -import mage.abilities.costs.Cost; -import mage.abilities.effects.OneShotEffect; -import mage.constants.Outcome; -import mage.constants.TimingRule; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; -import mage.players.Player; - -/** - * - * @author Styxo - */ -public class MeditateAbility extends ActivatedAbilityImpl { - - public MeditateAbility(Cost cost) { - super(Zone.BATTLEFIELD, new ReturnToHandEffect(), cost); - this.timing = TimingRule.SORCERY; - } - - public MeditateAbility(final MeditateAbility ability) { - super(ability); - } - - @Override - public MeditateAbility copy() { - return new MeditateAbility(this); - } - - @Override - public String getRule() { - StringBuilder sb = new StringBuilder("Meditate ").append(manaCosts.getText()); - sb.append(" (Return this creature to its owner's hand. Meditate only as a sorcery.)"); - return sb.toString(); - } - -} - -class ReturnToHandEffect extends OneShotEffect { - - public ReturnToHandEffect() { - super(Outcome.ReturnToHand); - } - - public ReturnToHandEffect(final ReturnToHandEffect effect) { - super(effect); - } - - @Override - public ReturnToHandEffect copy() { - return new ReturnToHandEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { - MageObject mageObject = source.getSourceObjectIfItStillExists(game); - if (mageObject != null) { - Permanent permanent = game.getPermanent(source.getSourceId()); - if (permanent != null) { - boolean ret = controller.moveCards(permanent, Zone.HAND, source, game); - if (ret) { - game.fireEvent(new GameEvent(EventType.MEDITATED, source.getSourceId(), source.getSourceId(), controller.getId())); - } - return ret; - } - } - } - return false; - } -} + +package mage.abilities.keyword; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.ActivatedAbilityImpl; +import mage.abilities.costs.Cost; +import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; +import mage.constants.TimingRule; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author Styxo + */ +public class MeditateAbility extends ActivatedAbilityImpl { + + public MeditateAbility(Cost cost) { + super(Zone.BATTLEFIELD, new ReturnToHandEffect(), cost); + this.timing = TimingRule.SORCERY; + } + + public MeditateAbility(final MeditateAbility ability) { + super(ability); + } + + @Override + public MeditateAbility copy() { + return new MeditateAbility(this); + } + + @Override + public String getRule() { + StringBuilder sb = new StringBuilder("Meditate ").append(manaCosts.getText()); + sb.append(" (Return this creature to its owner's hand. Meditate only as a sorcery.)"); + return sb.toString(); + } + +} + +class ReturnToHandEffect extends OneShotEffect { + + public ReturnToHandEffect() { + super(Outcome.ReturnToHand); + } + + public ReturnToHandEffect(final ReturnToHandEffect effect) { + super(effect); + } + + @Override + public ReturnToHandEffect copy() { + return new ReturnToHandEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + MageObject mageObject = source.getSourceObjectIfItStillExists(game); + if (mageObject != null) { + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + boolean ret = controller.moveCards(permanent, Zone.HAND, source, game); + if (ret) { + game.fireEvent(new GameEvent(EventType.MEDITATED, source.getSourceId(), source.getSourceId(), controller.getId())); + } + return ret; + } + } + } + return false; + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/MeleeAbility.java b/Mage/src/main/java/mage/abilities/keyword/MeleeAbility.java index 5964d476420..995e27004aa 100644 --- a/Mage/src/main/java/mage/abilities/keyword/MeleeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/MeleeAbility.java @@ -1,104 +1,104 @@ - -package mage.abilities.keyword; - -import java.util.*; - -import mage.abilities.Ability; -import mage.abilities.common.AttacksTriggeredAbility; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.effects.Effect; -import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.constants.Duration; -import mage.constants.WatcherScope; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.watchers.Watcher; - -/** - * - * @author emerald000 - */ -public class MeleeAbility extends AttacksTriggeredAbility { - - public MeleeAbility() { - super(new BoostSourceEffect(new MeleeDynamicValue(), new MeleeDynamicValue(), Duration.EndOfTurn), false); - this.addWatcher(new MeleeWatcher()); - } - - public MeleeAbility(final MeleeAbility ability) { - super(ability); - } - - @Override - public MeleeAbility copy() { - return new MeleeAbility(this); - } - - @Override - public String getRule() { - return "melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked this combat.)"; - } -} - -class MeleeWatcher extends Watcher { - - private Map> playersAttacked = new HashMap<>(0); - - public MeleeWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == EventType.BEGIN_COMBAT_STEP_PRE) { - this.playersAttacked.clear(); - } - else if (event.getType() == EventType.ATTACKER_DECLARED) { - Set attackedPlayers = this.playersAttacked.getOrDefault(event.getPlayerId(), new HashSet<>(1)); - attackedPlayers.add(event.getTargetId()); - this.playersAttacked.put(event.getPlayerId(), attackedPlayers); - } - } - - public int getNumberOfAttackedPlayers(UUID attackerId) { - if (this.playersAttacked.get(attackerId) != null) { - return this.playersAttacked.get(attackerId).size(); - } - return 0; - } -} - -class MeleeDynamicValue implements DynamicValue { - - private boolean valueChecked = false; - private int lockedInValue; - - @Override - public int calculate(Game game, Ability sourceAbility, Effect effect) { - MeleeWatcher watcher = game.getState().getWatcher(MeleeWatcher.class); - if (watcher != null) { - if (!valueChecked) { - this.lockedInValue = watcher.getNumberOfAttackedPlayers(sourceAbility.getControllerId()); - valueChecked = true; - } - return this.lockedInValue; - } - return 0; - } - - @Override - public MeleeDynamicValue copy() { - return new MeleeDynamicValue(); - } - - @Override - public String getMessage() { - return "number of opponents you attacked this combat"; - } - - @Override - public String toString() { - return "X"; - } -} + +package mage.abilities.keyword; + +import java.util.*; + +import mage.abilities.Ability; +import mage.abilities.common.AttacksTriggeredAbility; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; +import mage.constants.Duration; +import mage.constants.WatcherScope; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.watchers.Watcher; + +/** + * + * @author emerald000 + */ +public class MeleeAbility extends AttacksTriggeredAbility { + + public MeleeAbility() { + super(new BoostSourceEffect(new MeleeDynamicValue(), new MeleeDynamicValue(), Duration.EndOfTurn), false); + this.addWatcher(new MeleeWatcher()); + } + + public MeleeAbility(final MeleeAbility ability) { + super(ability); + } + + @Override + public MeleeAbility copy() { + return new MeleeAbility(this); + } + + @Override + public String getRule() { + return "melee (Whenever this creature attacks, it gets +1/+1 until end of turn for each opponent you attacked this combat.)"; + } +} + +class MeleeWatcher extends Watcher { + + private Map> playersAttacked = new HashMap<>(0); + + public MeleeWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == EventType.BEGIN_COMBAT_STEP_PRE) { + this.playersAttacked.clear(); + } + else if (event.getType() == EventType.ATTACKER_DECLARED) { + Set attackedPlayers = this.playersAttacked.getOrDefault(event.getPlayerId(), new HashSet<>(1)); + attackedPlayers.add(event.getTargetId()); + this.playersAttacked.put(event.getPlayerId(), attackedPlayers); + } + } + + public int getNumberOfAttackedPlayers(UUID attackerId) { + if (this.playersAttacked.get(attackerId) != null) { + return this.playersAttacked.get(attackerId).size(); + } + return 0; + } +} + +class MeleeDynamicValue implements DynamicValue { + + private boolean valueChecked = false; + private int lockedInValue; + + @Override + public int calculate(Game game, Ability sourceAbility, Effect effect) { + MeleeWatcher watcher = game.getState().getWatcher(MeleeWatcher.class); + if (watcher != null) { + if (!valueChecked) { + this.lockedInValue = watcher.getNumberOfAttackedPlayers(sourceAbility.getControllerId()); + valueChecked = true; + } + return this.lockedInValue; + } + return 0; + } + + @Override + public MeleeDynamicValue copy() { + return new MeleeDynamicValue(); + } + + @Override + public String getMessage() { + return "number of opponents you attacked this combat"; + } + + @Override + public String toString() { + return "X"; + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java b/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java index 9b9ee84a88a..03b4c2042c4 100644 --- a/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/RepairAbility.java @@ -1,148 +1,148 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.keyword; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; -import mage.abilities.common.DiesSourceTriggeredAbility; -import mage.abilities.condition.common.SourceHasCounterCondition; -import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; -import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; -import mage.cards.Card; -import mage.constants.AsThoughEffectType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.Zone; -import mage.counters.CounterType; -import mage.game.Game; -import mage.game.events.GameEvent; - -/** - * - * @author Styxo - */ -public class RepairAbility extends DiesSourceTriggeredAbility { - - private String ruleText; - - public RepairAbility(int count) { - super(new AddCountersSourceEffect(CounterType.REPAIR.createInstance(), StaticValue.get(count), false, true)); - addSubAbility(new RepairBeginningOfUpkeepInterveningIfTriggeredAbility()); - addSubAbility(new RepairCastFromGraveyardTriggeredAbility()); - - ruleText = "Repair " + count + " (When this creature dies, put " + count - + " repair counters on it. At the beginning of your upkeep, remove a repair counter. " - + "Whenever the last is removed, you may cast it from graveyard until end of turn.)"; - - } - - public RepairAbility(final RepairAbility ability) { - super(ability); - this.ruleText = ability.ruleText; - } - - @Override - public String getRule() { - return ruleText; - } - - @Override - public RepairAbility copy() { - return new RepairAbility(this); - } -} - -class RepairCastFromGraveyardEffect extends AsThoughEffectImpl { - - public RepairCastFromGraveyardEffect() { - super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); - staticText = "You may cast it from graveyard until end of turn"; - } - - public RepairCastFromGraveyardEffect(final RepairCastFromGraveyardEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public RepairCastFromGraveyardEffect copy() { - return new RepairCastFromGraveyardEffect(this); - } - - @Override - public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - return source.isControlledBy(affectedControllerId); - } -} - -class RepairCastFromGraveyardTriggeredAbility extends TriggeredAbilityImpl { - - public RepairCastFromGraveyardTriggeredAbility() { - super(Zone.GRAVEYARD, new RepairCastFromGraveyardEffect()); - setRuleVisible(false); - } - - public RepairCastFromGraveyardTriggeredAbility(RepairCastFromGraveyardTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.COUNTER_REMOVED; - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getTargetId().equals(getSourceId())) { - Card card = game.getCard(getSourceId()); - if (card != null && game.getState().getZone(card.getId()) == Zone.GRAVEYARD - && card.getCounters(game).getCount(CounterType.REPAIR) == 0) { - return true; - } - } - return false; - } - - @Override - public String getRule() { - return "Whenever the last repair counter is removed, you may cast {this} from your graveyard until end of turn"; - } - - @Override - public RepairCastFromGraveyardTriggeredAbility copy() { - return new RepairCastFromGraveyardTriggeredAbility(this); - } -} - -class RepairBeginningOfUpkeepInterveningIfTriggeredAbility extends ConditionalInterveningIfTriggeredAbility { - - public RepairBeginningOfUpkeepInterveningIfTriggeredAbility() { - super(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, new RemoveCounterSourceEffect(CounterType.REPAIR.createInstance()), TargetController.YOU, false), - new SourceHasCounterCondition(CounterType.REPAIR), - "At the beginning of your upkeep, remove a repair counter from {this}"); - this.setRuleVisible(false); - - } - - public RepairBeginningOfUpkeepInterveningIfTriggeredAbility(final RepairBeginningOfUpkeepInterveningIfTriggeredAbility effect) { - super(effect); - } - - @Override - public RepairBeginningOfUpkeepInterveningIfTriggeredAbility copy() { - return new RepairBeginningOfUpkeepInterveningIfTriggeredAbility(this); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.keyword; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.DiesSourceTriggeredAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.cards.Card; +import mage.constants.AsThoughEffectType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.game.Game; +import mage.game.events.GameEvent; + +/** + * + * @author Styxo + */ +public class RepairAbility extends DiesSourceTriggeredAbility { + + private String ruleText; + + public RepairAbility(int count) { + super(new AddCountersSourceEffect(CounterType.REPAIR.createInstance(), StaticValue.get(count), false, true)); + addSubAbility(new RepairBeginningOfUpkeepInterveningIfTriggeredAbility()); + addSubAbility(new RepairCastFromGraveyardTriggeredAbility()); + + ruleText = "Repair " + count + " (When this creature dies, put " + count + + " repair counters on it. At the beginning of your upkeep, remove a repair counter. " + + "Whenever the last is removed, you may cast it from graveyard until end of turn.)"; + + } + + public RepairAbility(final RepairAbility ability) { + super(ability); + this.ruleText = ability.ruleText; + } + + @Override + public String getRule() { + return ruleText; + } + + @Override + public RepairAbility copy() { + return new RepairAbility(this); + } +} + +class RepairCastFromGraveyardEffect extends AsThoughEffectImpl { + + public RepairCastFromGraveyardEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfTurn, Outcome.Benefit); + staticText = "You may cast it from graveyard until end of turn"; + } + + public RepairCastFromGraveyardEffect(final RepairCastFromGraveyardEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public RepairCastFromGraveyardEffect copy() { + return new RepairCastFromGraveyardEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + return source.isControlledBy(affectedControllerId); + } +} + +class RepairCastFromGraveyardTriggeredAbility extends TriggeredAbilityImpl { + + public RepairCastFromGraveyardTriggeredAbility() { + super(Zone.GRAVEYARD, new RepairCastFromGraveyardEffect()); + setRuleVisible(false); + } + + public RepairCastFromGraveyardTriggeredAbility(RepairCastFromGraveyardTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER_REMOVED; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getTargetId().equals(getSourceId())) { + Card card = game.getCard(getSourceId()); + if (card != null && game.getState().getZone(card.getId()) == Zone.GRAVEYARD + && card.getCounters(game).getCount(CounterType.REPAIR) == 0) { + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever the last repair counter is removed, you may cast {this} from your graveyard until end of turn"; + } + + @Override + public RepairCastFromGraveyardTriggeredAbility copy() { + return new RepairCastFromGraveyardTriggeredAbility(this); + } +} + +class RepairBeginningOfUpkeepInterveningIfTriggeredAbility extends ConditionalInterveningIfTriggeredAbility { + + public RepairBeginningOfUpkeepInterveningIfTriggeredAbility() { + super(new BeginningOfUpkeepTriggeredAbility(Zone.GRAVEYARD, new RemoveCounterSourceEffect(CounterType.REPAIR.createInstance()), TargetController.YOU, false), + new SourceHasCounterCondition(CounterType.REPAIR), + "At the beginning of your upkeep, remove a repair counter from {this}"); + this.setRuleVisible(false); + + } + + public RepairBeginningOfUpkeepInterveningIfTriggeredAbility(final RepairBeginningOfUpkeepInterveningIfTriggeredAbility effect) { + super(effect); + } + + @Override + public RepairBeginningOfUpkeepInterveningIfTriggeredAbility copy() { + return new RepairBeginningOfUpkeepInterveningIfTriggeredAbility(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/keyword/SpaceflightAbility.java b/Mage/src/main/java/mage/abilities/keyword/SpaceflightAbility.java index ed9223756e6..19ae36997fe 100644 --- a/Mage/src/main/java/mage/abilities/keyword/SpaceflightAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/SpaceflightAbility.java @@ -1,78 +1,78 @@ -package mage.abilities.keyword; - -import mage.abilities.Ability; -import mage.abilities.EvasionAbility; -import mage.abilities.MageSingleton; -import mage.abilities.effects.RestrictionEffect; -import mage.constants.Duration; -import mage.game.Game; -import mage.game.permanent.Permanent; - -import java.io.ObjectStreamException; - -/** - * @author Styxo - */ -public class SpaceflightAbility extends EvasionAbility implements MageSingleton { - - private static final SpaceflightAbility instance = new SpaceflightAbility(); - - private Object readResolve() throws ObjectStreamException { - return instance; - } - - public static SpaceflightAbility getInstance() { - return instance; - } - - private SpaceflightAbility() { - this.addEffect(new SpaceFlightEffect()); - } - - @Override - public String getRule() { - return "Spaceflight (This creature can only block or be blocked by creatures with spaceflight)"; - } - - @Override - public SpaceflightAbility copy() { - return instance; - } - -} - -class SpaceFlightEffect extends RestrictionEffect implements MageSingleton { - - public SpaceFlightEffect() { - super(Duration.EndOfGame); - } - - public SpaceFlightEffect(final SpaceFlightEffect effect) { - super(effect); - } - - @Override - public boolean applies(Permanent permanent, Ability source, Game game) { - return permanent.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()); - } - - @Override - public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { - if (attacker == null) { - return true; - } - return attacker.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()); - } - - @Override - public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { - return blocker.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()) - || blocker.getAbilities().containsKey(CanBlockSpaceflightAbility.getInstance().getId()); - } - - @Override - public SpaceFlightEffect copy() { - return new SpaceFlightEffect(this); - } - -} +package mage.abilities.keyword; + +import mage.abilities.Ability; +import mage.abilities.EvasionAbility; +import mage.abilities.MageSingleton; +import mage.abilities.effects.RestrictionEffect; +import mage.constants.Duration; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.io.ObjectStreamException; + +/** + * @author Styxo + */ +public class SpaceflightAbility extends EvasionAbility implements MageSingleton { + + private static final SpaceflightAbility instance = new SpaceflightAbility(); + + private Object readResolve() throws ObjectStreamException { + return instance; + } + + public static SpaceflightAbility getInstance() { + return instance; + } + + private SpaceflightAbility() { + this.addEffect(new SpaceFlightEffect()); + } + + @Override + public String getRule() { + return "Spaceflight (This creature can only block or be blocked by creatures with spaceflight)"; + } + + @Override + public SpaceflightAbility copy() { + return instance; + } + +} + +class SpaceFlightEffect extends RestrictionEffect implements MageSingleton { + + public SpaceFlightEffect() { + super(Duration.EndOfGame); + } + + public SpaceFlightEffect(final SpaceFlightEffect effect) { + super(effect); + } + + @Override + public boolean applies(Permanent permanent, Ability source, Game game) { + return permanent.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()); + } + + @Override + public boolean canBlock(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { + if (attacker == null) { + return true; + } + return attacker.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()); + } + + @Override + public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game, boolean canUseChooseDialogs) { + return blocker.getAbilities().containsKey(SpaceflightAbility.getInstance().getId()) + || blocker.getAbilities().containsKey(CanBlockSpaceflightAbility.getInstance().getId()); + } + + @Override + public SpaceFlightEffect copy() { + return new SpaceFlightEffect(this); + } + +} diff --git a/Mage/src/main/java/mage/abilities/mana/conditional/ConditionalAddManaOfTwoDifferentColorsAbility.java b/Mage/src/main/java/mage/abilities/mana/conditional/ConditionalAddManaOfTwoDifferentColorsAbility.java index e700aeb6124..09930bde7d0 100644 --- a/Mage/src/main/java/mage/abilities/mana/conditional/ConditionalAddManaOfTwoDifferentColorsAbility.java +++ b/Mage/src/main/java/mage/abilities/mana/conditional/ConditionalAddManaOfTwoDifferentColorsAbility.java @@ -1,37 +1,37 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.mana.conditional; - -import mage.abilities.costs.Cost; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.effects.mana.AddConditionalManaOfTwoDifferentColorsEffect; -import mage.abilities.mana.ActivatedManaAbilityImpl; -import mage.abilities.mana.builder.ConditionalManaBuilder; -import mage.constants.Zone; - -/** - * - * @author jeffwadsworth - */ -public class ConditionalAddManaOfTwoDifferentColorsAbility extends ActivatedManaAbilityImpl { - - public ConditionalAddManaOfTwoDifferentColorsAbility(ConditionalManaBuilder manaBuilder) { - this(new TapSourceCost(), manaBuilder); - } - - public ConditionalAddManaOfTwoDifferentColorsAbility(Cost cost, ConditionalManaBuilder manaBuilder) { - super(Zone.BATTLEFIELD, new AddConditionalManaOfTwoDifferentColorsEffect(manaBuilder), cost); - } - - public ConditionalAddManaOfTwoDifferentColorsAbility(final ConditionalAddManaOfTwoDifferentColorsAbility ability) { - super(ability); - } - - @Override - public ConditionalAddManaOfTwoDifferentColorsAbility copy() { - return new ConditionalAddManaOfTwoDifferentColorsAbility(this); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.abilities.mana.conditional; + +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.mana.AddConditionalManaOfTwoDifferentColorsEffect; +import mage.abilities.mana.ActivatedManaAbilityImpl; +import mage.abilities.mana.builder.ConditionalManaBuilder; +import mage.constants.Zone; + +/** + * + * @author jeffwadsworth + */ +public class ConditionalAddManaOfTwoDifferentColorsAbility extends ActivatedManaAbilityImpl { + + public ConditionalAddManaOfTwoDifferentColorsAbility(ConditionalManaBuilder manaBuilder) { + this(new TapSourceCost(), manaBuilder); + } + + public ConditionalAddManaOfTwoDifferentColorsAbility(Cost cost, ConditionalManaBuilder manaBuilder) { + super(Zone.BATTLEFIELD, new AddConditionalManaOfTwoDifferentColorsEffect(manaBuilder), cost); + } + + public ConditionalAddManaOfTwoDifferentColorsAbility(final ConditionalAddManaOfTwoDifferentColorsAbility ability) { + super(ability); + } + + @Override + public ConditionalAddManaOfTwoDifferentColorsAbility copy() { + return new ConditionalAddManaOfTwoDifferentColorsAbility(this); + } +} diff --git a/Mage/src/main/java/mage/choices/ManaChoice.java b/Mage/src/main/java/mage/choices/ManaChoice.java index 45ada266897..f5922dfa870 100644 --- a/Mage/src/main/java/mage/choices/ManaChoice.java +++ b/Mage/src/main/java/mage/choices/ManaChoice.java @@ -1,54 +1,54 @@ -package mage.choices; - -import mage.Mana; -import mage.constants.Outcome; -import mage.game.Game; -import mage.players.Player; - -public class ManaChoice { - public static Mana chooseAnyColor(Player player, Game game, int amount) { - if (player == null) { - return null; - } - Mana mana = new Mana(); - for (int i = 0; i < amount; i++) { - ChoiceColor choiceColor = new ChoiceColor(); - if (amount > 1) { - choiceColor.setMessage("Choose color " + (i + 1)); - } - if (!player.choose(Outcome.Benefit, choiceColor, game)) { - return null; - } - choiceColor.increaseMana(mana); - } - return mana; - } - - public static Mana chooseTwoDifferentColors(Player player, Game game) { - Mana mana = new Mana(); - - if (game == null || player == null) { - return mana; - } - - ChoiceColor color1 = new ChoiceColor(true, "Choose color 1"); - if (!player.choose(Outcome.PutManaInPool, color1, game) || color1.getColor() == null) { - return mana; - } - - ChoiceColor color2 = new ChoiceColor(true, "Choose color 2"); - color2.removeColorFromChoices(color1.getChoice()); - if (!player.choose(Outcome.PutManaInPool, color2, game) || color2.getColor() == null) { - return mana; - } - - if (color1.getColor().equals(color2.getColor())) { - game.informPlayers("Player " + player.getName() + " is cheating with mana choices."); - return mana; - } - - mana.add(color1.getMana(1)); - mana.add(color2.getMana(1)); - return mana; - } -} +package mage.choices; + +import mage.Mana; +import mage.constants.Outcome; +import mage.game.Game; +import mage.players.Player; + +public class ManaChoice { + public static Mana chooseAnyColor(Player player, Game game, int amount) { + if (player == null) { + return null; + } + Mana mana = new Mana(); + for (int i = 0; i < amount; i++) { + ChoiceColor choiceColor = new ChoiceColor(); + if (amount > 1) { + choiceColor.setMessage("Choose color " + (i + 1)); + } + if (!player.choose(Outcome.Benefit, choiceColor, game)) { + return null; + } + choiceColor.increaseMana(mana); + } + return mana; + } + + public static Mana chooseTwoDifferentColors(Player player, Game game) { + Mana mana = new Mana(); + + if (game == null || player == null) { + return mana; + } + + ChoiceColor color1 = new ChoiceColor(true, "Choose color 1"); + if (!player.choose(Outcome.PutManaInPool, color1, game) || color1.getColor() == null) { + return mana; + } + + ChoiceColor color2 = new ChoiceColor(true, "Choose color 2"); + color2.removeColorFromChoices(color1.getChoice()); + if (!player.choose(Outcome.PutManaInPool, color2, game) || color2.getColor() == null) { + return mana; + } + + if (color1.getColor().equals(color2.getColor())) { + game.informPlayers("Player " + player.getName() + " is cheating with mana choices."); + return mana; + } + + mana.add(color1.getMana(1)); + mana.add(color2.getMana(1)); + return mana; + } +} diff --git a/Mage/src/main/java/mage/constants/EnterEventType.java b/Mage/src/main/java/mage/constants/EnterEventType.java index 09a5b75a92a..9fc0b834e73 100644 --- a/Mage/src/main/java/mage/constants/EnterEventType.java +++ b/Mage/src/main/java/mage/constants/EnterEventType.java @@ -1,12 +1,12 @@ -package mage.constants; - -/** - * - * @author LevelX2 - */ -public enum EnterEventType { - SELF, - CONTROL, - COPY, - OTHER -} +package mage.constants; + +/** + * + * @author LevelX2 + */ +public enum EnterEventType { + SELF, + CONTROL, + COPY, + OTHER +} diff --git a/Mage/src/main/java/mage/filter/common/FilterOpponentsCreaturePermanent.java b/Mage/src/main/java/mage/filter/common/FilterOpponentsCreaturePermanent.java index ef20a14cd98..c50379ba463 100644 --- a/Mage/src/main/java/mage/filter/common/FilterOpponentsCreaturePermanent.java +++ b/Mage/src/main/java/mage/filter/common/FilterOpponentsCreaturePermanent.java @@ -1,40 +1,40 @@ -package mage.filter.common; - -import mage.constants.SubType; -import mage.constants.TargetController; - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -/** - * - * @author Styxo - */ -public class FilterOpponentsCreaturePermanent extends FilterCreaturePermanent { - - public FilterOpponentsCreaturePermanent() { - this("creature an opponent controls"); - } - - public FilterOpponentsCreaturePermanent(String name) { - super(name); - this.add(TargetController.OPPONENT.getControllerPredicate()); - - } - - public FilterOpponentsCreaturePermanent(SubType subtype, String name) { - super(subtype, name); - this.add(TargetController.OPPONENT.getControllerPredicate()); - } - - public FilterOpponentsCreaturePermanent(final FilterOpponentsCreaturePermanent filter) { - super(filter); - } - - @Override - public FilterOpponentsCreaturePermanent copy() { - return new FilterOpponentsCreaturePermanent(this); - } -} +package mage.filter.common; + +import mage.constants.SubType; +import mage.constants.TargetController; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +/** + * + * @author Styxo + */ +public class FilterOpponentsCreaturePermanent extends FilterCreaturePermanent { + + public FilterOpponentsCreaturePermanent() { + this("creature an opponent controls"); + } + + public FilterOpponentsCreaturePermanent(String name) { + super(name); + this.add(TargetController.OPPONENT.getControllerPredicate()); + + } + + public FilterOpponentsCreaturePermanent(SubType subtype, String name) { + super(subtype, name); + this.add(TargetController.OPPONENT.getControllerPredicate()); + } + + public FilterOpponentsCreaturePermanent(final FilterOpponentsCreaturePermanent filter) { + super(filter); + } + + @Override + public FilterOpponentsCreaturePermanent copy() { + return new FilterOpponentsCreaturePermanent(this); + } +} diff --git a/Mage/src/main/java/mage/filter/common/FilterTeamCreaturePermanent.java b/Mage/src/main/java/mage/filter/common/FilterTeamCreaturePermanent.java index e7f42f0c581..06bec479d07 100644 --- a/Mage/src/main/java/mage/filter/common/FilterTeamCreaturePermanent.java +++ b/Mage/src/main/java/mage/filter/common/FilterTeamCreaturePermanent.java @@ -1,40 +1,40 @@ -package mage.filter.common; - -import mage.constants.SubType; -import mage.constants.TargetController; - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -/** - * - * @author TheElk801 - */ -public class FilterTeamCreaturePermanent extends FilterCreaturePermanent { - - public FilterTeamCreaturePermanent() { - this("creature your team controls"); - } - - public FilterTeamCreaturePermanent(String name) { - super(name); - this.add(TargetController.TEAM.getControllerPredicate()); - - } - - public FilterTeamCreaturePermanent(SubType subtype, String name) { - super(subtype, name); - this.add(TargetController.TEAM.getControllerPredicate()); - } - - public FilterTeamCreaturePermanent(final FilterTeamCreaturePermanent filter) { - super(filter); - } - - @Override - public FilterTeamCreaturePermanent copy() { - return new FilterTeamCreaturePermanent(this); - } -} +package mage.filter.common; + +import mage.constants.SubType; +import mage.constants.TargetController; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +/** + * + * @author TheElk801 + */ +public class FilterTeamCreaturePermanent extends FilterCreaturePermanent { + + public FilterTeamCreaturePermanent() { + this("creature your team controls"); + } + + public FilterTeamCreaturePermanent(String name) { + super(name); + this.add(TargetController.TEAM.getControllerPredicate()); + + } + + public FilterTeamCreaturePermanent(SubType subtype, String name) { + super(subtype, name); + this.add(TargetController.TEAM.getControllerPredicate()); + } + + public FilterTeamCreaturePermanent(final FilterTeamCreaturePermanent filter) { + super(filter); + } + + @Override + public FilterTeamCreaturePermanent copy() { + return new FilterTeamCreaturePermanent(this); + } +} diff --git a/Mage/src/main/java/mage/filter/common/FilterTeamPermanent.java b/Mage/src/main/java/mage/filter/common/FilterTeamPermanent.java index f7a770e8482..6fb625d3973 100644 --- a/Mage/src/main/java/mage/filter/common/FilterTeamPermanent.java +++ b/Mage/src/main/java/mage/filter/common/FilterTeamPermanent.java @@ -1,41 +1,41 @@ -package mage.filter.common; - -import mage.constants.SubType; -import mage.constants.TargetController; -import mage.filter.FilterPermanent; - -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -/** - * - * @author TheElk801 - */ -public class FilterTeamPermanent extends FilterPermanent { - - public FilterTeamPermanent() { - this("permanent your team controls"); - } - - public FilterTeamPermanent(String name) { - super(name); - this.add(TargetController.TEAM.getControllerPredicate()); - - } - - public FilterTeamPermanent(SubType subtype, String name) { - super(subtype, name); - this.add(TargetController.TEAM.getControllerPredicate()); - } - - public FilterTeamPermanent(final FilterTeamPermanent filter) { - super(filter); - } - - @Override - public FilterTeamPermanent copy() { - return new FilterTeamPermanent(this); - } -} +package mage.filter.common; + +import mage.constants.SubType; +import mage.constants.TargetController; +import mage.filter.FilterPermanent; + +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +/** + * + * @author TheElk801 + */ +public class FilterTeamPermanent extends FilterPermanent { + + public FilterTeamPermanent() { + this("permanent your team controls"); + } + + public FilterTeamPermanent(String name) { + super(name); + this.add(TargetController.TEAM.getControllerPredicate()); + + } + + public FilterTeamPermanent(SubType subtype, String name) { + super(subtype, name); + this.add(TargetController.TEAM.getControllerPredicate()); + } + + public FilterTeamPermanent(final FilterTeamPermanent filter) { + super(filter); + } + + @Override + public FilterTeamPermanent copy() { + return new FilterTeamPermanent(this); + } +} diff --git a/Mage/src/main/java/mage/filter/predicate/other/AuraCardCanAttachToLKIPermanentId.java b/Mage/src/main/java/mage/filter/predicate/other/AuraCardCanAttachToLKIPermanentId.java index 6d4b211bcf3..9f4f7040d04 100644 --- a/Mage/src/main/java/mage/filter/predicate/other/AuraCardCanAttachToLKIPermanentId.java +++ b/Mage/src/main/java/mage/filter/predicate/other/AuraCardCanAttachToLKIPermanentId.java @@ -1,42 +1,42 @@ - - -package mage.filter.predicate.other; - -import java.util.UUID; -import mage.cards.Card; -import mage.filter.Filter; -import mage.filter.predicate.Predicate; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.Target; - -/** - * - * @author jeffwadsworth - */ -public class AuraCardCanAttachToLKIPermanentId implements Predicate { - - private final UUID toBeCheckedLKIPermanentId; - - public AuraCardCanAttachToLKIPermanentId(UUID toBeCheckedLKIPermanentId) { - this.toBeCheckedLKIPermanentId = toBeCheckedLKIPermanentId; - } - - @Override - public boolean apply(Card input, Game game) { - final Permanent permanent = game.getPermanentOrLKIBattlefield(toBeCheckedLKIPermanentId); - Filter filter; - for (Target target : input.getSpellAbility().getTargets()) { - filter = target.getFilter(); - if (filter.match(permanent, game)) { - return true; - } - } - return false; - } - - @Override - public String toString() { - return "AuraCardCanAttachToLKIPermanentId(" + toBeCheckedLKIPermanentId + ')'; - } + + +package mage.filter.predicate.other; + +import java.util.UUID; +import mage.cards.Card; +import mage.filter.Filter; +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.Target; + +/** + * + * @author jeffwadsworth + */ +public class AuraCardCanAttachToLKIPermanentId implements Predicate { + + private final UUID toBeCheckedLKIPermanentId; + + public AuraCardCanAttachToLKIPermanentId(UUID toBeCheckedLKIPermanentId) { + this.toBeCheckedLKIPermanentId = toBeCheckedLKIPermanentId; + } + + @Override + public boolean apply(Card input, Game game) { + final Permanent permanent = game.getPermanentOrLKIBattlefield(toBeCheckedLKIPermanentId); + Filter filter; + for (Target target : input.getSpellAbility().getTargets()) { + filter = target.getFilter(); + if (filter.match(permanent, game)) { + return true; + } + } + return false; + } + + @Override + public String toString() { + return "AuraCardCanAttachToLKIPermanentId(" + toBeCheckedLKIPermanentId + ')'; + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/filter/predicate/other/TargetsOnlyOnePlayerPredicate.java b/Mage/src/main/java/mage/filter/predicate/other/TargetsOnlyOnePlayerPredicate.java index 08433ae0890..7d5a6820d22 100644 --- a/Mage/src/main/java/mage/filter/predicate/other/TargetsOnlyOnePlayerPredicate.java +++ b/Mage/src/main/java/mage/filter/predicate/other/TargetsOnlyOnePlayerPredicate.java @@ -1,48 +1,48 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.filter.predicate.other; - -import java.util.UUID; -import mage.MageObject; -import mage.abilities.Mode; -import mage.filter.predicate.ObjectSourcePlayer; -import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.game.Game; -import mage.game.stack.StackObject; -import mage.players.Player; -import mage.target.Target; - -/** - * - * @author jeffwadsworth - */ -public class TargetsOnlyOnePlayerPredicate implements ObjectSourcePlayerPredicate> { - - public TargetsOnlyOnePlayerPredicate() { - } - - @Override - public boolean apply(ObjectSourcePlayer input, Game game) { - StackObject object = game.getStack().getStackObject(input.getObject().getId()); - if (object != null) { - for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) { - Mode mode = object.getStackAbility().getModes().get(modeId); - for (Target target : mode.getTargets()) { - if (target.getTargets().size() == 1) { // only one player targeted - Player player = game.getPlayer(target.getFirstTarget()); - return player != null; - } - } - } - } - return false; - } - - @Override - public String toString() { - return "that targets only one player"; - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.filter.predicate.other; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Mode; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.game.stack.StackObject; +import mage.players.Player; +import mage.target.Target; + +/** + * + * @author jeffwadsworth + */ +public class TargetsOnlyOnePlayerPredicate implements ObjectSourcePlayerPredicate> { + + public TargetsOnlyOnePlayerPredicate() { + } + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + StackObject object = game.getStack().getStackObject(input.getObject().getId()); + if (object != null) { + for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) { + Mode mode = object.getStackAbility().getModes().get(modeId); + for (Target target : mode.getTargets()) { + if (target.getTargets().size() == 1) { // only one player targeted + Player player = game.getPlayer(target.getFirstTarget()); + return player != null; + } + } + } + } + return false; + } + + @Override + public String toString() { + return "that targets only one player"; + } +} diff --git a/Mage/src/main/java/mage/filter/predicate/other/TargetsPlayerPredicate.java b/Mage/src/main/java/mage/filter/predicate/other/TargetsPlayerPredicate.java index af8f556bc4d..45abc29cf3f 100644 --- a/Mage/src/main/java/mage/filter/predicate/other/TargetsPlayerPredicate.java +++ b/Mage/src/main/java/mage/filter/predicate/other/TargetsPlayerPredicate.java @@ -1,48 +1,48 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.filter.predicate.other; - -import java.util.UUID; -import mage.MageObject; -import mage.abilities.Mode; -import mage.filter.predicate.ObjectSourcePlayer; -import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.game.Game; -import mage.game.stack.StackObject; -import mage.players.Player; -import mage.target.Target; - -/** - * - * @author jeffwadsworth - */ -public class TargetsPlayerPredicate implements ObjectSourcePlayerPredicate> { - - public TargetsPlayerPredicate() { - } - - @Override - public boolean apply(ObjectSourcePlayer input, Game game) { - StackObject object = game.getStack().getStackObject(input.getObject().getId()); - if (object != null) { - for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) { - Mode mode = object.getStackAbility().getModes().get(modeId); - for (Target target : mode.getTargets()) { - for (UUID targetId : target.getTargets()) { - Player player = game.getPlayer(targetId); - return player != null; - } - } - } - } - return false; - } - - @Override - public String toString() { - return "that targets a player"; - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.filter.predicate.other; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.Mode; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.game.stack.StackObject; +import mage.players.Player; +import mage.target.Target; + +/** + * + * @author jeffwadsworth + */ +public class TargetsPlayerPredicate implements ObjectSourcePlayerPredicate> { + + public TargetsPlayerPredicate() { + } + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + StackObject object = game.getStack().getStackObject(input.getObject().getId()); + if (object != null) { + for (UUID modeId : object.getStackAbility().getModes().getSelectedModes()) { + Mode mode = object.getStackAbility().getModes().get(modeId); + for (Target target : mode.getTargets()) { + for (UUID targetId : target.getTargets()) { + Player player = game.getPlayer(targetId); + return player != null; + } + } + } + } + return false; + } + + @Override + public String toString() { + return "that targets a player"; + } +} diff --git a/Mage/src/main/java/mage/filter/predicate/permanent/AnotherEnchantedPredicate.java b/Mage/src/main/java/mage/filter/predicate/permanent/AnotherEnchantedPredicate.java index 956e595f774..04d3fa4e6f8 100644 --- a/Mage/src/main/java/mage/filter/predicate/permanent/AnotherEnchantedPredicate.java +++ b/Mage/src/main/java/mage/filter/predicate/permanent/AnotherEnchantedPredicate.java @@ -1,30 +1,30 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.filter.predicate.permanent; - -import mage.filter.predicate.ObjectSourcePlayer; -import mage.filter.predicate.ObjectSourcePlayerPredicate; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * Filters out the id of the enchanted object, if the source is an enchantment - * - * @author LevelX2 - */ -public class AnotherEnchantedPredicate implements ObjectSourcePlayerPredicate> { - - @Override - public boolean apply(ObjectSourcePlayer input, Game game) { - Permanent enchantment = game.getPermanentOrLKIBattlefield(input.getSourceId()); - return enchantment != null && !input.getObject().getId().equals(enchantment.getAttachedTo()); - } - - @Override - public String toString() { - return "Another enchanted"; - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.filter.predicate.permanent; + +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * Filters out the id of the enchanted object, if the source is an enchantment + * + * @author LevelX2 + */ +public class AnotherEnchantedPredicate implements ObjectSourcePlayerPredicate> { + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + Permanent enchantment = game.getPermanentOrLKIBattlefield(input.getSourceId()); + return enchantment != null && !input.getObject().getId().equals(enchantment.getAttachedTo()); + } + + @Override + public String toString() { + return "Another enchanted"; + } +} diff --git a/Mage/src/main/java/mage/game/events/CostEvent.java b/Mage/src/main/java/mage/game/events/CostEvent.java index 75dee4fad26..10b76ce73b2 100644 --- a/Mage/src/main/java/mage/game/events/CostEvent.java +++ b/Mage/src/main/java/mage/game/events/CostEvent.java @@ -1,28 +1,28 @@ - -package mage.game.events; - -import java.util.UUID; -import mage.abilities.costs.Cost; - -/** - * - * @author LevelX2 - */ -public class CostEvent extends GameEvent { - - protected Cost cost; - - public CostEvent(EventType type, UUID targetId, UUID sourceId, UUID playerId, Cost cost) { - super(type, targetId, sourceId, playerId); - this.cost = cost; - } - - public Cost getCost() { - return cost; - } - - public void setCost(Cost cost) { - this.cost = cost; - } - -} + +package mage.game.events; + +import java.util.UUID; +import mage.abilities.costs.Cost; + +/** + * + * @author LevelX2 + */ +public class CostEvent extends GameEvent { + + protected Cost cost; + + public CostEvent(EventType type, UUID targetId, UUID sourceId, UUID playerId, Cost cost) { + super(type, targetId, sourceId, playerId); + this.cost = cost; + } + + public Cost getCost() { + return cost; + } + + public void setCost(Cost cost) { + this.cost = cost; + } + +} diff --git a/Mage/src/main/java/mage/game/events/NumberOfTriggersEvent.java b/Mage/src/main/java/mage/game/events/NumberOfTriggersEvent.java index 79d0f2e6756..5caa84f4a08 100644 --- a/Mage/src/main/java/mage/game/events/NumberOfTriggersEvent.java +++ b/Mage/src/main/java/mage/game/events/NumberOfTriggersEvent.java @@ -1,24 +1,24 @@ - - -package mage.game.events; - -import java.util.UUID; - -/** - * - * @author BetaSteward_at_googlemail.com - */ -public class NumberOfTriggersEvent extends GameEvent { - - private final GameEvent sourceEvent; - - public NumberOfTriggersEvent(UUID controllerOfAbilityId, UUID sourceOfTrigger, GameEvent sourceEvent) { - super(EventType.NUMBER_OF_TRIGGERS, null, sourceOfTrigger, controllerOfAbilityId); - this.sourceEvent = sourceEvent; - this.amount = 1; // Number of times to trigger. Panharmonicon can change this. - } - - public GameEvent getSourceEvent() { - return sourceEvent; - } -} + + +package mage.game.events; + +import java.util.UUID; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class NumberOfTriggersEvent extends GameEvent { + + private final GameEvent sourceEvent; + + public NumberOfTriggersEvent(UUID controllerOfAbilityId, UUID sourceOfTrigger, GameEvent sourceEvent) { + super(EventType.NUMBER_OF_TRIGGERS, null, sourceOfTrigger, controllerOfAbilityId); + this.sourceEvent = sourceEvent; + this.amount = 1; // Number of times to trigger. Panharmonicon can change this. + } + + public GameEvent getSourceEvent() { + return sourceEvent; + } +} diff --git a/Mage/src/main/java/mage/game/permanent/token/StarfishToken.java b/Mage/src/main/java/mage/game/permanent/token/StarfishToken.java index 3e2b867fb3a..7d355ceff39 100644 --- a/Mage/src/main/java/mage/game/permanent/token/StarfishToken.java +++ b/Mage/src/main/java/mage/game/permanent/token/StarfishToken.java @@ -1,34 +1,34 @@ -package mage.game.permanent.token; - -import mage.MageInt; -import mage.constants.CardType; -import mage.constants.SubType; - -/** - * - * @author spike - */ -public final class StarfishToken extends TokenImpl { - - public StarfishToken() { - this(null, 0); - } - - public StarfishToken(String setCode, int tokenType) { - super("Starfish", "0/1 blue Starfish creature token"); - cardType.add(CardType.CREATURE); - subtype.add(SubType.STARFISH); - color.setBlue(true); - power = new MageInt(0); - toughness = new MageInt(1); - } - - public StarfishToken(final StarfishToken token) { - super(token); - } - - @Override - public StarfishToken copy() { - return new StarfishToken(this); - } +package mage.game.permanent.token; + +import mage.MageInt; +import mage.constants.CardType; +import mage.constants.SubType; + +/** + * + * @author spike + */ +public final class StarfishToken extends TokenImpl { + + public StarfishToken() { + this(null, 0); + } + + public StarfishToken(String setCode, int tokenType) { + super("Starfish", "0/1 blue Starfish creature token"); + cardType.add(CardType.CREATURE); + subtype.add(SubType.STARFISH); + color.setBlue(true); + power = new MageInt(0); + toughness = new MageInt(1); + } + + public StarfishToken(final StarfishToken token) { + super(token); + } + + @Override + public StarfishToken copy() { + return new StarfishToken(this); + } } \ No newline at end of file diff --git a/Mage/src/main/java/mage/target/common/TargetCardInGraveyardOrBattlefield.java b/Mage/src/main/java/mage/target/common/TargetCardInGraveyardOrBattlefield.java index c19aebe893a..0a4824b4eb2 100644 --- a/Mage/src/main/java/mage/target/common/TargetCardInGraveyardOrBattlefield.java +++ b/Mage/src/main/java/mage/target/common/TargetCardInGraveyardOrBattlefield.java @@ -1,113 +1,113 @@ -package mage.target.common; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.constants.Zone; -import mage.filter.FilterCard; -import mage.filter.FilterPermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.TargetCard; - -import java.util.Set; -import java.util.UUID; - -/** - * @author LevelX2 - */ -public class TargetCardInGraveyardOrBattlefield extends TargetCard { - - protected final FilterPermanent filterBattlefield; - - public TargetCardInGraveyardOrBattlefield(int minNumTargets, int maxNumTargets, FilterCard filterGraveyard, FilterPermanent filterBattlefield) { - super(minNumTargets, maxNumTargets, Zone.GRAVEYARD, filterGraveyard); // zone for card in graveyard, don't change - this.filterBattlefield = filterBattlefield; - this.targetName = filter.getMessage() - + " in a graveyard " - + (maxNumTargets > 1 ? " and/or " : " or ") - + this.filterBattlefield.getMessage() - + " on the battlefield"; - } - - public TargetCardInGraveyardOrBattlefield(final TargetCardInGraveyardOrBattlefield target) { - super(target); - this.filterBattlefield = target.filterBattlefield; - } - - @Override - public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { - if (!super.canChoose(sourceId, sourceControllerId, game)) { - MageObject targetSource = game.getObject(sourceId); - for (Permanent permanent : game.getBattlefield().getActivePermanents(filterBattlefield, sourceControllerId, game)) { - if ((notTarget || permanent.canBeTargetedBy(targetSource, sourceControllerId, game)) - && filterBattlefield.match(permanent, sourceId, sourceControllerId, game)) { - return true; - } - } - return false; - } - return true; - } - - @Override - public boolean canTarget(UUID id, Ability source, Game game) { - if (!super.canTarget(id, source, game)) { // in graveyard first - Permanent permanent = game.getPermanent(id); - if (permanent != null) { - return filterBattlefield.match(permanent, game); - } - } - return true; - } - - @Override - public boolean canTarget(UUID playerId, UUID id, Ability source, Game game) { - if (!super.canTarget(playerId, id, source, game)) { // in graveyard first - Permanent permanent = game.getPermanent(id); - if (permanent != null) { - return filterBattlefield.match(permanent, source != null ? source.getSourceId() : null, playerId, game); - } - } - return true; - } - - @Override - public boolean canTarget(UUID id, Game game) { - if (!super.canTarget(id, game)) { // in graveyard first - Permanent permanent = game.getPermanent(id); - if (permanent != null) { - return filterBattlefield.match(permanent, game); - } - } - return true; - } - - @Override - public Set possibleTargets(UUID sourceControllerId, Game game) { - Set possibleTargets = super.possibleTargets(sourceControllerId, game); // in graveyard first - for (Permanent permanent : game.getBattlefield().getActivePermanents(filterBattlefield, sourceControllerId, game)) { - if (filterBattlefield.match(permanent, null, sourceControllerId, game)) { - possibleTargets.add(permanent.getId()); - } - } - return possibleTargets; - } - - @Override - public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - Set possibleTargets = super.possibleTargets(sourceId, sourceControllerId, game); // in graveyard first - MageObject targetSource = game.getObject(sourceId); - for (Permanent permanent : game.getBattlefield().getActivePermanents(filterBattlefield, sourceControllerId, sourceId, game)) { - if ((notTarget || permanent.canBeTargetedBy(targetSource, sourceControllerId, game)) && filterBattlefield.match(permanent, sourceId, sourceControllerId, game)) { - possibleTargets.add(permanent.getId()); - } - } - return possibleTargets; - } - - @Override - public TargetCardInGraveyardOrBattlefield copy() { - return new TargetCardInGraveyardOrBattlefield(this); - } - -} +package mage.target.common; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.FilterPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetCard; + +import java.util.Set; +import java.util.UUID; + +/** + * @author LevelX2 + */ +public class TargetCardInGraveyardOrBattlefield extends TargetCard { + + protected final FilterPermanent filterBattlefield; + + public TargetCardInGraveyardOrBattlefield(int minNumTargets, int maxNumTargets, FilterCard filterGraveyard, FilterPermanent filterBattlefield) { + super(minNumTargets, maxNumTargets, Zone.GRAVEYARD, filterGraveyard); // zone for card in graveyard, don't change + this.filterBattlefield = filterBattlefield; + this.targetName = filter.getMessage() + + " in a graveyard " + + (maxNumTargets > 1 ? " and/or " : " or ") + + this.filterBattlefield.getMessage() + + " on the battlefield"; + } + + public TargetCardInGraveyardOrBattlefield(final TargetCardInGraveyardOrBattlefield target) { + super(target); + this.filterBattlefield = target.filterBattlefield; + } + + @Override + public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { + if (!super.canChoose(sourceId, sourceControllerId, game)) { + MageObject targetSource = game.getObject(sourceId); + for (Permanent permanent : game.getBattlefield().getActivePermanents(filterBattlefield, sourceControllerId, game)) { + if ((notTarget || permanent.canBeTargetedBy(targetSource, sourceControllerId, game)) + && filterBattlefield.match(permanent, sourceId, sourceControllerId, game)) { + return true; + } + } + return false; + } + return true; + } + + @Override + public boolean canTarget(UUID id, Ability source, Game game) { + if (!super.canTarget(id, source, game)) { // in graveyard first + Permanent permanent = game.getPermanent(id); + if (permanent != null) { + return filterBattlefield.match(permanent, game); + } + } + return true; + } + + @Override + public boolean canTarget(UUID playerId, UUID id, Ability source, Game game) { + if (!super.canTarget(playerId, id, source, game)) { // in graveyard first + Permanent permanent = game.getPermanent(id); + if (permanent != null) { + return filterBattlefield.match(permanent, source != null ? source.getSourceId() : null, playerId, game); + } + } + return true; + } + + @Override + public boolean canTarget(UUID id, Game game) { + if (!super.canTarget(id, game)) { // in graveyard first + Permanent permanent = game.getPermanent(id); + if (permanent != null) { + return filterBattlefield.match(permanent, game); + } + } + return true; + } + + @Override + public Set possibleTargets(UUID sourceControllerId, Game game) { + Set possibleTargets = super.possibleTargets(sourceControllerId, game); // in graveyard first + for (Permanent permanent : game.getBattlefield().getActivePermanents(filterBattlefield, sourceControllerId, game)) { + if (filterBattlefield.match(permanent, null, sourceControllerId, game)) { + possibleTargets.add(permanent.getId()); + } + } + return possibleTargets; + } + + @Override + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = super.possibleTargets(sourceId, sourceControllerId, game); // in graveyard first + MageObject targetSource = game.getObject(sourceId); + for (Permanent permanent : game.getBattlefield().getActivePermanents(filterBattlefield, sourceControllerId, sourceId, game)) { + if ((notTarget || permanent.canBeTargetedBy(targetSource, sourceControllerId, game)) && filterBattlefield.match(permanent, sourceId, sourceControllerId, game)) { + possibleTargets.add(permanent.getId()); + } + } + return possibleTargets; + } + + @Override + public TargetCardInGraveyardOrBattlefield copy() { + return new TargetCardInGraveyardOrBattlefield(this); + } + +} diff --git a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentSameController.java b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentSameController.java index 642440373a3..0bc13bb3960 100644 --- a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentSameController.java +++ b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentSameController.java @@ -1,50 +1,50 @@ - -package mage.target.common; - -import java.util.UUID; -import mage.abilities.Ability; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author LevelX2 - */ -public class TargetCreaturePermanentSameController extends TargetCreaturePermanent { - - public TargetCreaturePermanentSameController(int minNumTargets, int maxNumTargets, FilterCreaturePermanent filter, boolean notTarget) { - super(minNumTargets, maxNumTargets, filter, notTarget); - } - - public TargetCreaturePermanentSameController(final TargetCreaturePermanentSameController target) { - super(target); - } - - @Override - public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { - if (super.canTarget(controllerId, id, source, game)) { - Permanent firstTargetPermanent = game.getPermanent(id); - if (firstTargetPermanent != null) { - for (Object object : getTargets()) { - UUID targetId = (UUID) object; - Permanent targetPermanent = game.getPermanent(targetId); - if (targetPermanent != null) { - if (!firstTargetPermanent.getId().equals(targetPermanent.getId())) { - if (!firstTargetPermanent.isControlledBy(targetPermanent.getOwnerId())) { - return false; - } - } - } - } - return true; - } - } - return false; - } - - @Override - public TargetCreaturePermanentSameController copy() { - return new TargetCreaturePermanentSameController(this); - } -} + +package mage.target.common; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author LevelX2 + */ +public class TargetCreaturePermanentSameController extends TargetCreaturePermanent { + + public TargetCreaturePermanentSameController(int minNumTargets, int maxNumTargets, FilterCreaturePermanent filter, boolean notTarget) { + super(minNumTargets, maxNumTargets, filter, notTarget); + } + + public TargetCreaturePermanentSameController(final TargetCreaturePermanentSameController target) { + super(target); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (super.canTarget(controllerId, id, source, game)) { + Permanent firstTargetPermanent = game.getPermanent(id); + if (firstTargetPermanent != null) { + for (Object object : getTargets()) { + UUID targetId = (UUID) object; + Permanent targetPermanent = game.getPermanent(targetId); + if (targetPermanent != null) { + if (!firstTargetPermanent.getId().equals(targetPermanent.getId())) { + if (!firstTargetPermanent.isControlledBy(targetPermanent.getOwnerId())) { + return false; + } + } + } + } + return true; + } + } + return false; + } + + @Override + public TargetCreaturePermanentSameController copy() { + return new TargetCreaturePermanentSameController(this); + } +} diff --git a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentWithDifferentTypes.java b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentWithDifferentTypes.java index 4bbc69cabcd..7807cb601c3 100644 --- a/Mage/src/main/java/mage/target/common/TargetCreaturePermanentWithDifferentTypes.java +++ b/Mage/src/main/java/mage/target/common/TargetCreaturePermanentWithDifferentTypes.java @@ -1,50 +1,50 @@ - -package mage.target.common; - -import mage.abilities.Ability; -import mage.filter.common.FilterCreaturePermanent; -import mage.game.Game; -import mage.game.permanent.Permanent; - -import java.util.UUID; - -/** - * - * @author LevelX2 - */ -public class TargetCreaturePermanentWithDifferentTypes extends TargetCreaturePermanent { - - public TargetCreaturePermanentWithDifferentTypes(int minNumTargets, int maxNumTargets, FilterCreaturePermanent filter, boolean notTarget) { - super(minNumTargets, maxNumTargets, filter, notTarget); - } - - public TargetCreaturePermanentWithDifferentTypes(final TargetCreaturePermanentWithDifferentTypes target) { - super(target); - } - - @Override - public TargetCreaturePermanentWithDifferentTypes copy() { - return new TargetCreaturePermanentWithDifferentTypes(this); - } - - @Override - public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { - if (super.canTarget(controllerId, id, source, game)) { - Permanent creature = game.getPermanent(id); - if (creature != null) { - for (Object object : getTargets()) { - UUID targetId = (UUID) object; - Permanent selectedCreature = game.getPermanent(targetId); - if (selectedCreature != null - && !creature.getId().equals(selectedCreature.getId())) { - if (creature.shareSubtypes(selectedCreature, game)) { - return false; - } - } - } - return true; - } - } - return false; - } -} + +package mage.target.common; + +import mage.abilities.Ability; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; + +import java.util.UUID; + +/** + * + * @author LevelX2 + */ +public class TargetCreaturePermanentWithDifferentTypes extends TargetCreaturePermanent { + + public TargetCreaturePermanentWithDifferentTypes(int minNumTargets, int maxNumTargets, FilterCreaturePermanent filter, boolean notTarget) { + super(minNumTargets, maxNumTargets, filter, notTarget); + } + + public TargetCreaturePermanentWithDifferentTypes(final TargetCreaturePermanentWithDifferentTypes target) { + super(target); + } + + @Override + public TargetCreaturePermanentWithDifferentTypes copy() { + return new TargetCreaturePermanentWithDifferentTypes(this); + } + + @Override + public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { + if (super.canTarget(controllerId, id, source, game)) { + Permanent creature = game.getPermanent(id); + if (creature != null) { + for (Object object : getTargets()) { + UUID targetId = (UUID) object; + Permanent selectedCreature = game.getPermanent(targetId); + if (selectedCreature != null + && !creature.getId().equals(selectedCreature.getId())) { + if (creature.shareSubtypes(selectedCreature, game)) { + return false; + } + } + } + return true; + } + } + return false; + } +} diff --git a/Mage/src/main/java/mage/target/common/TargetOpponentsCreaturePermanent.java b/Mage/src/main/java/mage/target/common/TargetOpponentsCreaturePermanent.java index 9a17a690a3c..16dafb43586 100644 --- a/Mage/src/main/java/mage/target/common/TargetOpponentsCreaturePermanent.java +++ b/Mage/src/main/java/mage/target/common/TargetOpponentsCreaturePermanent.java @@ -1,45 +1,45 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.target.common; - -import mage.filter.common.FilterOpponentsCreaturePermanent; - -/** - * - * @author Styxo - */ -public class TargetOpponentsCreaturePermanent extends TargetCreaturePermanent { - - public TargetOpponentsCreaturePermanent() { - this(1, 1, new FilterOpponentsCreaturePermanent(), false); - } - - public TargetOpponentsCreaturePermanent(int numTargets) { - this(numTargets, numTargets, new FilterOpponentsCreaturePermanent(), false); - } - - public TargetOpponentsCreaturePermanent(int minNumTargets, int maxNumTargets) { - this(minNumTargets, maxNumTargets, new FilterOpponentsCreaturePermanent(), false); - } - - public TargetOpponentsCreaturePermanent(FilterOpponentsCreaturePermanent filter) { - super(1, 1, filter, false); - } - - public TargetOpponentsCreaturePermanent(int minNumTargets, int maxNumTargets, FilterOpponentsCreaturePermanent filter, boolean notTarget) { - super(minNumTargets, maxNumTargets, filter, notTarget); - this.targetName = filter.getMessage(); - } - - public TargetOpponentsCreaturePermanent(final TargetOpponentsCreaturePermanent target) { - super(target); - } - - @Override - public TargetOpponentsCreaturePermanent copy() { - return new TargetOpponentsCreaturePermanent(this); - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.target.common; + +import mage.filter.common.FilterOpponentsCreaturePermanent; + +/** + * + * @author Styxo + */ +public class TargetOpponentsCreaturePermanent extends TargetCreaturePermanent { + + public TargetOpponentsCreaturePermanent() { + this(1, 1, new FilterOpponentsCreaturePermanent(), false); + } + + public TargetOpponentsCreaturePermanent(int numTargets) { + this(numTargets, numTargets, new FilterOpponentsCreaturePermanent(), false); + } + + public TargetOpponentsCreaturePermanent(int minNumTargets, int maxNumTargets) { + this(minNumTargets, maxNumTargets, new FilterOpponentsCreaturePermanent(), false); + } + + public TargetOpponentsCreaturePermanent(FilterOpponentsCreaturePermanent filter) { + super(1, 1, filter, false); + } + + public TargetOpponentsCreaturePermanent(int minNumTargets, int maxNumTargets, FilterOpponentsCreaturePermanent filter, boolean notTarget) { + super(minNumTargets, maxNumTargets, filter, notTarget); + this.targetName = filter.getMessage(); + } + + public TargetOpponentsCreaturePermanent(final TargetOpponentsCreaturePermanent target) { + super(target); + } + + @Override + public TargetOpponentsCreaturePermanent copy() { + return new TargetOpponentsCreaturePermanent(this); + } +} diff --git a/Mage/src/main/java/mage/target/targetpointer/ThirdTargetPointer.java b/Mage/src/main/java/mage/target/targetpointer/ThirdTargetPointer.java index 77d1293adb4..b493d20aeda 100644 --- a/Mage/src/main/java/mage/target/targetpointer/ThirdTargetPointer.java +++ b/Mage/src/main/java/mage/target/targetpointer/ThirdTargetPointer.java @@ -1,98 +1,98 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -package mage.target.targetpointer; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; -import mage.abilities.Ability; -import mage.cards.Card; -import mage.game.Game; - -/** - * - * @author Ludwig.Hirth - */ -public class ThirdTargetPointer implements TargetPointer { - - private Map zoneChangeCounter = new HashMap<>(); - - public static ThirdTargetPointer getInstance() { - return new ThirdTargetPointer(); - } - - public ThirdTargetPointer() { - } - - public ThirdTargetPointer(ThirdTargetPointer targetPointer) { - this.zoneChangeCounter = new HashMap<>(); - for (Map.Entry entry : targetPointer.zoneChangeCounter.entrySet()) { - this.zoneChangeCounter.put(entry.getKey(), entry.getValue()); - } - } - - @Override - public void init(Game game, Ability source) { - if (source.getTargets().size() > 2) { - for (UUID target : source.getTargets().get(2).getTargets()) { - Card card = game.getCard(target); - if (card != null) { - this.zoneChangeCounter.put(target, card.getZoneChangeCounter(game)); - } - } - } - } - - @Override - public List getTargets(Game game, Ability source) { - List target = new ArrayList<>(); - if (source.getTargets().size() > 2) { - for (UUID targetId : source.getTargets().get(2).getTargets()) { - Card card = game.getCard(targetId); - if (card != null && zoneChangeCounter.containsKey(targetId) - && card.getZoneChangeCounter(game) != zoneChangeCounter.get(targetId)) { - continue; - } - target.add(targetId); - } - } - return target; - } - - @Override - public UUID getFirst(Game game, Ability source) { - if (source.getTargets().size() > 2) { - UUID targetId = source.getTargets().get(2).getFirstTarget(); - if (zoneChangeCounter.containsKey(targetId)) { - Card card = game.getCard(targetId); - if (card != null && zoneChangeCounter.containsKey(targetId) - && card.getZoneChangeCounter(game) != zoneChangeCounter.get(targetId)) { - return null; - } - } - return targetId; - } - return null; - } - - @Override - public TargetPointer copy() { - return new ThirdTargetPointer(this); - } - - @Override - public FixedTarget getFixedTarget(Game game, Ability source) { - this.init(game, source); - UUID firstId = getFirst(game, source); - if (firstId != null) { - return new FixedTarget(firstId, game.getState().getZoneChangeCounter(firstId)); - } - return null; - - } -} +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package mage.target.targetpointer; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import mage.abilities.Ability; +import mage.cards.Card; +import mage.game.Game; + +/** + * + * @author Ludwig.Hirth + */ +public class ThirdTargetPointer implements TargetPointer { + + private Map zoneChangeCounter = new HashMap<>(); + + public static ThirdTargetPointer getInstance() { + return new ThirdTargetPointer(); + } + + public ThirdTargetPointer() { + } + + public ThirdTargetPointer(ThirdTargetPointer targetPointer) { + this.zoneChangeCounter = new HashMap<>(); + for (Map.Entry entry : targetPointer.zoneChangeCounter.entrySet()) { + this.zoneChangeCounter.put(entry.getKey(), entry.getValue()); + } + } + + @Override + public void init(Game game, Ability source) { + if (source.getTargets().size() > 2) { + for (UUID target : source.getTargets().get(2).getTargets()) { + Card card = game.getCard(target); + if (card != null) { + this.zoneChangeCounter.put(target, card.getZoneChangeCounter(game)); + } + } + } + } + + @Override + public List getTargets(Game game, Ability source) { + List target = new ArrayList<>(); + if (source.getTargets().size() > 2) { + for (UUID targetId : source.getTargets().get(2).getTargets()) { + Card card = game.getCard(targetId); + if (card != null && zoneChangeCounter.containsKey(targetId) + && card.getZoneChangeCounter(game) != zoneChangeCounter.get(targetId)) { + continue; + } + target.add(targetId); + } + } + return target; + } + + @Override + public UUID getFirst(Game game, Ability source) { + if (source.getTargets().size() > 2) { + UUID targetId = source.getTargets().get(2).getFirstTarget(); + if (zoneChangeCounter.containsKey(targetId)) { + Card card = game.getCard(targetId); + if (card != null && zoneChangeCounter.containsKey(targetId) + && card.getZoneChangeCounter(game) != zoneChangeCounter.get(targetId)) { + return null; + } + } + return targetId; + } + return null; + } + + @Override + public TargetPointer copy() { + return new ThirdTargetPointer(this); + } + + @Override + public FixedTarget getFixedTarget(Game game, Ability source) { + this.init(game, source); + UUID firstId = getFirst(game, source); + if (firstId != null) { + return new FixedTarget(firstId, game.getState().getZoneChangeCounter(firstId)); + } + return null; + + } +} diff --git a/Mage/src/main/java/mage/watchers/WatcherUtils.java b/Mage/src/main/java/mage/watchers/WatcherUtils.java index 75ee40a8d71..b90425706c6 100644 --- a/Mage/src/main/java/mage/watchers/WatcherUtils.java +++ b/Mage/src/main/java/mage/watchers/WatcherUtils.java @@ -1,20 +1,20 @@ - -package mage.watchers; - -import mage.MageObject; -import mage.abilities.Ability; -import mage.game.Game; -import org.apache.log4j.Logger; - -/** - * - * @author LevelX2 - */ -public final class WatcherUtils { - - public static void logMissingWatcher(Game game, Ability source, Class watcherClass, Class usingClass) { - MageObject sourceObject = source.getSourceObject(game); - Logger.getLogger(usingClass).error("Needed watcher is not started " + watcherClass.getSimpleName() - + " - " + (sourceObject == null ? " no source object" : sourceObject.getName())); - } -} + +package mage.watchers; + +import mage.MageObject; +import mage.abilities.Ability; +import mage.game.Game; +import org.apache.log4j.Logger; + +/** + * + * @author LevelX2 + */ +public final class WatcherUtils { + + public static void logMissingWatcher(Game game, Ability source, Class watcherClass, Class usingClass) { + MageObject sourceObject = source.getSourceObject(game); + Logger.getLogger(usingClass).error("Needed watcher is not started " + watcherClass.getSimpleName() + + " - " + (sourceObject == null ? " no source object" : sourceObject.getName())); + } +} diff --git a/Mage/src/main/java/mage/watchers/common/CardsCycledOrDiscardedThisTurnWatcher.java b/Mage/src/main/java/mage/watchers/common/CardsCycledOrDiscardedThisTurnWatcher.java index 0cb116c282b..979026278d2 100644 --- a/Mage/src/main/java/mage/watchers/common/CardsCycledOrDiscardedThisTurnWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/CardsCycledOrDiscardedThisTurnWatcher.java @@ -1,72 +1,72 @@ - -package mage.watchers.common; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.UUID; -import mage.MageObjectReference; -import mage.cards.Card; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.WatcherScope; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.watchers.Watcher; - -/** - * Stores cards that were cycled or discarded by any player this turn. - * - * @author jeffwadsworth - */ -public class CardsCycledOrDiscardedThisTurnWatcher extends Watcher { - - private final Map cycledOrDiscardedCardsThisTurn = new HashMap<>(); - private final Map> numberOfCycledOrDiscardedCardsThisTurn = new HashMap<>(); - - public CardsCycledOrDiscardedThisTurnWatcher() { - super(WatcherScope.GAME); - } - - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.DISCARDED_CARD - || event.getType() == GameEvent.EventType.CYCLED_CARD - && event.getPlayerId() != null) { - Card card = game.getCard(event.getTargetId()); - if (card != null) { - Cards c = getCardsCycledOrDiscardedThisTurn(event.getPlayerId()); - c.add(card); - cycledOrDiscardedCardsThisTurn.put(event.getPlayerId(), c); - Set cycledOrDiscardedCards = numberOfCycledOrDiscardedCardsThisTurn.get(event.getPlayerId()); - if (cycledOrDiscardedCards == null) { - cycledOrDiscardedCards = new HashSet<>(); - numberOfCycledOrDiscardedCardsThisTurn.put(event.getPlayerId(), cycledOrDiscardedCards); - } - cycledOrDiscardedCards.add(new MageObjectReference(card, game)); - } - } - } - - public Cards getCardsCycledOrDiscardedThisTurn(UUID playerId) { - return cycledOrDiscardedCardsThisTurn.getOrDefault(playerId, new CardsImpl()); - } - - public int getNumberOfCardsCycledOrDiscardedThisTurn(UUID playerId) { - if (numberOfCycledOrDiscardedCardsThisTurn.containsKey(playerId)) { - return numberOfCycledOrDiscardedCardsThisTurn.get(playerId).size(); - } - return 0; - } - - @Override - public void reset() { - super.reset(); - cycledOrDiscardedCardsThisTurn.clear(); - numberOfCycledOrDiscardedCardsThisTurn.clear(); - } - -} + +package mage.watchers.common; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.UUID; +import mage.MageObjectReference; +import mage.cards.Card; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.WatcherScope; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.watchers.Watcher; + +/** + * Stores cards that were cycled or discarded by any player this turn. + * + * @author jeffwadsworth + */ +public class CardsCycledOrDiscardedThisTurnWatcher extends Watcher { + + private final Map cycledOrDiscardedCardsThisTurn = new HashMap<>(); + private final Map> numberOfCycledOrDiscardedCardsThisTurn = new HashMap<>(); + + public CardsCycledOrDiscardedThisTurnWatcher() { + super(WatcherScope.GAME); + } + + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.DISCARDED_CARD + || event.getType() == GameEvent.EventType.CYCLED_CARD + && event.getPlayerId() != null) { + Card card = game.getCard(event.getTargetId()); + if (card != null) { + Cards c = getCardsCycledOrDiscardedThisTurn(event.getPlayerId()); + c.add(card); + cycledOrDiscardedCardsThisTurn.put(event.getPlayerId(), c); + Set cycledOrDiscardedCards = numberOfCycledOrDiscardedCardsThisTurn.get(event.getPlayerId()); + if (cycledOrDiscardedCards == null) { + cycledOrDiscardedCards = new HashSet<>(); + numberOfCycledOrDiscardedCardsThisTurn.put(event.getPlayerId(), cycledOrDiscardedCards); + } + cycledOrDiscardedCards.add(new MageObjectReference(card, game)); + } + } + } + + public Cards getCardsCycledOrDiscardedThisTurn(UUID playerId) { + return cycledOrDiscardedCardsThisTurn.getOrDefault(playerId, new CardsImpl()); + } + + public int getNumberOfCardsCycledOrDiscardedThisTurn(UUID playerId) { + if (numberOfCycledOrDiscardedCardsThisTurn.containsKey(playerId)) { + return numberOfCycledOrDiscardedCardsThisTurn.get(playerId).size(); + } + return 0; + } + + @Override + public void reset() { + super.reset(); + cycledOrDiscardedCardsThisTurn.clear(); + numberOfCycledOrDiscardedCardsThisTurn.clear(); + } + +} diff --git a/Mage/src/main/java/mage/watchers/common/CreatureAttackedWhichPlayerWatcher.java b/Mage/src/main/java/mage/watchers/common/CreatureAttackedWhichPlayerWatcher.java index df816d4d6d9..6359e97c34a 100644 --- a/Mage/src/main/java/mage/watchers/common/CreatureAttackedWhichPlayerWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/CreatureAttackedWhichPlayerWatcher.java @@ -1,47 +1,47 @@ -package mage.watchers.common; - -import mage.constants.WatcherScope; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.watchers.Watcher; - -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.UUID; - -/** - * @author jeffwadsworth - *

- * Return the last player that was attacked by specified creature this turn - */ -public class CreatureAttackedWhichPlayerWatcher extends Watcher { - - private final Map getPlayerAttackedThisTurnByCreature = new HashMap<>(); - - public CreatureAttackedWhichPlayerWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.ATTACKER_DECLARED) { - UUID creatureId = event.getSourceId(); - UUID playerId = event.getTargetId(); - if (playerId != null - && creatureId != null) { - getPlayerAttackedThisTurnByCreature.putIfAbsent(creatureId, playerId); - } - } - } - - public UUID getPlayerAttackedThisTurnByCreature(UUID creatureId) { - return getPlayerAttackedThisTurnByCreature.getOrDefault(creatureId, null); - } - - @Override - public void reset() { - super.reset(); - getPlayerAttackedThisTurnByCreature.clear(); - } -} +package mage.watchers.common; + +import mage.constants.WatcherScope; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.watchers.Watcher; + +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; + +/** + * @author jeffwadsworth + *

+ * Return the last player that was attacked by specified creature this turn + */ +public class CreatureAttackedWhichPlayerWatcher extends Watcher { + + private final Map getPlayerAttackedThisTurnByCreature = new HashMap<>(); + + public CreatureAttackedWhichPlayerWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.ATTACKER_DECLARED) { + UUID creatureId = event.getSourceId(); + UUID playerId = event.getTargetId(); + if (playerId != null + && creatureId != null) { + getPlayerAttackedThisTurnByCreature.putIfAbsent(creatureId, playerId); + } + } + } + + public UUID getPlayerAttackedThisTurnByCreature(UUID creatureId) { + return getPlayerAttackedThisTurnByCreature.getOrDefault(creatureId, null); + } + + @Override + public void reset() { + super.reset(); + getPlayerAttackedThisTurnByCreature.clear(); + } +} diff --git a/Mage/src/main/java/mage/watchers/common/LifeLossOtherFromCombatWatcher.java b/Mage/src/main/java/mage/watchers/common/LifeLossOtherFromCombatWatcher.java index 71790be2359..a68cf3eaa86 100644 --- a/Mage/src/main/java/mage/watchers/common/LifeLossOtherFromCombatWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/LifeLossOtherFromCombatWatcher.java @@ -1,50 +1,50 @@ - -package mage.watchers.common; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; -import mage.constants.WatcherScope; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.players.Player; -import mage.watchers.Watcher; - -/* - * - * @author Styxo - */ -public class LifeLossOtherFromCombatWatcher extends Watcher { - - private final Set players = new HashSet<>(); - - public LifeLossOtherFromCombatWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.LOST_LIFE && !event.getFlag()) { - UUID playerId = event.getPlayerId(); - if (playerId != null) { - players.add(playerId); - } - } - } - - public boolean opponentLostLifeOtherFromCombat(UUID playerId, Game game) { - Player player = game.getPlayer(playerId); - if (player != null) { - if (players.stream().anyMatch(damagedPlayerId -> player.hasOpponent(damagedPlayerId, game))) { - return true; - } - } - return false; - } - - @Override - public void reset() { - super.reset(); - players.clear(); - } -} + +package mage.watchers.common; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; +import mage.constants.WatcherScope; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.watchers.Watcher; + +/* + * + * @author Styxo + */ +public class LifeLossOtherFromCombatWatcher extends Watcher { + + private final Set players = new HashSet<>(); + + public LifeLossOtherFromCombatWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.LOST_LIFE && !event.getFlag()) { + UUID playerId = event.getPlayerId(); + if (playerId != null) { + players.add(playerId); + } + } + } + + public boolean opponentLostLifeOtherFromCombat(UUID playerId, Game game) { + Player player = game.getPlayer(playerId); + if (player != null) { + if (players.stream().anyMatch(damagedPlayerId -> player.hasOpponent(damagedPlayerId, game))) { + return true; + } + } + return false; + } + + @Override + public void reset() { + super.reset(); + players.clear(); + } +} diff --git a/Mage/src/main/java/mage/watchers/common/NumberOfTimesPermanentTargetedATurnWatcher.java b/Mage/src/main/java/mage/watchers/common/NumberOfTimesPermanentTargetedATurnWatcher.java index e71a844b28d..1df8fa84d1f 100644 --- a/Mage/src/main/java/mage/watchers/common/NumberOfTimesPermanentTargetedATurnWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/NumberOfTimesPermanentTargetedATurnWatcher.java @@ -1,53 +1,53 @@ - - -package mage.watchers.common; - -import java.util.HashMap; -import java.util.Map; -import mage.MageObjectReference; -import mage.constants.WatcherScope; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.watchers.Watcher; - -/** - * - * @author LevelX2 - */ -public class NumberOfTimesPermanentTargetedATurnWatcher extends Watcher { - - private final Map permanentsTargeted = new HashMap<>(); - - public NumberOfTimesPermanentTargetedATurnWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.TARGETED) { - Permanent permanent = game.getPermanent(event.getTargetId()); - if (permanent != null) { - MageObjectReference mor = new MageObjectReference(permanent, game); - int amount = 0; - if (permanentsTargeted.containsKey(mor)) { - amount = permanentsTargeted.get(mor); - } - permanentsTargeted.put(mor, ++amount); - } - } - } - - public boolean notMoreThanOnceTargetedThisTurn(Permanent creature, Game game) { - if (permanentsTargeted.containsKey(new MageObjectReference(creature, game))) { - return permanentsTargeted.get(new MageObjectReference(creature, game)) < 2; - } - return true; - } - - @Override - public void reset() { - super.reset(); - permanentsTargeted.clear(); - } -} + + +package mage.watchers.common; + +import java.util.HashMap; +import java.util.Map; +import mage.MageObjectReference; +import mage.constants.WatcherScope; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.watchers.Watcher; + +/** + * + * @author LevelX2 + */ +public class NumberOfTimesPermanentTargetedATurnWatcher extends Watcher { + + private final Map permanentsTargeted = new HashMap<>(); + + public NumberOfTimesPermanentTargetedATurnWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.TARGETED) { + Permanent permanent = game.getPermanent(event.getTargetId()); + if (permanent != null) { + MageObjectReference mor = new MageObjectReference(permanent, game); + int amount = 0; + if (permanentsTargeted.containsKey(mor)) { + amount = permanentsTargeted.get(mor); + } + permanentsTargeted.put(mor, ++amount); + } + } + } + + public boolean notMoreThanOnceTargetedThisTurn(Permanent creature, Game game) { + if (permanentsTargeted.containsKey(new MageObjectReference(creature, game))) { + return permanentsTargeted.get(new MageObjectReference(creature, game)) < 2; + } + return true; + } + + @Override + public void reset() { + super.reset(); + permanentsTargeted.clear(); + } +} diff --git a/Mage/src/main/java/mage/watchers/common/PlayLandWatcher.java b/Mage/src/main/java/mage/watchers/common/PlayLandWatcher.java index d0af1cecc23..8da3d39d6da 100644 --- a/Mage/src/main/java/mage/watchers/common/PlayLandWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/PlayLandWatcher.java @@ -1,52 +1,52 @@ -package mage.watchers.common; - -import mage.constants.WatcherScope; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; -import mage.watchers.Watcher; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - -/** - * @author jeffwadsworth - */ -public class PlayLandWatcher extends Watcher { - - private final Set playerPlayedLand = new HashSet<>(); // player that played land - private final Set landPlayed = new HashSet<>(); // land played - - public PlayLandWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.LAND_PLAYED) { - Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId()); - if (permanent != null - && permanent.isLand() - && !playerPlayedLand.contains(event.getPlayerId())) { - playerPlayedLand.add(event.getPlayerId()); - landPlayed.add(event.getTargetId()); - } - } - } - - @Override - public void reset() { - super.reset(); - playerPlayedLand.clear(); - landPlayed.clear(); - } - - public boolean landPlayed(UUID playerId) { - return playerPlayedLand.contains(playerId); - } - - public boolean wasLandPlayed(UUID landId) { - return landPlayed.contains(landId); - } -} +package mage.watchers.common; + +import mage.constants.WatcherScope; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; +import mage.watchers.Watcher; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +/** + * @author jeffwadsworth + */ +public class PlayLandWatcher extends Watcher { + + private final Set playerPlayedLand = new HashSet<>(); // player that played land + private final Set landPlayed = new HashSet<>(); // land played + + public PlayLandWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.LAND_PLAYED) { + Permanent permanent = game.getPermanentOrLKIBattlefield(event.getTargetId()); + if (permanent != null + && permanent.isLand() + && !playerPlayedLand.contains(event.getPlayerId())) { + playerPlayedLand.add(event.getPlayerId()); + landPlayed.add(event.getTargetId()); + } + } + } + + @Override + public void reset() { + super.reset(); + playerPlayedLand.clear(); + landPlayed.clear(); + } + + public boolean landPlayed(UUID playerId) { + return playerPlayedLand.contains(playerId); + } + + public boolean wasLandPlayed(UUID landId) { + return landPlayed.contains(landId); + } +} diff --git a/Mage/src/main/java/mage/watchers/common/RevoltWatcher.java b/Mage/src/main/java/mage/watchers/common/RevoltWatcher.java index b2fb2e4ab79..db1dd3483a2 100644 --- a/Mage/src/main/java/mage/watchers/common/RevoltWatcher.java +++ b/Mage/src/main/java/mage/watchers/common/RevoltWatcher.java @@ -1,49 +1,49 @@ -package mage.watchers.common; - -import mage.constants.WatcherScope; -import mage.constants.Zone; -import mage.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.game.events.ZoneChangeEvent; -import mage.game.permanent.Permanent; -import mage.watchers.Watcher; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - -/** - * @author BetaSteward_at_googlemail.com - */ -public class RevoltWatcher extends Watcher { - - private final Set revoltActivePlayerIds = new HashSet<>(0); - - public RevoltWatcher() { - super(WatcherScope.GAME); - } - - @Override - public void watch(GameEvent event, Game game) { - if (event.getType() == EventType.ZONE_CHANGE && event instanceof ZoneChangeEvent) { - ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - if (zEvent.getFromZone() == Zone.BATTLEFIELD) { - Permanent permanent = zEvent.getTarget(); - if (permanent != null) { - revoltActivePlayerIds.add(permanent.getControllerId()); - } - } - } - } - - public boolean revoltActive(UUID playerId) { - return revoltActivePlayerIds.contains(playerId); - } - - @Override - public void reset() { - super.reset(); - revoltActivePlayerIds.clear(); - } -} +package mage.watchers.common; + +import mage.constants.WatcherScope; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.events.ZoneChangeEvent; +import mage.game.permanent.Permanent; +import mage.watchers.Watcher; + +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + +/** + * @author BetaSteward_at_googlemail.com + */ +public class RevoltWatcher extends Watcher { + + private final Set revoltActivePlayerIds = new HashSet<>(0); + + public RevoltWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() == EventType.ZONE_CHANGE && event instanceof ZoneChangeEvent) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + if (zEvent.getFromZone() == Zone.BATTLEFIELD) { + Permanent permanent = zEvent.getTarget(); + if (permanent != null) { + revoltActivePlayerIds.add(permanent.getControllerId()); + } + } + } + } + + public boolean revoltActive(UUID playerId) { + return revoltActivePlayerIds.contains(playerId); + } + + @Override + public void reset() { + super.reset(); + revoltActivePlayerIds.clear(); + } +} diff --git a/Utils/release/startMage.sh b/Utils/release/startMage.sh index a737503b042..ddc86bd71e0 100644 --- a/Utils/release/startMage.sh +++ b/Utils/release/startMage.sh @@ -1,5 +1,5 @@ -#!/bin/sh -cd ./mage-client -./startClient.sh -cd ../mage-server -./startServer.sh +#!/bin/sh +cd ./mage-client +./startClient.sh +cd ../mage-server +./startServer.sh