From 6fd9cab2832c082b8bbc1bafc22c929a3018dcf1 Mon Sep 17 00:00:00 2001 From: ssouders412 Date: Mon, 11 Nov 2019 00:17:57 -0500 Subject: [PATCH 1/2] Implemented K'rrik, Son of Yawgmoth KNOWN ISSUE: K'rrik's ability allowing the player to pay Phyrexian for black mana remains active after K'rrik leaves the battlefield. --- .../src/mage/cards/k/KrrikSonOfYawgmoth.java | 105 +++ .../src/mage/sets/Commander2019Edition.java | 623 +++++++++--------- .../java/org/mage/test/player/TestPlayer.java | 16 + .../java/org/mage/test/stub/PlayerStub.java | 16 + .../main/java/mage/abilities/AbilityImpl.java | 37 ++ .../abilities/costs/mana/ManaCostsImpl.java | 37 ++ Mage/src/main/java/mage/players/Player.java | 6 + .../main/java/mage/players/PlayerImpl.java | 49 ++ .../main/java/mage/players/StubPlayer.java | 15 + 9 files changed, 593 insertions(+), 311 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java diff --git a/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java b/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java new file mode 100644 index 00000000000..60bb6c7ea8d --- /dev/null +++ b/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java @@ -0,0 +1,105 @@ +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.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) { + FilterMana phyrexianBlack = new FilterMana(); + Player controller = game.getPlayer(source.getControllerId()); + phyrexianBlack.setBlack(true); + if (controller != null) { + for (UUID playerId: game.getState().getPlayersInRange(controller.getId(), game)) { + Player player = game.getPlayer(playerId); + if (player != null) + { + player.addPhyrexianToColors(phyrexianBlack); + } + } + return true; + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/Commander2019Edition.java b/Mage.Sets/src/mage/sets/Commander2019Edition.java index d0e7cbe4436..b69e7c765aa 100644 --- a/Mage.Sets/src/mage/sets/Commander2019Edition.java +++ b/Mage.Sets/src/mage/sets/Commander2019Edition.java @@ -1,311 +1,312 @@ -package mage.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * @author TheElk801 - */ -public final class Commander2019Edition extends ExpansionSet { - - private static final Commander2019Edition instance = new Commander2019Edition(); - - public static Commander2019Edition getInstance() { - return instance; - } - - private Commander2019Edition() { - super("Commander 2019 Edition", "C19", ExpansionSet.buildDate(2019, 8, 23), SetType.SUPPLEMENTAL); - this.blockName = "Command Zone"; - - cards.add(new SetCardInfo("Ainok Survivalist", 156, Rarity.COMMON, mage.cards.a.AinokSurvivalist.class)); - cards.add(new SetCardInfo("Akoum Refuge", 226, Rarity.UNCOMMON, mage.cards.a.AkoumRefuge.class)); - cards.add(new SetCardInfo("Alchemist's Greeting", 133, Rarity.COMMON, mage.cards.a.AlchemistsGreeting.class)); - cards.add(new SetCardInfo("Angel of Sanctions", 61, Rarity.MYTHIC, mage.cards.a.AngelOfSanctions.class)); - cards.add(new SetCardInfo("Anje Falkenrath", 37, Rarity.MYTHIC, mage.cards.a.AnjeFalkenrath.class)); - cards.add(new SetCardInfo("Anje's Ravager", 22, Rarity.RARE, mage.cards.a.AnjesRavager.class)); - cards.add(new SetCardInfo("Apex Altisaur", 31, Rarity.RARE, mage.cards.a.ApexAltisaur.class)); - cards.add(new SetCardInfo("Archfiend of Spite", 14, Rarity.RARE, mage.cards.a.ArchfiendOfSpite.class)); - cards.add(new SetCardInfo("Armillary Sphere", 209, Rarity.COMMON, mage.cards.a.ArmillarySphere.class)); - cards.add(new SetCardInfo("Ash Barrens", 227, Rarity.COMMON, mage.cards.a.AshBarrens.class)); - cards.add(new SetCardInfo("Asylum Visitor", 103, Rarity.RARE, mage.cards.a.AsylumVisitor.class)); - cards.add(new SetCardInfo("Atla Palani, Nest Tender", 38, Rarity.MYTHIC, mage.cards.a.AtlaPalaniNestTender.class)); - cards.add(new SetCardInfo("Avacyn's Judgment", 134, Rarity.RARE, mage.cards.a.AvacynsJudgment.class)); - cards.add(new SetCardInfo("Azorius Chancery", 228, Rarity.UNCOMMON, mage.cards.a.AzoriusChancery.class)); - cards.add(new SetCardInfo("Azorius Locket", 210, Rarity.COMMON, mage.cards.a.AzoriusLocket.class)); - cards.add(new SetCardInfo("Backdraft Hellkite", 23, Rarity.RARE, mage.cards.b.BackdraftHellkite.class)); - cards.add(new SetCardInfo("Bane of the Living", 104, Rarity.RARE, mage.cards.b.BaneOfTheLiving.class)); - cards.add(new SetCardInfo("Barren Moor", 229, Rarity.UNCOMMON, mage.cards.b.BarrenMoor.class)); - cards.add(new SetCardInfo("Beacon of Unrest", 105, Rarity.RARE, mage.cards.b.BeaconOfUnrest.class)); - cards.add(new SetCardInfo("Beast Within", 157, Rarity.UNCOMMON, mage.cards.b.BeastWithin.class)); - cards.add(new SetCardInfo("Big Game Hunter", 106, Rarity.UNCOMMON, mage.cards.b.BigGameHunter.class)); - cards.add(new SetCardInfo("Biomass Mutation", 187, Rarity.RARE, mage.cards.b.BiomassMutation.class)); - cards.add(new SetCardInfo("Bloodfell Caves", 230, Rarity.COMMON, mage.cards.b.BloodfellCaves.class)); - cards.add(new SetCardInfo("Bloodhall Priest", 188, Rarity.RARE, mage.cards.b.BloodhallPriest.class)); - cards.add(new SetCardInfo("Bloodthirsty Blade", 53, Rarity.UNCOMMON, mage.cards.b.BloodthirstyBlade.class)); - cards.add(new SetCardInfo("Blossoming Sands", 231, Rarity.COMMON, mage.cards.b.BlossomingSands.class)); - cards.add(new SetCardInfo("Bojuka Bog", 232, Rarity.COMMON, mage.cards.b.BojukaBog.class)); - cards.add(new SetCardInfo("Bone Miser", 15, Rarity.RARE, mage.cards.b.BoneMiser.class)); - cards.add(new SetCardInfo("Boneyard Parley", 107, Rarity.MYTHIC, mage.cards.b.BoneyardParley.class)); - cards.add(new SetCardInfo("Boros Garrison", 233, Rarity.COMMON, mage.cards.b.BorosGarrison.class)); - cards.add(new SetCardInfo("Boros Guildgate", 234, Rarity.COMMON, mage.cards.b.BorosGuildgate.class)); - cards.add(new SetCardInfo("Bounty of the Luxa", 189, Rarity.RARE, mage.cards.b.BountyOfTheLuxa.class)); - cards.add(new SetCardInfo("Burning Vengeance", 135, Rarity.UNCOMMON, mage.cards.b.BurningVengeance.class)); - cards.add(new SetCardInfo("Burnished Hart", 211, Rarity.UNCOMMON, mage.cards.b.BurnishedHart.class)); - cards.add(new SetCardInfo("Call to the Netherworld", 108, Rarity.COMMON, mage.cards.c.CallToTheNetherworld.class)); - cards.add(new SetCardInfo("Champion of Stray Souls", 109, Rarity.MYTHIC, mage.cards.c.ChampionOfStraySouls.class)); - cards.add(new SetCardInfo("Chaos Warp", 136, Rarity.RARE, mage.cards.c.ChaosWarp.class)); - cards.add(new SetCardInfo("Chemister's Insight", 80, Rarity.UNCOMMON, mage.cards.c.ChemistersInsight.class)); - cards.add(new SetCardInfo("Chromeshell Crab", 81, Rarity.RARE, mage.cards.c.ChromeshellCrab.class)); - cards.add(new SetCardInfo("Cinder Barrens", 235, Rarity.COMMON, mage.cards.c.CinderBarrens.class)); - cards.add(new SetCardInfo("Cinder Glade", 236, Rarity.RARE, mage.cards.c.CinderGlade.class)); - cards.add(new SetCardInfo("Clever Impersonator", 82, Rarity.MYTHIC, mage.cards.c.CleverImpersonator.class)); - cards.add(new SetCardInfo("Cliffside Rescuer", 1, Rarity.UNCOMMON, mage.cards.c.CliffsideRescuer.class)); - cards.add(new SetCardInfo("Colossal Majesty", 158, Rarity.UNCOMMON, mage.cards.c.ColossalMajesty.class)); - cards.add(new SetCardInfo("Command Tower", 237, Rarity.COMMON, mage.cards.c.CommandTower.class)); - cards.add(new SetCardInfo("Commander's Insignia", 2, Rarity.RARE, mage.cards.c.CommandersInsignia.class)); - cards.add(new SetCardInfo("Commander's Sphere", 212, Rarity.COMMON, mage.cards.c.CommandersSphere.class)); - cards.add(new SetCardInfo("Crackling Drake", 190, Rarity.UNCOMMON, mage.cards.c.CracklingDrake.class)); - cards.add(new SetCardInfo("Cultivate", 159, Rarity.COMMON, mage.cards.c.Cultivate.class)); - cards.add(new SetCardInfo("Curse of Fool's Wisdom", 16, Rarity.RARE, mage.cards.c.CurseOfFoolsWisdom.class)); - cards.add(new SetCardInfo("Dark Withering", 110, Rarity.COMMON, mage.cards.d.DarkWithering.class)); - cards.add(new SetCardInfo("Darkwater Catacombs", 238, Rarity.RARE, mage.cards.d.DarkwaterCatacombs.class)); - cards.add(new SetCardInfo("Deathmist Raptor", 160, Rarity.MYTHIC, mage.cards.d.DeathmistRaptor.class)); - cards.add(new SetCardInfo("Deep Analysis", 83, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); - cards.add(new SetCardInfo("Den Protector", 161, Rarity.RARE, mage.cards.d.DenProtector.class)); - cards.add(new SetCardInfo("Desolation Twin", 60, Rarity.RARE, mage.cards.d.DesolationTwin.class)); - cards.add(new SetCardInfo("Desperate Ravings", 137, Rarity.UNCOMMON, mage.cards.d.DesperateRavings.class)); - cards.add(new SetCardInfo("Devil's Play", 138, Rarity.RARE, mage.cards.d.DevilsPlay.class)); - cards.add(new SetCardInfo("Dimir Aqueduct", 239, Rarity.UNCOMMON, mage.cards.d.DimirAqueduct.class)); - cards.add(new SetCardInfo("Divine Reckoning", 62, Rarity.RARE, mage.cards.d.DivineReckoning.class)); - cards.add(new SetCardInfo("Dockside Extortionist", 24, Rarity.RARE, mage.cards.d.DocksideExtortionist.class)); - cards.add(new SetCardInfo("Doomed Artisan", 3, Rarity.RARE, mage.cards.d.DoomedArtisan.class)); - cards.add(new SetCardInfo("Dusk // Dawn", 63, Rarity.RARE, mage.cards.d.DuskDawn.class)); - cards.add(new SetCardInfo("Doomed Necromancer", 111, Rarity.RARE, mage.cards.d.DoomedNecromancer.class)); - cards.add(new SetCardInfo("Dragonmaster Outcast", 139, Rarity.MYTHIC, mage.cards.d.DragonmasterOutcast.class)); - cards.add(new SetCardInfo("Drownyard Temple", 240, Rarity.RARE, mage.cards.d.DrownyardTemple.class)); - cards.add(new SetCardInfo("Druid's Deliverance", 162, Rarity.COMMON, mage.cards.d.DruidsDeliverance.class)); - cards.add(new SetCardInfo("Echoing Truth", 84, Rarity.COMMON, mage.cards.e.EchoingTruth.class)); - cards.add(new SetCardInfo("Elemental Bond", 163, Rarity.UNCOMMON, mage.cards.e.ElementalBond.class)); - cards.add(new SetCardInfo("Elsha of the Infinite", 40, Rarity.MYTHIC, mage.cards.e.ElshaOfTheInfinite.class)); - cards.add(new SetCardInfo("Emmara Tandris", 191, Rarity.RARE, mage.cards.e.EmmaraTandris.class)); - cards.add(new SetCardInfo("Empowered Autogenerator", 54, Rarity.RARE, mage.cards.e.EmpoweredAutogenerator.class)); - cards.add(new SetCardInfo("Evolving Wilds", 241, Rarity.COMMON, mage.cards.e.EvolvingWilds.class)); - cards.add(new SetCardInfo("Exotic Orchard", 242, Rarity.RARE, mage.cards.e.ExoticOrchard.class)); - cards.add(new SetCardInfo("Explore", 164, Rarity.COMMON, mage.cards.e.Explore.class)); - cards.add(new SetCardInfo("Fact or Fiction", 85, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); - cards.add(new SetCardInfo("Faith of the Devoted", 112, Rarity.UNCOMMON, mage.cards.f.FaithOfTheDevoted.class)); - cards.add(new SetCardInfo("Faithless Looting", 140, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); - cards.add(new SetCardInfo("Farm // Market", 192, Rarity.UNCOMMON, mage.cards.f.FarmMarket.class)); - cards.add(new SetCardInfo("Farseek", 165, Rarity.COMMON, mage.cards.f.Farseek.class)); - cards.add(new SetCardInfo("Feldon of the Third Path", 141, Rarity.MYTHIC, mage.cards.f.FeldonOfTheThirdPath.class)); - cards.add(new SetCardInfo("Fervent Denial", 86, Rarity.UNCOMMON, mage.cards.f.FerventDenial.class)); - cards.add(new SetCardInfo("Fiery Temper", 142, Rarity.COMMON, mage.cards.f.FieryTemper.class)); - cards.add(new SetCardInfo("Flamerush Rider", 143, Rarity.RARE, mage.cards.f.FlamerushRider.class)); - cards.add(new SetCardInfo("Flayer of the Hatebound", 144, Rarity.RARE, mage.cards.f.FlayerOfTheHatebound.class)); - cards.add(new SetCardInfo("Forest", 300, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forgotten Cave", 243, Rarity.COMMON, mage.cards.f.ForgottenCave.class)); - cards.add(new SetCardInfo("Foul Orchard", 244, Rarity.UNCOMMON, mage.cards.f.FoulOrchard.class)); - cards.add(new SetCardInfo("Fresh Meat", 166, Rarity.RARE, mage.cards.f.FreshMeat.class)); - cards.add(new SetCardInfo("From Under the Floorboards", 113, Rarity.RARE, mage.cards.f.FromUnderTheFloorboards.class)); - cards.add(new SetCardInfo("Full Flowering", 32, Rarity.RARE, mage.cards.f.FullFlowering.class)); - cards.add(new SetCardInfo("Gargoyle Castle", 245, Rarity.RARE, mage.cards.g.GargoyleCastle.class)); - cards.add(new SetCardInfo("Garruk's Packleader", 168, Rarity.UNCOMMON, mage.cards.g.GarruksPackleader.class)); - cards.add(new SetCardInfo("Garruk, Primal Hunter", 167, Rarity.MYTHIC, mage.cards.g.GarrukPrimalHunter.class)); - cards.add(new SetCardInfo("Geier Reach Sanitarium", 246, Rarity.RARE, mage.cards.g.GeierReachSanitarium.class)); - cards.add(new SetCardInfo("Gerrard, Weatherlight Hero", 41, Rarity.RARE, mage.cards.g.GerrardWeatherlightHero.class)); - cards.add(new SetCardInfo("Geth, Lord of the Vault", 114, Rarity.MYTHIC, mage.cards.g.GethLordOfTheVault.class)); - cards.add(new SetCardInfo("Ghastly Conscription", 115, Rarity.MYTHIC, mage.cards.g.GhastlyConscription.class)); - cards.add(new SetCardInfo("Ghired's Belligerence", 25, Rarity.RARE, mage.cards.g.GhiredsBelligerence.class)); - cards.add(new SetCardInfo("Ghired, Conclave Exile", 42, Rarity.MYTHIC, mage.cards.g.GhiredConclaveExile.class)); - cards.add(new SetCardInfo("Ghostly Prison", 64, Rarity.UNCOMMON, mage.cards.g.GhostlyPrison.class)); - cards.add(new SetCardInfo("Giant Adephage", 169, Rarity.MYTHIC, mage.cards.g.GiantAdephage.class)); - cards.add(new SetCardInfo("Gift of Doom", 17, Rarity.RARE, mage.cards.g.GiftOfDoom.class)); - cards.add(new SetCardInfo("Golgari Guildgate", 247, Rarity.COMMON, mage.cards.g.GolgariGuildgate.class)); - cards.add(new SetCardInfo("Golgari Rot Farm", 248, Rarity.UNCOMMON, mage.cards.g.GolgariRotFarm.class)); - cards.add(new SetCardInfo("Gorgon Recluse", 116, Rarity.COMMON, mage.cards.g.GorgonRecluse.class)); - cards.add(new SetCardInfo("Grave Scrabbler", 117, Rarity.COMMON, mage.cards.g.GraveScrabbler.class)); - cards.add(new SetCardInfo("Graypelt Refuge", 249, Rarity.UNCOMMON, mage.cards.g.GraypeltRefuge.class)); - cards.add(new SetCardInfo("Great Oak Guardian", 170, Rarity.UNCOMMON, mage.cards.g.GreatOakGuardian.class)); - cards.add(new SetCardInfo("Greven, Predator Captain", 43, Rarity.MYTHIC, mage.cards.g.GrevenPredatorCaptain.class)); - cards.add(new SetCardInfo("Grim Haruspex", 118, Rarity.RARE, mage.cards.g.GrimHaruspex.class)); - cards.add(new SetCardInfo("Grimoire of the Dead", 213, Rarity.MYTHIC, mage.cards.g.GrimoireOfTheDead.class)); - cards.add(new SetCardInfo("Grismold, the Dreadsower", 44, Rarity.RARE, mage.cards.g.GrismoldTheDreadsower.class)); - cards.add(new SetCardInfo("Growing Ranks", 193, Rarity.RARE, mage.cards.g.GrowingRanks.class)); - cards.add(new SetCardInfo("Gruul Turf", 250, Rarity.UNCOMMON, mage.cards.g.GruulTurf.class)); - cards.add(new SetCardInfo("Guttersnipe", 145, Rarity.UNCOMMON, mage.cards.g.Guttersnipe.class)); - cards.add(new SetCardInfo("Harmonize", 171, Rarity.UNCOMMON, mage.cards.h.Harmonize.class)); - cards.add(new SetCardInfo("Hate Mirage", 26, Rarity.UNCOMMON, mage.cards.h.HateMirage.class)); - cards.add(new SetCardInfo("Heart-Piercer Manticore", 146, Rarity.RARE, mage.cards.h.HeartPiercerManticore.class)); - cards.add(new SetCardInfo("Hedonist's Trove", 119, Rarity.RARE, mage.cards.h.HedonistsTrove.class)); - cards.add(new SetCardInfo("Hedron Archive", 214, Rarity.UNCOMMON, mage.cards.h.HedronArchive.class)); - cards.add(new SetCardInfo("Hex", 120, Rarity.RARE, mage.cards.h.Hex.class)); - cards.add(new SetCardInfo("Highland Lake", 251, Rarity.UNCOMMON, mage.cards.h.HighlandLake.class)); - cards.add(new SetCardInfo("Hooded Hydra", 172, Rarity.MYTHIC, mage.cards.h.HoodedHydra.class)); - cards.add(new SetCardInfo("Hour of Reckoning", 65, Rarity.RARE, mage.cards.h.HourOfReckoning.class)); - cards.add(new SetCardInfo("Icefeather Aven", 194, Rarity.UNCOMMON, mage.cards.i.IcefeatherAven.class)); - cards.add(new SetCardInfo("Idol of Oblivion", 55, Rarity.RARE, mage.cards.i.IdolOfOblivion.class)); - cards.add(new SetCardInfo("Ignite the Future", 27, Rarity.RARE, mage.cards.i.IgniteTheFuture.class)); - cards.add(new SetCardInfo("In Garruk's Wake", 121, Rarity.RARE, mage.cards.i.InGarruksWake.class)); - cards.add(new SetCardInfo("Increasing Devotion", 66, Rarity.RARE, mage.cards.i.IncreasingDevotion.class)); - cards.add(new SetCardInfo("Increasing Vengeance", 147, Rarity.RARE, mage.cards.i.IncreasingVengeance.class)); - cards.add(new SetCardInfo("Intangible Virtue", 67, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); - cards.add(new SetCardInfo("Island", 291, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Ixidron", 87, Rarity.RARE, mage.cards.i.Ixidron.class)); - cards.add(new SetCardInfo("Izzet Boilerworks", 252, Rarity.UNCOMMON, mage.cards.i.IzzetBoilerworks.class)); - cards.add(new SetCardInfo("Izzet Guildgate", 253, Rarity.COMMON, mage.cards.i.IzzetGuildgate.class)); - cards.add(new SetCardInfo("Izzet Locket", 215, Rarity.COMMON, mage.cards.i.IzzetLocket.class)); - cards.add(new SetCardInfo("Jace's Sanctum", 88, Rarity.RARE, mage.cards.j.JacesSanctum.class)); - cards.add(new SetCardInfo("Jungle Hollow", 254, Rarity.COMMON, mage.cards.j.JungleHollow.class)); - cards.add(new SetCardInfo("Jungle Shrine", 255, Rarity.UNCOMMON, mage.cards.j.JungleShrine.class)); - cards.add(new SetCardInfo("Kadena's Silencer", 8, Rarity.RARE, mage.cards.k.KadenasSilencer.class)); - cards.add(new SetCardInfo("Kadena, Slinking Sorcerer", 45, Rarity.MYTHIC, mage.cards.k.KadenaSlinkingSorcerer.class)); - cards.add(new SetCardInfo("Kazandu Refuge", 256, Rarity.UNCOMMON, mage.cards.k.KazanduRefuge.class)); - cards.add(new SetCardInfo("Key to the City", 216, Rarity.RARE, mage.cards.k.KeyToTheCity.class)); - cards.add(new SetCardInfo("Kheru Spellsnatcher", 89, Rarity.RARE, mage.cards.k.KheruSpellsnatcher.class)); - cards.add(new SetCardInfo("Krosan Verge", 257, Rarity.UNCOMMON, mage.cards.k.KrosanVerge.class)); - cards.add(new SetCardInfo("Leadership Vacuum", 9, Rarity.UNCOMMON, mage.cards.l.LeadershipVacuum.class)); - cards.add(new SetCardInfo("Lightning Greaves", 217, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); - cards.add(new SetCardInfo("Llanowar Wastes", 258, Rarity.RARE, mage.cards.l.LlanowarWastes.class)); - cards.add(new SetCardInfo("Magmaquake", 148, Rarity.RARE, mage.cards.m.Magmaquake.class)); - cards.add(new SetCardInfo("Magus of the Wheel", 149, Rarity.RARE, mage.cards.m.MagusOfTheWheel.class)); - cards.add(new SetCardInfo("Malevolent Whispers", 150, Rarity.UNCOMMON, mage.cards.m.MalevolentWhispers.class)); - cards.add(new SetCardInfo("Marisi, Breaker of the Coil", 46, Rarity.MYTHIC, mage.cards.m.MarisiBreakerOfTheCoil.class)); - cards.add(new SetCardInfo("Mass Diminish", 10, Rarity.RARE, mage.cards.m.MassDiminish.class)); - cards.add(new SetCardInfo("Memorial to Folly", 259, Rarity.UNCOMMON, mage.cards.m.MemorialToFolly.class)); - cards.add(new SetCardInfo("Meteor Golem", 218, Rarity.UNCOMMON, mage.cards.m.MeteorGolem.class)); - cards.add(new SetCardInfo("Mimic Vat", 219, Rarity.RARE, mage.cards.m.MimicVat.class)); - cards.add(new SetCardInfo("Mire in Misery", 19, Rarity.UNCOMMON, mage.cards.m.MireInMisery.class)); - cards.add(new SetCardInfo("Momentous Fall", 173, Rarity.RARE, mage.cards.m.MomentousFall.class)); - cards.add(new SetCardInfo("Mortuary Mire", 260, Rarity.COMMON, mage.cards.m.MortuaryMire.class)); - cards.add(new SetCardInfo("Mountain", 297, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Murderous Compulsion", 122, Rarity.COMMON, mage.cards.m.MurderousCompulsion.class)); - cards.add(new SetCardInfo("Myriad Landscape", 261, Rarity.UNCOMMON, mage.cards.m.MyriadLandscape.class)); - cards.add(new SetCardInfo("Mystic Monastery", 262, Rarity.UNCOMMON, mage.cards.m.MysticMonastery.class)); - cards.add(new SetCardInfo("Mystic Retrieval", 90, Rarity.UNCOMMON, mage.cards.m.MysticRetrieval.class)); - cards.add(new SetCardInfo("Nantuko Vigilante", 174, Rarity.COMMON, mage.cards.n.NantukoVigilante.class)); - cards.add(new SetCardInfo("Naya Charm", 195, Rarity.UNCOMMON, mage.cards.n.NayaCharm.class)); - cards.add(new SetCardInfo("Naya Panorama", 263, Rarity.COMMON, mage.cards.n.NayaPanorama.class)); - cards.add(new SetCardInfo("Nightmare Unmaking", 20, Rarity.RARE, mage.cards.n.NightmareUnmaking.class)); - cards.add(new SetCardInfo("Nightshade Assassin", 123, Rarity.UNCOMMON, mage.cards.n.NightshadeAssassin.class)); - cards.add(new SetCardInfo("Ob Nixilis Reignited", 124, Rarity.MYTHIC, mage.cards.o.ObNixilisReignited.class)); - cards.add(new SetCardInfo("Ohran Frostfang", 33, Rarity.RARE, mage.cards.o.OhranFrostfang.class)); - cards.add(new SetCardInfo("Oona's Grace", 91, Rarity.COMMON, mage.cards.o.OonasGrace.class)); - cards.add(new SetCardInfo("Opulent Palace", 264, Rarity.UNCOMMON, mage.cards.o.OpulentPalace.class)); - cards.add(new SetCardInfo("Overseer of the Damned", 125, Rarity.RARE, mage.cards.o.OverseerOfTheDamned.class)); - cards.add(new SetCardInfo("Overwhelming Stampede", 175, Rarity.RARE, mage.cards.o.OverwhelmingStampede.class)); - cards.add(new SetCardInfo("Pendant of Prosperity", 56, Rarity.RARE, mage.cards.p.PendantOfProsperity.class)); - cards.add(new SetCardInfo("Phyrexian Rebirth", 68, Rarity.RARE, mage.cards.p.PhyrexianRebirth.class)); - cards.add(new SetCardInfo("Plaguecrafter", 126, Rarity.UNCOMMON, mage.cards.p.Plaguecrafter.class)); - cards.add(new SetCardInfo("Plains", 288, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Prairie Stream", 265, Rarity.RARE, mage.cards.p.PrairieStream.class)); - cards.add(new SetCardInfo("Pramikon, Sky Rampart", 47, Rarity.MYTHIC, mage.cards.p.PramikonSkyRampart.class)); - cards.add(new SetCardInfo("Prismatic Strands", 69, Rarity.COMMON, mage.cards.p.PrismaticStrands.class)); - cards.add(new SetCardInfo("Pristine Angel", 70, Rarity.MYTHIC, mage.cards.p.PristineAngel.class)); - cards.add(new SetCardInfo("Pristine Skywise", 196, Rarity.RARE, mage.cards.p.PristineSkywise.class)); - cards.add(new SetCardInfo("Purify the Grave", 71, Rarity.UNCOMMON, mage.cards.p.PurifyTheGrave.class)); - cards.add(new SetCardInfo("Putrefy", 197, Rarity.UNCOMMON, mage.cards.p.Putrefy.class)); - cards.add(new SetCardInfo("Rakdos Carnarium", 266, Rarity.COMMON, mage.cards.r.RakdosCarnarium.class)); - cards.add(new SetCardInfo("Rakdos Guildgate", 267, Rarity.COMMON, mage.cards.r.RakdosGuildgate.class)); - cards.add(new SetCardInfo("Rakdos Locket", 220, Rarity.COMMON, mage.cards.r.RakdosLocket.class)); - cards.add(new SetCardInfo("Ral Zarek", 198, Rarity.MYTHIC, mage.cards.r.RalZarek.class)); - cards.add(new SetCardInfo("Rampaging Baloths", 176, Rarity.RARE, mage.cards.r.RampagingBaloths.class)); - cards.add(new SetCardInfo("Ray of Distortion", 72, Rarity.COMMON, mage.cards.r.RayOfDistortion.class)); - cards.add(new SetCardInfo("Rayami, First of the Fallen", 48, Rarity.MYTHIC, mage.cards.r.RayamiFirstOfTheFallen.class)); - cards.add(new SetCardInfo("Reality Shift", 92, Rarity.UNCOMMON, mage.cards.r.RealityShift.class)); - cards.add(new SetCardInfo("Refuse // Cooperate", 199, Rarity.RARE, mage.cards.r.RefuseCooperate.class)); - cards.add(new SetCardInfo("Reliquary Tower", 268, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class)); - cards.add(new SetCardInfo("River Kelpie", 93, Rarity.RARE, mage.cards.r.RiverKelpie.class)); - cards.add(new SetCardInfo("Rix Maadi, Dungeon Palace", 269, Rarity.UNCOMMON, mage.cards.r.RixMaadiDungeonPalace.class)); - cards.add(new SetCardInfo("Road of Return", 34, Rarity.RARE, mage.cards.r.RoadOfReturn.class)); - cards.add(new SetCardInfo("Roc Egg", 73, Rarity.UNCOMMON, mage.cards.r.RocEgg.class)); - cards.add(new SetCardInfo("Rogue's Passage", 270, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class)); - cards.add(new SetCardInfo("Rolling Temblor", 151, Rarity.UNCOMMON, mage.cards.r.RollingTemblor.class)); - cards.add(new SetCardInfo("Rootborn Defenses", 74, Rarity.COMMON, mage.cards.r.RootbornDefenses.class)); - cards.add(new SetCardInfo("Rugged Highlands", 271, Rarity.COMMON, mage.cards.r.RuggedHighlands.class)); - cards.add(new SetCardInfo("Runic Repetition", 94, Rarity.UNCOMMON, mage.cards.r.RunicRepetition.class)); - cards.add(new SetCardInfo("Sagu Mauler", 200, Rarity.RARE, mage.cards.s.SaguMauler.class)); - cards.add(new SetCardInfo("Sakura-Tribe Elder", 177, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class)); - cards.add(new SetCardInfo("Sanctum of Eternity", 59, Rarity.RARE, mage.cards.s.SanctumOfEternity.class)); - cards.add(new SetCardInfo("Sanitarium Skeleton", 127, Rarity.COMMON, mage.cards.s.SanitariumSkeleton.class)); - cards.add(new SetCardInfo("Scaretiller", 57, Rarity.COMMON, mage.cards.s.Scaretiller.class)); - cards.add(new SetCardInfo("Scroll of Fate", 58, Rarity.RARE, mage.cards.s.ScrollOfFate.class)); - cards.add(new SetCardInfo("Second Harvest", 178, Rarity.RARE, mage.cards.s.SecondHarvest.class)); - cards.add(new SetCardInfo("Secret Plans", 201, Rarity.UNCOMMON, mage.cards.s.SecretPlans.class)); - cards.add(new SetCardInfo("Secrets of the Dead", 95, Rarity.UNCOMMON, mage.cards.s.SecretsOfTheDead.class)); - cards.add(new SetCardInfo("Seedborn Muse", 179, Rarity.RARE, mage.cards.s.SeedbornMuse.class)); - cards.add(new SetCardInfo("Selesnya Eulogist", 35, Rarity.RARE, mage.cards.s.SelesnyaEulogist.class)); - cards.add(new SetCardInfo("Selesnya Sanctuary", 272, Rarity.COMMON, mage.cards.s.SelesnyaSanctuary.class)); - cards.add(new SetCardInfo("Sevinne's Reclamation", 5, Rarity.RARE, mage.cards.s.SevinnesReclamation.class)); - cards.add(new SetCardInfo("Sevinne, the Chronoclasm", 49, Rarity.MYTHIC, mage.cards.s.SevinneTheChronoclasm.class)); - cards.add(new SetCardInfo("Shamanic Revelation", 180, Rarity.RARE, mage.cards.s.ShamanicRevelation.class)); - cards.add(new SetCardInfo("Shrine of the Forsaken Gods", 273, Rarity.RARE, mage.cards.s.ShrineOfTheForsakenGods.class)); - cards.add(new SetCardInfo("Silumgar Assassin", 128, Rarity.RARE, mage.cards.s.SilumgarAssassin.class)); - cards.add(new SetCardInfo("Simic Growth Chamber", 274, Rarity.UNCOMMON, mage.cards.s.SimicGrowthChamber.class)); - cards.add(new SetCardInfo("Simic Guildgate", 275, Rarity.COMMON, mage.cards.s.SimicGuildgate.class)); - cards.add(new SetCardInfo("Skinthinner", 129, Rarity.COMMON, mage.cards.s.Skinthinner.class)); - cards.add(new SetCardInfo("Skyfire Phoenix", 28, Rarity.RARE, mage.cards.s.SkyfirePhoenix.class)); - cards.add(new SetCardInfo("Slice in Twain", 181, Rarity.UNCOMMON, mage.cards.s.SliceInTwain.class)); - cards.add(new SetCardInfo("Sol Ring", 221, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); - cards.add(new SetCardInfo("Solemn Simulacrum", 222, Rarity.RARE, mage.cards.s.SolemnSimulacrum.class)); - cards.add(new SetCardInfo("Song of the Worldsoul", 6, Rarity.RARE, mage.cards.s.SongOfTheWorldsoul.class)); - cards.add(new SetCardInfo("Soul Foundry", 223, Rarity.RARE, mage.cards.s.SoulFoundry.class)); - cards.add(new SetCardInfo("Soul of Innistrad", 130, Rarity.MYTHIC, mage.cards.s.SoulOfInnistrad.class)); - cards.add(new SetCardInfo("Soul of Zendikar", 182, Rarity.MYTHIC, mage.cards.s.SoulOfZendikar.class)); - cards.add(new SetCardInfo("Squee, Goblin Nabob", 152, Rarity.RARE, mage.cards.s.SqueeGoblinNabob.class)); - cards.add(new SetCardInfo("Stone Quarry", 276, Rarity.UNCOMMON, mage.cards.s.StoneQuarry.class)); - cards.add(new SetCardInfo("Storm Herd", 75, Rarity.RARE, mage.cards.s.StormHerd.class)); - cards.add(new SetCardInfo("Stratus Dancer", 96, Rarity.RARE, mage.cards.s.StratusDancer.class)); - cards.add(new SetCardInfo("Strionic Resonator", 224, Rarity.RARE, mage.cards.s.StrionicResonator.class)); - cards.add(new SetCardInfo("Stromkirk Occultist", 153, Rarity.RARE, mage.cards.s.StromkirkOccultist.class)); - cards.add(new SetCardInfo("Sudden Substitution", 11, Rarity.RARE, mage.cards.s.SuddenSubstitution.class)); - cards.add(new SetCardInfo("Sultai Charm", 202, Rarity.UNCOMMON, mage.cards.s.SultaiCharm.class)); - cards.add(new SetCardInfo("Sun Titan", 76, Rarity.MYTHIC, mage.cards.s.SunTitan.class)); - cards.add(new SetCardInfo("Sundering Growth", 203, Rarity.COMMON, mage.cards.s.SunderingGrowth.class)); - cards.add(new SetCardInfo("Sungrass Prairie", 277, Rarity.RARE, mage.cards.s.SungrassPrairie.class)); - cards.add(new SetCardInfo("Sunken Hollow", 278, Rarity.RARE, mage.cards.s.SunkenHollow.class)); - cards.add(new SetCardInfo("Swamp", 294, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swiftwater Cliffs", 279, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); - cards.add(new SetCardInfo("Tahngarth, First Mate", 50, Rarity.RARE, mage.cards.t.TahngarthFirstMate.class)); - cards.add(new SetCardInfo("Talrand, Sky Summoner", 97, Rarity.RARE, mage.cards.t.TalrandSkySummoner.class)); - cards.add(new SetCardInfo("Tectonic Hellion", 29, Rarity.RARE, mage.cards.t.TectonicHellion.class)); - cards.add(new SetCardInfo("Temple of the False God", 280, Rarity.UNCOMMON, mage.cards.t.TempleOfTheFalseGod.class)); - cards.add(new SetCardInfo("Tempt with Discovery", 183, Rarity.RARE, mage.cards.t.TemptWithDiscovery.class)); - cards.add(new SetCardInfo("Terramorphic Expanse", 281, Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class)); - cards.add(new SetCardInfo("Tezzeret's Gambit", 98, Rarity.UNCOMMON, mage.cards.t.TezzeretsGambit.class)); - cards.add(new SetCardInfo("Thalia's Geistcaller", 7, Rarity.RARE, mage.cards.t.ThaliasGeistcaller.class)); - cards.add(new SetCardInfo("The Eldest Reborn", 131, Rarity.UNCOMMON, mage.cards.t.TheEldestReborn.class)); - cards.add(new SetCardInfo("Thelonite Hermit", 184, Rarity.RARE, mage.cards.t.TheloniteHermit.class)); - cards.add(new SetCardInfo("Thespian's Stage", 282, Rarity.RARE, mage.cards.t.ThespiansStage.class)); - cards.add(new SetCardInfo("Thieving Amalgam", 21, Rarity.RARE, mage.cards.t.ThievingAmalgam.class)); - cards.add(new SetCardInfo("Think Twice", 99, Rarity.COMMON, mage.cards.t.ThinkTwice.class)); - cards.add(new SetCardInfo("Thornwood Falls", 283, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class)); - cards.add(new SetCardInfo("Thought Sponge", 12, Rarity.RARE, mage.cards.t.ThoughtSponge.class)); - cards.add(new SetCardInfo("Thousand Winds", 100, Rarity.RARE, mage.cards.t.ThousandWinds.class)); - cards.add(new SetCardInfo("Thragtusk", 185, Rarity.RARE, mage.cards.t.Thragtusk.class)); - cards.add(new SetCardInfo("Thran Dynamo", 225, Rarity.UNCOMMON, mage.cards.t.ThranDynamo.class)); - cards.add(new SetCardInfo("Trail of Mystery", 186, Rarity.RARE, mage.cards.t.TrailOfMystery.class)); - cards.add(new SetCardInfo("Tranquil Cove", 284, Rarity.COMMON, mage.cards.t.TranquilCove.class)); - cards.add(new SetCardInfo("Trostani's Judgment", 77, Rarity.COMMON, mage.cards.t.TrostanisJudgment.class)); - cards.add(new SetCardInfo("Trostani, Selesnya's Voice", 204, Rarity.MYTHIC, mage.cards.t.TrostaniSelesnyasVoice.class)); - cards.add(new SetCardInfo("Urban Evolution", 205, Rarity.UNCOMMON, mage.cards.u.UrbanEvolution.class)); - cards.add(new SetCardInfo("Vesuvan Shapeshifter", 101, Rarity.RARE, mage.cards.v.VesuvanShapeshifter.class)); - cards.add(new SetCardInfo("Violent Eruption", 154, Rarity.UNCOMMON, mage.cards.v.ViolentEruption.class)); - cards.add(new SetCardInfo("Vitu-Ghazi Guildmage", 206, Rarity.UNCOMMON, mage.cards.v.VituGhaziGuildmage.class)); - cards.add(new SetCardInfo("Voice of Many", 36, Rarity.UNCOMMON, mage.cards.v.VoiceOfMany.class)); - cards.add(new SetCardInfo("Volrath, the Shapestealer", 51, Rarity.MYTHIC, mage.cards.v.VolrathTheShapestealer.class)); - cards.add(new SetCardInfo("Vraska the Unseen", 207, Rarity.MYTHIC, mage.cards.v.VraskaTheUnseen.class)); - cards.add(new SetCardInfo("Wall of Stolen Identity", 13, Rarity.RARE, mage.cards.w.WallOfStolenIdentity.class)); - cards.add(new SetCardInfo("Warstorm Surge", 155, Rarity.RARE, mage.cards.w.WarstormSurge.class)); - cards.add(new SetCardInfo("Wayfaring Temple", 208, Rarity.RARE, mage.cards.w.WayfaringTemple.class)); - cards.add(new SetCardInfo("Wildfire Devils", 30, Rarity.RARE, mage.cards.w.WildfireDevils.class)); - cards.add(new SetCardInfo("Willbender", 102, Rarity.UNCOMMON, mage.cards.w.Willbender.class)); - cards.add(new SetCardInfo("Wind-Scarred Crag", 285, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); - cards.add(new SetCardInfo("Wingmate Roc", 78, Rarity.MYTHIC, mage.cards.w.WingmateRoc.class)); - cards.add(new SetCardInfo("Woodland Stream", 286, Rarity.COMMON, mage.cards.w.WoodlandStream.class)); - cards.add(new SetCardInfo("Yavimaya Coast", 287, Rarity.RARE, mage.cards.y.YavimayaCoast.class)); - cards.add(new SetCardInfo("Zetalpa, Primal Dawn", 79, Rarity.RARE, mage.cards.z.ZetalpaPrimalDawn.class)); - cards.add(new SetCardInfo("Zombie Infestation", 132, Rarity.UNCOMMON, mage.cards.z.ZombieInfestation.class)); - } -} +package mage.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * @author TheElk801 + */ +public final class Commander2019Edition extends ExpansionSet { + + private static final Commander2019Edition instance = new Commander2019Edition(); + + public static Commander2019Edition getInstance() { + return instance; + } + + private Commander2019Edition() { + super("Commander 2019 Edition", "C19", ExpansionSet.buildDate(2019, 8, 23), SetType.SUPPLEMENTAL); + this.blockName = "Command Zone"; + + cards.add(new SetCardInfo("Ainok Survivalist", 156, Rarity.COMMON, mage.cards.a.AinokSurvivalist.class)); + cards.add(new SetCardInfo("Akoum Refuge", 226, Rarity.UNCOMMON, mage.cards.a.AkoumRefuge.class)); + cards.add(new SetCardInfo("Alchemist's Greeting", 133, Rarity.COMMON, mage.cards.a.AlchemistsGreeting.class)); + cards.add(new SetCardInfo("Angel of Sanctions", 61, Rarity.MYTHIC, mage.cards.a.AngelOfSanctions.class)); + cards.add(new SetCardInfo("Anje Falkenrath", 37, Rarity.MYTHIC, mage.cards.a.AnjeFalkenrath.class)); + cards.add(new SetCardInfo("Anje's Ravager", 22, Rarity.RARE, mage.cards.a.AnjesRavager.class)); + cards.add(new SetCardInfo("Apex Altisaur", 31, Rarity.RARE, mage.cards.a.ApexAltisaur.class)); + cards.add(new SetCardInfo("Archfiend of Spite", 14, Rarity.RARE, mage.cards.a.ArchfiendOfSpite.class)); + cards.add(new SetCardInfo("Armillary Sphere", 209, Rarity.COMMON, mage.cards.a.ArmillarySphere.class)); + cards.add(new SetCardInfo("Ash Barrens", 227, Rarity.COMMON, mage.cards.a.AshBarrens.class)); + cards.add(new SetCardInfo("Asylum Visitor", 103, Rarity.RARE, mage.cards.a.AsylumVisitor.class)); + cards.add(new SetCardInfo("Atla Palani, Nest Tender", 38, Rarity.MYTHIC, mage.cards.a.AtlaPalaniNestTender.class)); + cards.add(new SetCardInfo("Avacyn's Judgment", 134, Rarity.RARE, mage.cards.a.AvacynsJudgment.class)); + cards.add(new SetCardInfo("Azorius Chancery", 228, Rarity.UNCOMMON, mage.cards.a.AzoriusChancery.class)); + cards.add(new SetCardInfo("Azorius Locket", 210, Rarity.COMMON, mage.cards.a.AzoriusLocket.class)); + cards.add(new SetCardInfo("Backdraft Hellkite", 23, Rarity.RARE, mage.cards.b.BackdraftHellkite.class)); + cards.add(new SetCardInfo("Bane of the Living", 104, Rarity.RARE, mage.cards.b.BaneOfTheLiving.class)); + cards.add(new SetCardInfo("Barren Moor", 229, Rarity.UNCOMMON, mage.cards.b.BarrenMoor.class)); + cards.add(new SetCardInfo("Beacon of Unrest", 105, Rarity.RARE, mage.cards.b.BeaconOfUnrest.class)); + cards.add(new SetCardInfo("Beast Within", 157, Rarity.UNCOMMON, mage.cards.b.BeastWithin.class)); + cards.add(new SetCardInfo("Big Game Hunter", 106, Rarity.UNCOMMON, mage.cards.b.BigGameHunter.class)); + cards.add(new SetCardInfo("Biomass Mutation", 187, Rarity.RARE, mage.cards.b.BiomassMutation.class)); + cards.add(new SetCardInfo("Bloodfell Caves", 230, Rarity.COMMON, mage.cards.b.BloodfellCaves.class)); + cards.add(new SetCardInfo("Bloodhall Priest", 188, Rarity.RARE, mage.cards.b.BloodhallPriest.class)); + cards.add(new SetCardInfo("Bloodthirsty Blade", 53, Rarity.UNCOMMON, mage.cards.b.BloodthirstyBlade.class)); + cards.add(new SetCardInfo("Blossoming Sands", 231, Rarity.COMMON, mage.cards.b.BlossomingSands.class)); + cards.add(new SetCardInfo("Bojuka Bog", 232, Rarity.COMMON, mage.cards.b.BojukaBog.class)); + cards.add(new SetCardInfo("Bone Miser", 15, Rarity.RARE, mage.cards.b.BoneMiser.class)); + cards.add(new SetCardInfo("Boneyard Parley", 107, Rarity.MYTHIC, mage.cards.b.BoneyardParley.class)); + cards.add(new SetCardInfo("Boros Garrison", 233, Rarity.COMMON, mage.cards.b.BorosGarrison.class)); + cards.add(new SetCardInfo("Boros Guildgate", 234, Rarity.COMMON, mage.cards.b.BorosGuildgate.class)); + cards.add(new SetCardInfo("Bounty of the Luxa", 189, Rarity.RARE, mage.cards.b.BountyOfTheLuxa.class)); + cards.add(new SetCardInfo("Burning Vengeance", 135, Rarity.UNCOMMON, mage.cards.b.BurningVengeance.class)); + cards.add(new SetCardInfo("Burnished Hart", 211, Rarity.UNCOMMON, mage.cards.b.BurnishedHart.class)); + cards.add(new SetCardInfo("Call to the Netherworld", 108, Rarity.COMMON, mage.cards.c.CallToTheNetherworld.class)); + cards.add(new SetCardInfo("Champion of Stray Souls", 109, Rarity.MYTHIC, mage.cards.c.ChampionOfStraySouls.class)); + cards.add(new SetCardInfo("Chaos Warp", 136, Rarity.RARE, mage.cards.c.ChaosWarp.class)); + cards.add(new SetCardInfo("Chemister's Insight", 80, Rarity.UNCOMMON, mage.cards.c.ChemistersInsight.class)); + cards.add(new SetCardInfo("Chromeshell Crab", 81, Rarity.RARE, mage.cards.c.ChromeshellCrab.class)); + cards.add(new SetCardInfo("Cinder Barrens", 235, Rarity.COMMON, mage.cards.c.CinderBarrens.class)); + cards.add(new SetCardInfo("Cinder Glade", 236, Rarity.RARE, mage.cards.c.CinderGlade.class)); + cards.add(new SetCardInfo("Clever Impersonator", 82, Rarity.MYTHIC, mage.cards.c.CleverImpersonator.class)); + cards.add(new SetCardInfo("Cliffside Rescuer", 1, Rarity.UNCOMMON, mage.cards.c.CliffsideRescuer.class)); + cards.add(new SetCardInfo("Colossal Majesty", 158, Rarity.UNCOMMON, mage.cards.c.ColossalMajesty.class)); + cards.add(new SetCardInfo("Command Tower", 237, Rarity.COMMON, mage.cards.c.CommandTower.class)); + cards.add(new SetCardInfo("Commander's Insignia", 2, Rarity.RARE, mage.cards.c.CommandersInsignia.class)); + cards.add(new SetCardInfo("Commander's Sphere", 212, Rarity.COMMON, mage.cards.c.CommandersSphere.class)); + cards.add(new SetCardInfo("Crackling Drake", 190, Rarity.UNCOMMON, mage.cards.c.CracklingDrake.class)); + cards.add(new SetCardInfo("Cultivate", 159, Rarity.COMMON, mage.cards.c.Cultivate.class)); + cards.add(new SetCardInfo("Curse of Fool's Wisdom", 16, Rarity.RARE, mage.cards.c.CurseOfFoolsWisdom.class)); + cards.add(new SetCardInfo("Dark Withering", 110, Rarity.COMMON, mage.cards.d.DarkWithering.class)); + cards.add(new SetCardInfo("Darkwater Catacombs", 238, Rarity.RARE, mage.cards.d.DarkwaterCatacombs.class)); + cards.add(new SetCardInfo("Deathmist Raptor", 160, Rarity.MYTHIC, mage.cards.d.DeathmistRaptor.class)); + cards.add(new SetCardInfo("Deep Analysis", 83, Rarity.COMMON, mage.cards.d.DeepAnalysis.class)); + cards.add(new SetCardInfo("Den Protector", 161, Rarity.RARE, mage.cards.d.DenProtector.class)); + cards.add(new SetCardInfo("Desolation Twin", 60, Rarity.RARE, mage.cards.d.DesolationTwin.class)); + cards.add(new SetCardInfo("Desperate Ravings", 137, Rarity.UNCOMMON, mage.cards.d.DesperateRavings.class)); + cards.add(new SetCardInfo("Devil's Play", 138, Rarity.RARE, mage.cards.d.DevilsPlay.class)); + cards.add(new SetCardInfo("Dimir Aqueduct", 239, Rarity.UNCOMMON, mage.cards.d.DimirAqueduct.class)); + cards.add(new SetCardInfo("Divine Reckoning", 62, Rarity.RARE, mage.cards.d.DivineReckoning.class)); + cards.add(new SetCardInfo("Dockside Extortionist", 24, Rarity.RARE, mage.cards.d.DocksideExtortionist.class)); + cards.add(new SetCardInfo("Doomed Artisan", 3, Rarity.RARE, mage.cards.d.DoomedArtisan.class)); + cards.add(new SetCardInfo("Dusk // Dawn", 63, Rarity.RARE, mage.cards.d.DuskDawn.class)); + cards.add(new SetCardInfo("Doomed Necromancer", 111, Rarity.RARE, mage.cards.d.DoomedNecromancer.class)); + cards.add(new SetCardInfo("Dragonmaster Outcast", 139, Rarity.MYTHIC, mage.cards.d.DragonmasterOutcast.class)); + cards.add(new SetCardInfo("Drownyard Temple", 240, Rarity.RARE, mage.cards.d.DrownyardTemple.class)); + cards.add(new SetCardInfo("Druid's Deliverance", 162, Rarity.COMMON, mage.cards.d.DruidsDeliverance.class)); + cards.add(new SetCardInfo("Echoing Truth", 84, Rarity.COMMON, mage.cards.e.EchoingTruth.class)); + cards.add(new SetCardInfo("Elemental Bond", 163, Rarity.UNCOMMON, mage.cards.e.ElementalBond.class)); + cards.add(new SetCardInfo("Elsha of the Infinite", 40, Rarity.MYTHIC, mage.cards.e.ElshaOfTheInfinite.class)); + cards.add(new SetCardInfo("Emmara Tandris", 191, Rarity.RARE, mage.cards.e.EmmaraTandris.class)); + cards.add(new SetCardInfo("Empowered Autogenerator", 54, Rarity.RARE, mage.cards.e.EmpoweredAutogenerator.class)); + cards.add(new SetCardInfo("Evolving Wilds", 241, Rarity.COMMON, mage.cards.e.EvolvingWilds.class)); + cards.add(new SetCardInfo("Exotic Orchard", 242, Rarity.RARE, mage.cards.e.ExoticOrchard.class)); + cards.add(new SetCardInfo("Explore", 164, Rarity.COMMON, mage.cards.e.Explore.class)); + cards.add(new SetCardInfo("Fact or Fiction", 85, Rarity.UNCOMMON, mage.cards.f.FactOrFiction.class)); + cards.add(new SetCardInfo("Faith of the Devoted", 112, Rarity.UNCOMMON, mage.cards.f.FaithOfTheDevoted.class)); + cards.add(new SetCardInfo("Faithless Looting", 140, Rarity.COMMON, mage.cards.f.FaithlessLooting.class)); + cards.add(new SetCardInfo("Farm // Market", 192, Rarity.UNCOMMON, mage.cards.f.FarmMarket.class)); + cards.add(new SetCardInfo("Farseek", 165, Rarity.COMMON, mage.cards.f.Farseek.class)); + cards.add(new SetCardInfo("Feldon of the Third Path", 141, Rarity.MYTHIC, mage.cards.f.FeldonOfTheThirdPath.class)); + cards.add(new SetCardInfo("Fervent Denial", 86, Rarity.UNCOMMON, mage.cards.f.FerventDenial.class)); + cards.add(new SetCardInfo("Fiery Temper", 142, Rarity.COMMON, mage.cards.f.FieryTemper.class)); + cards.add(new SetCardInfo("Flamerush Rider", 143, Rarity.RARE, mage.cards.f.FlamerushRider.class)); + cards.add(new SetCardInfo("Flayer of the Hatebound", 144, Rarity.RARE, mage.cards.f.FlayerOfTheHatebound.class)); + cards.add(new SetCardInfo("Forest", 300, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forgotten Cave", 243, Rarity.COMMON, mage.cards.f.ForgottenCave.class)); + cards.add(new SetCardInfo("Foul Orchard", 244, Rarity.UNCOMMON, mage.cards.f.FoulOrchard.class)); + cards.add(new SetCardInfo("Fresh Meat", 166, Rarity.RARE, mage.cards.f.FreshMeat.class)); + cards.add(new SetCardInfo("From Under the Floorboards", 113, Rarity.RARE, mage.cards.f.FromUnderTheFloorboards.class)); + cards.add(new SetCardInfo("Full Flowering", 32, Rarity.RARE, mage.cards.f.FullFlowering.class)); + cards.add(new SetCardInfo("Gargoyle Castle", 245, Rarity.RARE, mage.cards.g.GargoyleCastle.class)); + cards.add(new SetCardInfo("Garruk's Packleader", 168, Rarity.UNCOMMON, mage.cards.g.GarruksPackleader.class)); + cards.add(new SetCardInfo("Garruk, Primal Hunter", 167, Rarity.MYTHIC, mage.cards.g.GarrukPrimalHunter.class)); + cards.add(new SetCardInfo("Geier Reach Sanitarium", 246, Rarity.RARE, mage.cards.g.GeierReachSanitarium.class)); + cards.add(new SetCardInfo("Gerrard, Weatherlight Hero", 41, Rarity.RARE, mage.cards.g.GerrardWeatherlightHero.class)); + cards.add(new SetCardInfo("Geth, Lord of the Vault", 114, Rarity.MYTHIC, mage.cards.g.GethLordOfTheVault.class)); + cards.add(new SetCardInfo("Ghastly Conscription", 115, Rarity.MYTHIC, mage.cards.g.GhastlyConscription.class)); + cards.add(new SetCardInfo("Ghired's Belligerence", 25, Rarity.RARE, mage.cards.g.GhiredsBelligerence.class)); + cards.add(new SetCardInfo("Ghired, Conclave Exile", 42, Rarity.MYTHIC, mage.cards.g.GhiredConclaveExile.class)); + cards.add(new SetCardInfo("Ghostly Prison", 64, Rarity.UNCOMMON, mage.cards.g.GhostlyPrison.class)); + cards.add(new SetCardInfo("Giant Adephage", 169, Rarity.MYTHIC, mage.cards.g.GiantAdephage.class)); + cards.add(new SetCardInfo("Gift of Doom", 17, Rarity.RARE, mage.cards.g.GiftOfDoom.class)); + cards.add(new SetCardInfo("Golgari Guildgate", 247, Rarity.COMMON, mage.cards.g.GolgariGuildgate.class)); + cards.add(new SetCardInfo("Golgari Rot Farm", 248, Rarity.UNCOMMON, mage.cards.g.GolgariRotFarm.class)); + cards.add(new SetCardInfo("Gorgon Recluse", 116, Rarity.COMMON, mage.cards.g.GorgonRecluse.class)); + cards.add(new SetCardInfo("Grave Scrabbler", 117, Rarity.COMMON, mage.cards.g.GraveScrabbler.class)); + cards.add(new SetCardInfo("Graypelt Refuge", 249, Rarity.UNCOMMON, mage.cards.g.GraypeltRefuge.class)); + cards.add(new SetCardInfo("Great Oak Guardian", 170, Rarity.UNCOMMON, mage.cards.g.GreatOakGuardian.class)); + cards.add(new SetCardInfo("Greven, Predator Captain", 43, Rarity.MYTHIC, mage.cards.g.GrevenPredatorCaptain.class)); + cards.add(new SetCardInfo("Grim Haruspex", 118, Rarity.RARE, mage.cards.g.GrimHaruspex.class)); + cards.add(new SetCardInfo("Grimoire of the Dead", 213, Rarity.MYTHIC, mage.cards.g.GrimoireOfTheDead.class)); + cards.add(new SetCardInfo("Grismold, the Dreadsower", 44, Rarity.RARE, mage.cards.g.GrismoldTheDreadsower.class)); + cards.add(new SetCardInfo("Growing Ranks", 193, Rarity.RARE, mage.cards.g.GrowingRanks.class)); + cards.add(new SetCardInfo("Gruul Turf", 250, Rarity.UNCOMMON, mage.cards.g.GruulTurf.class)); + cards.add(new SetCardInfo("Guttersnipe", 145, Rarity.UNCOMMON, mage.cards.g.Guttersnipe.class)); + cards.add(new SetCardInfo("Harmonize", 171, Rarity.UNCOMMON, mage.cards.h.Harmonize.class)); + cards.add(new SetCardInfo("Hate Mirage", 26, Rarity.UNCOMMON, mage.cards.h.HateMirage.class)); + cards.add(new SetCardInfo("Heart-Piercer Manticore", 146, Rarity.RARE, mage.cards.h.HeartPiercerManticore.class)); + cards.add(new SetCardInfo("Hedonist's Trove", 119, Rarity.RARE, mage.cards.h.HedonistsTrove.class)); + cards.add(new SetCardInfo("Hedron Archive", 214, Rarity.UNCOMMON, mage.cards.h.HedronArchive.class)); + cards.add(new SetCardInfo("Hex", 120, Rarity.RARE, mage.cards.h.Hex.class)); + cards.add(new SetCardInfo("Highland Lake", 251, Rarity.UNCOMMON, mage.cards.h.HighlandLake.class)); + cards.add(new SetCardInfo("Hooded Hydra", 172, Rarity.MYTHIC, mage.cards.h.HoodedHydra.class)); + cards.add(new SetCardInfo("Hour of Reckoning", 65, Rarity.RARE, mage.cards.h.HourOfReckoning.class)); + cards.add(new SetCardInfo("Icefeather Aven", 194, Rarity.UNCOMMON, mage.cards.i.IcefeatherAven.class)); + cards.add(new SetCardInfo("Idol of Oblivion", 55, Rarity.RARE, mage.cards.i.IdolOfOblivion.class)); + cards.add(new SetCardInfo("Ignite the Future", 27, Rarity.RARE, mage.cards.i.IgniteTheFuture.class)); + cards.add(new SetCardInfo("In Garruk's Wake", 121, Rarity.RARE, mage.cards.i.InGarruksWake.class)); + cards.add(new SetCardInfo("Increasing Devotion", 66, Rarity.RARE, mage.cards.i.IncreasingDevotion.class)); + cards.add(new SetCardInfo("Increasing Vengeance", 147, Rarity.RARE, mage.cards.i.IncreasingVengeance.class)); + cards.add(new SetCardInfo("Intangible Virtue", 67, Rarity.UNCOMMON, mage.cards.i.IntangibleVirtue.class)); + cards.add(new SetCardInfo("Island", 291, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Ixidron", 87, Rarity.RARE, mage.cards.i.Ixidron.class)); + cards.add(new SetCardInfo("Izzet Boilerworks", 252, Rarity.UNCOMMON, mage.cards.i.IzzetBoilerworks.class)); + cards.add(new SetCardInfo("Izzet Guildgate", 253, Rarity.COMMON, mage.cards.i.IzzetGuildgate.class)); + cards.add(new SetCardInfo("Izzet Locket", 215, Rarity.COMMON, mage.cards.i.IzzetLocket.class)); + cards.add(new SetCardInfo("Jace's Sanctum", 88, Rarity.RARE, mage.cards.j.JacesSanctum.class)); + cards.add(new SetCardInfo("Jungle Hollow", 254, Rarity.COMMON, mage.cards.j.JungleHollow.class)); + cards.add(new SetCardInfo("Jungle Shrine", 255, Rarity.UNCOMMON, mage.cards.j.JungleShrine.class)); + cards.add(new SetCardInfo("K'rrik, Son of Yawgmoth", 18, Rarity.RARE, mage.cards.k.KrrikSonOfYawgmoth.class)); + cards.add(new SetCardInfo("Kadena's Silencer", 8, Rarity.RARE, mage.cards.k.KadenasSilencer.class)); + cards.add(new SetCardInfo("Kadena, Slinking Sorcerer", 45, Rarity.MYTHIC, mage.cards.k.KadenaSlinkingSorcerer.class)); + cards.add(new SetCardInfo("Kazandu Refuge", 256, Rarity.UNCOMMON, mage.cards.k.KazanduRefuge.class)); + cards.add(new SetCardInfo("Key to the City", 216, Rarity.RARE, mage.cards.k.KeyToTheCity.class)); + cards.add(new SetCardInfo("Kheru Spellsnatcher", 89, Rarity.RARE, mage.cards.k.KheruSpellsnatcher.class)); + cards.add(new SetCardInfo("Krosan Verge", 257, Rarity.UNCOMMON, mage.cards.k.KrosanVerge.class)); + cards.add(new SetCardInfo("Leadership Vacuum", 9, Rarity.UNCOMMON, mage.cards.l.LeadershipVacuum.class)); + cards.add(new SetCardInfo("Lightning Greaves", 217, Rarity.UNCOMMON, mage.cards.l.LightningGreaves.class)); + cards.add(new SetCardInfo("Llanowar Wastes", 258, Rarity.RARE, mage.cards.l.LlanowarWastes.class)); + cards.add(new SetCardInfo("Magmaquake", 148, Rarity.RARE, mage.cards.m.Magmaquake.class)); + cards.add(new SetCardInfo("Magus of the Wheel", 149, Rarity.RARE, mage.cards.m.MagusOfTheWheel.class)); + cards.add(new SetCardInfo("Malevolent Whispers", 150, Rarity.UNCOMMON, mage.cards.m.MalevolentWhispers.class)); + cards.add(new SetCardInfo("Marisi, Breaker of the Coil", 46, Rarity.MYTHIC, mage.cards.m.MarisiBreakerOfTheCoil.class)); + cards.add(new SetCardInfo("Mass Diminish", 10, Rarity.RARE, mage.cards.m.MassDiminish.class)); + cards.add(new SetCardInfo("Memorial to Folly", 259, Rarity.UNCOMMON, mage.cards.m.MemorialToFolly.class)); + cards.add(new SetCardInfo("Meteor Golem", 218, Rarity.UNCOMMON, mage.cards.m.MeteorGolem.class)); + cards.add(new SetCardInfo("Mimic Vat", 219, Rarity.RARE, mage.cards.m.MimicVat.class)); + cards.add(new SetCardInfo("Mire in Misery", 19, Rarity.UNCOMMON, mage.cards.m.MireInMisery.class)); + cards.add(new SetCardInfo("Momentous Fall", 173, Rarity.RARE, mage.cards.m.MomentousFall.class)); + cards.add(new SetCardInfo("Mortuary Mire", 260, Rarity.COMMON, mage.cards.m.MortuaryMire.class)); + cards.add(new SetCardInfo("Mountain", 297, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Murderous Compulsion", 122, Rarity.COMMON, mage.cards.m.MurderousCompulsion.class)); + cards.add(new SetCardInfo("Myriad Landscape", 261, Rarity.UNCOMMON, mage.cards.m.MyriadLandscape.class)); + cards.add(new SetCardInfo("Mystic Monastery", 262, Rarity.UNCOMMON, mage.cards.m.MysticMonastery.class)); + cards.add(new SetCardInfo("Mystic Retrieval", 90, Rarity.UNCOMMON, mage.cards.m.MysticRetrieval.class)); + cards.add(new SetCardInfo("Nantuko Vigilante", 174, Rarity.COMMON, mage.cards.n.NantukoVigilante.class)); + cards.add(new SetCardInfo("Naya Charm", 195, Rarity.UNCOMMON, mage.cards.n.NayaCharm.class)); + cards.add(new SetCardInfo("Naya Panorama", 263, Rarity.COMMON, mage.cards.n.NayaPanorama.class)); + cards.add(new SetCardInfo("Nightmare Unmaking", 20, Rarity.RARE, mage.cards.n.NightmareUnmaking.class)); + cards.add(new SetCardInfo("Nightshade Assassin", 123, Rarity.UNCOMMON, mage.cards.n.NightshadeAssassin.class)); + cards.add(new SetCardInfo("Ob Nixilis Reignited", 124, Rarity.MYTHIC, mage.cards.o.ObNixilisReignited.class)); + cards.add(new SetCardInfo("Ohran Frostfang", 33, Rarity.RARE, mage.cards.o.OhranFrostfang.class)); + cards.add(new SetCardInfo("Oona's Grace", 91, Rarity.COMMON, mage.cards.o.OonasGrace.class)); + cards.add(new SetCardInfo("Opulent Palace", 264, Rarity.UNCOMMON, mage.cards.o.OpulentPalace.class)); + cards.add(new SetCardInfo("Overseer of the Damned", 125, Rarity.RARE, mage.cards.o.OverseerOfTheDamned.class)); + cards.add(new SetCardInfo("Overwhelming Stampede", 175, Rarity.RARE, mage.cards.o.OverwhelmingStampede.class)); + cards.add(new SetCardInfo("Pendant of Prosperity", 56, Rarity.RARE, mage.cards.p.PendantOfProsperity.class)); + cards.add(new SetCardInfo("Phyrexian Rebirth", 68, Rarity.RARE, mage.cards.p.PhyrexianRebirth.class)); + cards.add(new SetCardInfo("Plaguecrafter", 126, Rarity.UNCOMMON, mage.cards.p.Plaguecrafter.class)); + cards.add(new SetCardInfo("Plains", 288, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Prairie Stream", 265, Rarity.RARE, mage.cards.p.PrairieStream.class)); + cards.add(new SetCardInfo("Pramikon, Sky Rampart", 47, Rarity.MYTHIC, mage.cards.p.PramikonSkyRampart.class)); + cards.add(new SetCardInfo("Prismatic Strands", 69, Rarity.COMMON, mage.cards.p.PrismaticStrands.class)); + cards.add(new SetCardInfo("Pristine Angel", 70, Rarity.MYTHIC, mage.cards.p.PristineAngel.class)); + cards.add(new SetCardInfo("Pristine Skywise", 196, Rarity.RARE, mage.cards.p.PristineSkywise.class)); + cards.add(new SetCardInfo("Purify the Grave", 71, Rarity.UNCOMMON, mage.cards.p.PurifyTheGrave.class)); + cards.add(new SetCardInfo("Putrefy", 197, Rarity.UNCOMMON, mage.cards.p.Putrefy.class)); + cards.add(new SetCardInfo("Rakdos Carnarium", 266, Rarity.COMMON, mage.cards.r.RakdosCarnarium.class)); + cards.add(new SetCardInfo("Rakdos Guildgate", 267, Rarity.COMMON, mage.cards.r.RakdosGuildgate.class)); + cards.add(new SetCardInfo("Rakdos Locket", 220, Rarity.COMMON, mage.cards.r.RakdosLocket.class)); + cards.add(new SetCardInfo("Ral Zarek", 198, Rarity.MYTHIC, mage.cards.r.RalZarek.class)); + cards.add(new SetCardInfo("Rampaging Baloths", 176, Rarity.RARE, mage.cards.r.RampagingBaloths.class)); + cards.add(new SetCardInfo("Ray of Distortion", 72, Rarity.COMMON, mage.cards.r.RayOfDistortion.class)); + cards.add(new SetCardInfo("Rayami, First of the Fallen", 48, Rarity.MYTHIC, mage.cards.r.RayamiFirstOfTheFallen.class)); + cards.add(new SetCardInfo("Reality Shift", 92, Rarity.UNCOMMON, mage.cards.r.RealityShift.class)); + cards.add(new SetCardInfo("Refuse // Cooperate", 199, Rarity.RARE, mage.cards.r.RefuseCooperate.class)); + cards.add(new SetCardInfo("Reliquary Tower", 268, Rarity.UNCOMMON, mage.cards.r.ReliquaryTower.class)); + cards.add(new SetCardInfo("River Kelpie", 93, Rarity.RARE, mage.cards.r.RiverKelpie.class)); + cards.add(new SetCardInfo("Rix Maadi, Dungeon Palace", 269, Rarity.UNCOMMON, mage.cards.r.RixMaadiDungeonPalace.class)); + cards.add(new SetCardInfo("Road of Return", 34, Rarity.RARE, mage.cards.r.RoadOfReturn.class)); + cards.add(new SetCardInfo("Roc Egg", 73, Rarity.UNCOMMON, mage.cards.r.RocEgg.class)); + cards.add(new SetCardInfo("Rogue's Passage", 270, Rarity.UNCOMMON, mage.cards.r.RoguesPassage.class)); + cards.add(new SetCardInfo("Rolling Temblor", 151, Rarity.UNCOMMON, mage.cards.r.RollingTemblor.class)); + cards.add(new SetCardInfo("Rootborn Defenses", 74, Rarity.COMMON, mage.cards.r.RootbornDefenses.class)); + cards.add(new SetCardInfo("Rugged Highlands", 271, Rarity.COMMON, mage.cards.r.RuggedHighlands.class)); + cards.add(new SetCardInfo("Runic Repetition", 94, Rarity.UNCOMMON, mage.cards.r.RunicRepetition.class)); + cards.add(new SetCardInfo("Sagu Mauler", 200, Rarity.RARE, mage.cards.s.SaguMauler.class)); + cards.add(new SetCardInfo("Sakura-Tribe Elder", 177, Rarity.COMMON, mage.cards.s.SakuraTribeElder.class)); + cards.add(new SetCardInfo("Sanctum of Eternity", 59, Rarity.RARE, mage.cards.s.SanctumOfEternity.class)); + cards.add(new SetCardInfo("Sanitarium Skeleton", 127, Rarity.COMMON, mage.cards.s.SanitariumSkeleton.class)); + cards.add(new SetCardInfo("Scaretiller", 57, Rarity.COMMON, mage.cards.s.Scaretiller.class)); + cards.add(new SetCardInfo("Scroll of Fate", 58, Rarity.RARE, mage.cards.s.ScrollOfFate.class)); + cards.add(new SetCardInfo("Second Harvest", 178, Rarity.RARE, mage.cards.s.SecondHarvest.class)); + cards.add(new SetCardInfo("Secret Plans", 201, Rarity.UNCOMMON, mage.cards.s.SecretPlans.class)); + cards.add(new SetCardInfo("Secrets of the Dead", 95, Rarity.UNCOMMON, mage.cards.s.SecretsOfTheDead.class)); + cards.add(new SetCardInfo("Seedborn Muse", 179, Rarity.RARE, mage.cards.s.SeedbornMuse.class)); + cards.add(new SetCardInfo("Selesnya Eulogist", 35, Rarity.RARE, mage.cards.s.SelesnyaEulogist.class)); + cards.add(new SetCardInfo("Selesnya Sanctuary", 272, Rarity.COMMON, mage.cards.s.SelesnyaSanctuary.class)); + cards.add(new SetCardInfo("Sevinne's Reclamation", 5, Rarity.RARE, mage.cards.s.SevinnesReclamation.class)); + cards.add(new SetCardInfo("Sevinne, the Chronoclasm", 49, Rarity.MYTHIC, mage.cards.s.SevinneTheChronoclasm.class)); + cards.add(new SetCardInfo("Shamanic Revelation", 180, Rarity.RARE, mage.cards.s.ShamanicRevelation.class)); + cards.add(new SetCardInfo("Shrine of the Forsaken Gods", 273, Rarity.RARE, mage.cards.s.ShrineOfTheForsakenGods.class)); + cards.add(new SetCardInfo("Silumgar Assassin", 128, Rarity.RARE, mage.cards.s.SilumgarAssassin.class)); + cards.add(new SetCardInfo("Simic Growth Chamber", 274, Rarity.UNCOMMON, mage.cards.s.SimicGrowthChamber.class)); + cards.add(new SetCardInfo("Simic Guildgate", 275, Rarity.COMMON, mage.cards.s.SimicGuildgate.class)); + cards.add(new SetCardInfo("Skinthinner", 129, Rarity.COMMON, mage.cards.s.Skinthinner.class)); + cards.add(new SetCardInfo("Skyfire Phoenix", 28, Rarity.RARE, mage.cards.s.SkyfirePhoenix.class)); + cards.add(new SetCardInfo("Slice in Twain", 181, Rarity.UNCOMMON, mage.cards.s.SliceInTwain.class)); + cards.add(new SetCardInfo("Sol Ring", 221, Rarity.UNCOMMON, mage.cards.s.SolRing.class)); + cards.add(new SetCardInfo("Solemn Simulacrum", 222, Rarity.RARE, mage.cards.s.SolemnSimulacrum.class)); + cards.add(new SetCardInfo("Song of the Worldsoul", 6, Rarity.RARE, mage.cards.s.SongOfTheWorldsoul.class)); + cards.add(new SetCardInfo("Soul Foundry", 223, Rarity.RARE, mage.cards.s.SoulFoundry.class)); + cards.add(new SetCardInfo("Soul of Innistrad", 130, Rarity.MYTHIC, mage.cards.s.SoulOfInnistrad.class)); + cards.add(new SetCardInfo("Soul of Zendikar", 182, Rarity.MYTHIC, mage.cards.s.SoulOfZendikar.class)); + cards.add(new SetCardInfo("Squee, Goblin Nabob", 152, Rarity.RARE, mage.cards.s.SqueeGoblinNabob.class)); + cards.add(new SetCardInfo("Stone Quarry", 276, Rarity.UNCOMMON, mage.cards.s.StoneQuarry.class)); + cards.add(new SetCardInfo("Storm Herd", 75, Rarity.RARE, mage.cards.s.StormHerd.class)); + cards.add(new SetCardInfo("Stratus Dancer", 96, Rarity.RARE, mage.cards.s.StratusDancer.class)); + cards.add(new SetCardInfo("Strionic Resonator", 224, Rarity.RARE, mage.cards.s.StrionicResonator.class)); + cards.add(new SetCardInfo("Stromkirk Occultist", 153, Rarity.RARE, mage.cards.s.StromkirkOccultist.class)); + cards.add(new SetCardInfo("Sudden Substitution", 11, Rarity.RARE, mage.cards.s.SuddenSubstitution.class)); + cards.add(new SetCardInfo("Sultai Charm", 202, Rarity.UNCOMMON, mage.cards.s.SultaiCharm.class)); + cards.add(new SetCardInfo("Sun Titan", 76, Rarity.MYTHIC, mage.cards.s.SunTitan.class)); + cards.add(new SetCardInfo("Sundering Growth", 203, Rarity.COMMON, mage.cards.s.SunderingGrowth.class)); + cards.add(new SetCardInfo("Sungrass Prairie", 277, Rarity.RARE, mage.cards.s.SungrassPrairie.class)); + cards.add(new SetCardInfo("Sunken Hollow", 278, Rarity.RARE, mage.cards.s.SunkenHollow.class)); + cards.add(new SetCardInfo("Swamp", 294, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swiftwater Cliffs", 279, Rarity.COMMON, mage.cards.s.SwiftwaterCliffs.class)); + cards.add(new SetCardInfo("Tahngarth, First Mate", 50, Rarity.RARE, mage.cards.t.TahngarthFirstMate.class)); + cards.add(new SetCardInfo("Talrand, Sky Summoner", 97, Rarity.RARE, mage.cards.t.TalrandSkySummoner.class)); + cards.add(new SetCardInfo("Tectonic Hellion", 29, Rarity.RARE, mage.cards.t.TectonicHellion.class)); + cards.add(new SetCardInfo("Temple of the False God", 280, Rarity.UNCOMMON, mage.cards.t.TempleOfTheFalseGod.class)); + cards.add(new SetCardInfo("Tempt with Discovery", 183, Rarity.RARE, mage.cards.t.TemptWithDiscovery.class)); + cards.add(new SetCardInfo("Terramorphic Expanse", 281, Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class)); + cards.add(new SetCardInfo("Tezzeret's Gambit", 98, Rarity.UNCOMMON, mage.cards.t.TezzeretsGambit.class)); + cards.add(new SetCardInfo("Thalia's Geistcaller", 7, Rarity.RARE, mage.cards.t.ThaliasGeistcaller.class)); + cards.add(new SetCardInfo("The Eldest Reborn", 131, Rarity.UNCOMMON, mage.cards.t.TheEldestReborn.class)); + cards.add(new SetCardInfo("Thelonite Hermit", 184, Rarity.RARE, mage.cards.t.TheloniteHermit.class)); + cards.add(new SetCardInfo("Thespian's Stage", 282, Rarity.RARE, mage.cards.t.ThespiansStage.class)); + cards.add(new SetCardInfo("Thieving Amalgam", 21, Rarity.RARE, mage.cards.t.ThievingAmalgam.class)); + cards.add(new SetCardInfo("Think Twice", 99, Rarity.COMMON, mage.cards.t.ThinkTwice.class)); + cards.add(new SetCardInfo("Thornwood Falls", 283, Rarity.COMMON, mage.cards.t.ThornwoodFalls.class)); + cards.add(new SetCardInfo("Thought Sponge", 12, Rarity.RARE, mage.cards.t.ThoughtSponge.class)); + cards.add(new SetCardInfo("Thousand Winds", 100, Rarity.RARE, mage.cards.t.ThousandWinds.class)); + cards.add(new SetCardInfo("Thragtusk", 185, Rarity.RARE, mage.cards.t.Thragtusk.class)); + cards.add(new SetCardInfo("Thran Dynamo", 225, Rarity.UNCOMMON, mage.cards.t.ThranDynamo.class)); + cards.add(new SetCardInfo("Trail of Mystery", 186, Rarity.RARE, mage.cards.t.TrailOfMystery.class)); + cards.add(new SetCardInfo("Tranquil Cove", 284, Rarity.COMMON, mage.cards.t.TranquilCove.class)); + cards.add(new SetCardInfo("Trostani's Judgment", 77, Rarity.COMMON, mage.cards.t.TrostanisJudgment.class)); + cards.add(new SetCardInfo("Trostani, Selesnya's Voice", 204, Rarity.MYTHIC, mage.cards.t.TrostaniSelesnyasVoice.class)); + cards.add(new SetCardInfo("Urban Evolution", 205, Rarity.UNCOMMON, mage.cards.u.UrbanEvolution.class)); + cards.add(new SetCardInfo("Vesuvan Shapeshifter", 101, Rarity.RARE, mage.cards.v.VesuvanShapeshifter.class)); + cards.add(new SetCardInfo("Violent Eruption", 154, Rarity.UNCOMMON, mage.cards.v.ViolentEruption.class)); + cards.add(new SetCardInfo("Vitu-Ghazi Guildmage", 206, Rarity.UNCOMMON, mage.cards.v.VituGhaziGuildmage.class)); + cards.add(new SetCardInfo("Voice of Many", 36, Rarity.UNCOMMON, mage.cards.v.VoiceOfMany.class)); + cards.add(new SetCardInfo("Volrath, the Shapestealer", 51, Rarity.MYTHIC, mage.cards.v.VolrathTheShapestealer.class)); + cards.add(new SetCardInfo("Vraska the Unseen", 207, Rarity.MYTHIC, mage.cards.v.VraskaTheUnseen.class)); + cards.add(new SetCardInfo("Wall of Stolen Identity", 13, Rarity.RARE, mage.cards.w.WallOfStolenIdentity.class)); + cards.add(new SetCardInfo("Warstorm Surge", 155, Rarity.RARE, mage.cards.w.WarstormSurge.class)); + cards.add(new SetCardInfo("Wayfaring Temple", 208, Rarity.RARE, mage.cards.w.WayfaringTemple.class)); + cards.add(new SetCardInfo("Wildfire Devils", 30, Rarity.RARE, mage.cards.w.WildfireDevils.class)); + cards.add(new SetCardInfo("Willbender", 102, Rarity.UNCOMMON, mage.cards.w.Willbender.class)); + cards.add(new SetCardInfo("Wind-Scarred Crag", 285, Rarity.COMMON, mage.cards.w.WindScarredCrag.class)); + cards.add(new SetCardInfo("Wingmate Roc", 78, Rarity.MYTHIC, mage.cards.w.WingmateRoc.class)); + cards.add(new SetCardInfo("Woodland Stream", 286, Rarity.COMMON, mage.cards.w.WoodlandStream.class)); + cards.add(new SetCardInfo("Yavimaya Coast", 287, Rarity.RARE, mage.cards.y.YavimayaCoast.class)); + cards.add(new SetCardInfo("Zetalpa, Primal Dawn", 79, Rarity.RARE, mage.cards.z.ZetalpaPrimalDawn.class)); + cards.add(new SetCardInfo("Zombie Infestation", 132, Rarity.UNCOMMON, mage.cards.z.ZombieInfestation.class)); + } +} diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 7b5cc3185e0..5c3bd9efab7 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -59,6 +59,7 @@ import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; +import mage.filter.FilterMana; import static org.mage.test.serverside.base.impl.CardTestPlayerAPIImpl.*; @@ -3462,4 +3463,19 @@ public class TestPlayer implements Player { public void setChooseStrictMode(boolean enable) { this.strictChooseMode = enable; } + + @Override + public void addPhyrexianToColors(FilterMana colors) { + computerPlayer.addPhyrexianToColors(colors); + } + + @Override + public void removePhyrexianFromColors(FilterMana colors) { + computerPlayer.removePhyrexianFromColors(colors); + } + + @Override + public FilterMana getPhyrexianColors() { + return computerPlayer.getPhyrexianColors(); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java index a626175038e..34e6f698323 100644 --- a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java +++ b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java @@ -20,6 +20,7 @@ import mage.counters.Counters; import mage.designations.Designation; import mage.designations.DesignationType; import mage.filter.FilterPermanent; +import mage.filter.FilterMana; import mage.game.Game; import mage.game.Graveyard; import mage.game.Table; @@ -1371,4 +1372,19 @@ public class PlayerStub implements Player { return hash; } + @Override + public void addPhyrexianToColors(FilterMana colors) { + + } + + @Override + public void removePhyrexianFromColors(FilterMana colors) { + + } + + @Override + public FilterMana getPhyrexianColors() { + return (new FilterMana()); + } + } diff --git a/Mage/src/main/java/mage/abilities/AbilityImpl.java b/Mage/src/main/java/mage/abilities/AbilityImpl.java index eb45dd8344d..d56a18262aa 100644 --- a/Mage/src/main/java/mage/abilities/AbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/AbilityImpl.java @@ -17,6 +17,7 @@ import mage.abilities.mana.ActivatedManaAbilityImpl; import mage.cards.Card; import mage.cards.SplitCard; import mage.constants.*; +import mage.filter.FilterMana; import mage.game.Game; import mage.game.command.Emblem; import mage.game.command.Plane; @@ -548,6 +549,11 @@ public abstract class AbilityImpl implements Ability { Iterator costIterator = manaCostsToPay.iterator(); while (costIterator.hasNext()) { ManaCost cost = costIterator.next(); + PhyrexianManaCost tempPhyrexianCost = null; + Mana mana = cost.getMana(); + + FilterMana phyrexianColors = controller.getPhyrexianColors(); + if (cost instanceof PhyrexianManaCost) { PhyrexianManaCost phyrexianManaCost = (PhyrexianManaCost) cost; PayLifeCost payLifeCost = new PayLifeCost(2); @@ -557,6 +563,37 @@ public abstract class AbilityImpl implements Ability { costs.add(payLifeCost); } } + /* K'rrik, Son of Yawgmoth ability check */ + else if (phyrexianColors != null) { + int phyrexianEnabledPips = mana.count(phyrexianColors); + if (phyrexianEnabledPips > 0) { + /* find which color mana is in the cost and set it in the temp Phyrexian cost */ + if (phyrexianColors.isWhite() && mana.getWhite() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.W); + } + else if (phyrexianColors.isBlue() && mana.getBlue() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.U); + } + else if (phyrexianColors.isBlack() && mana.getBlack() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.B); + } + else if (phyrexianColors.isRed() && mana.getRed() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.R); + } + else if (phyrexianColors.isGreen() && mana.getGreen() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.G); + } + + if (tempPhyrexianCost != null) { + PayLifeCost payLifeCost = new PayLifeCost(2); + if (payLifeCost.canPay(this, sourceId, controller.getId(), game) + && controller.chooseUse(Outcome.LoseLife, "Pay 2 life instead of " + tempPhyrexianCost.getBaseText() + '?', this, game)) { + costIterator.remove(); + costs.add(payLifeCost); + } + } + } + } } } diff --git a/Mage/src/main/java/mage/abilities/costs/mana/ManaCostsImpl.java b/Mage/src/main/java/mage/abilities/costs/mana/ManaCostsImpl.java index 103dae1dd93..7cdfead1aa4 100644 --- a/Mage/src/main/java/mage/abilities/costs/mana/ManaCostsImpl.java +++ b/Mage/src/main/java/mage/abilities/costs/mana/ManaCostsImpl.java @@ -12,6 +12,7 @@ import mage.constants.ColoredManaSymbol; import mage.constants.ManaType; import mage.constants.Outcome; import mage.filter.Filter; +import mage.filter.FilterMana; import mage.game.Game; import mage.players.ManaPool; import mage.players.Player; @@ -166,6 +167,11 @@ public class ManaCostsImpl extends ArrayList implements M while (manaCostIterator.hasNext()) { ManaCost manaCost = manaCostIterator.next(); + PhyrexianManaCost tempPhyrexianCost = null; + Mana mana = manaCost.getMana(); + + FilterMana phyrexianColors = player.getPhyrexianColors(); + if (manaCost instanceof PhyrexianManaCost) { PhyrexianManaCost phyrexianManaCost = (PhyrexianManaCost) manaCost; PayLifeCost payLifeCost = new PayLifeCost(2); @@ -175,6 +181,37 @@ public class ManaCostsImpl extends ArrayList implements M tempCosts.add(payLifeCost); } } + /* K'rrik, Son of Yawgmoth ability check */ + else if (phyrexianColors != null) { + int phyrexianEnabledPips = mana.count(phyrexianColors); + if (phyrexianEnabledPips > 0) { + /* find which color mana is in the cost and set it in the temp Phyrexian cost */ + if (phyrexianColors.isWhite() && mana.getWhite() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.W); + } + else if (phyrexianColors.isBlue() && mana.getBlue() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.U); + } + else if (phyrexianColors.isBlack() && mana.getBlack() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.B); + } + else if (phyrexianColors.isRed() && mana.getRed() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.R); + } + else if (phyrexianColors.isGreen() && mana.getGreen() > 0) { + tempPhyrexianCost = new PhyrexianManaCost(ColoredManaSymbol.G); + } + + if (tempPhyrexianCost != null) { + PayLifeCost payLifeCost = new PayLifeCost(2); + if (payLifeCost.canPay(source, source.getSourceId(), player.getId(), game) + && player.chooseUse(Outcome.LoseLife, "Pay 2 life instead of " + tempPhyrexianCost.getBaseText() + '?', source, game)) { + manaCostIterator.remove(); + tempCosts.add(payLifeCost); + } + } + } + } } tempCosts.pay(source, game, source.getSourceId(), player.getId(), false, null); diff --git a/Mage/src/main/java/mage/players/Player.java b/Mage/src/main/java/mage/players/Player.java index be7cb71aaf7..9220f50835b 100644 --- a/Mage/src/main/java/mage/players/Player.java +++ b/Mage/src/main/java/mage/players/Player.java @@ -21,6 +21,7 @@ import mage.counters.Counters; import mage.designations.Designation; import mage.designations.DesignationType; import mage.filter.FilterPermanent; +import mage.filter.FilterMana; import mage.game.Game; import mage.game.Graveyard; import mage.game.Table; @@ -894,4 +895,9 @@ public interface Player extends MageItem, Copyable { List getDesignations(); + void addPhyrexianToColors(FilterMana colors); + + void removePhyrexianFromColors(FilterMana colors); + + FilterMana getPhyrexianColors(); } diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 50440978e73..0f50f83d605 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -36,6 +36,7 @@ import mage.designations.Designation; import mage.designations.DesignationType; import mage.filter.FilterCard; import mage.filter.FilterPermanent; +import mage.filter.FilterMana; import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterCreatureForCombat; import mage.filter.common.FilterCreatureForCombatBlock; @@ -174,6 +175,8 @@ public abstract class PlayerImpl implements Player, Serializable { protected List designations = new ArrayList<>(); + protected FilterMana phyrexianColors = new FilterMana(); + /** * During some steps we can't play anything */ @@ -276,6 +279,8 @@ public abstract class PlayerImpl implements Player, Serializable { this.payManaMode = player.payManaMode; this.designations.addAll(player.designations); + + this.phyrexianColors = player.phyrexianColors; } @Override @@ -4160,4 +4165,48 @@ public abstract class PlayerImpl implements Player, Serializable { hash = 89 * hash + Objects.hashCode(this.playerId); return hash; } + + + @Override + public void addPhyrexianToColors(FilterMana colors) { + if (colors.isWhite()) { + this.phyrexianColors.setWhite(true); + } + if (colors.isBlue()) { + this.phyrexianColors.setBlue(true); + } + if (colors.isBlack()) { + this.phyrexianColors.setBlack(true); + } + if (colors.isRed()) { + this.phyrexianColors.setRed(true); + } + if (colors.isGreen()) { + this.phyrexianColors.setGreen(true); + } + } + + @Override + public void removePhyrexianFromColors(FilterMana colors) { + if (colors.isWhite()) { + this.phyrexianColors.setWhite(false); + } + if (colors.isBlue()) { + this.phyrexianColors.setBlue(false); + } + if (colors.isBlack()) { + this.phyrexianColors.setBlack(false); + } + if (colors.isRed()) { + this.phyrexianColors.setRed(false); + } + if (colors.isGreen()) { + this.phyrexianColors.setGreen(false); + } + } + + @Override + public FilterMana getPhyrexianColors() { + return this.phyrexianColors.copy(); + } } diff --git a/Mage/src/main/java/mage/players/StubPlayer.java b/Mage/src/main/java/mage/players/StubPlayer.java index f10a070a119..68913380020 100644 --- a/Mage/src/main/java/mage/players/StubPlayer.java +++ b/Mage/src/main/java/mage/players/StubPlayer.java @@ -31,6 +31,7 @@ import java.util.UUID; import static com.google.common.collect.Iterables.getOnlyElement; import static java.util.stream.Collectors.toList; +import mage.filter.FilterMana; public class StubPlayer extends PlayerImpl implements Player { @@ -216,6 +217,20 @@ public class StubPlayer extends PlayerImpl implements Player { @Override public void pickCard(List cards, Deck deck, Draft draft) { + } + + @Override + public void addPhyrexianToColors(FilterMana colors) { + } + @Override + public void removePhyrexianFromColors(FilterMana colors) { + + } + + @Override + public FilterMana getPhyrexianColors() { + return (new FilterMana()); + } } \ No newline at end of file From 84701cfbab5a8cad45c5215f031169db47719708 Mon Sep 17 00:00:00 2001 From: ssouders412 Date: Wed, 13 Nov 2019 02:01:24 -0500 Subject: [PATCH 2/2] Fixed K'rrik, Son of Yawgmoth K'rrik's second ability is no longer active after he leaves the battlefield. KNOWN ISSUE: Cards you would not normally be able to play without this ability are still not highlighted as playable. --- Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java | 9 ++++++--- Mage/src/main/java/mage/players/PlayerImpl.java | 11 +++++++---- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java b/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java index 60bb6c7ea8d..f32e5a17705 100644 --- a/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java +++ b/Mage.Sets/src/mage/cards/k/KrrikSonOfYawgmoth.java @@ -24,6 +24,7 @@ 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; /** @@ -73,7 +74,7 @@ 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."; + this.staticText = "for each {B} in a cost, you may pay 2 life rather than pay that mana"; } public KrrikSonOfYawgmothPhyrexianEffect(final KrrikSonOfYawgmothPhyrexianEffect effect) { @@ -87,10 +88,12 @@ class KrrikSonOfYawgmothPhyrexianEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { - FilterMana phyrexianBlack = new FilterMana(); + Permanent sourcePermanent = game.getPermanent(source.getSourceId()); Player controller = game.getPlayer(source.getControllerId()); + FilterMana phyrexianBlack = new FilterMana(); + phyrexianBlack.setBlack(true); - if (controller != null) { + if (controller != null && sourcePermanent != null) { for (UUID playerId: game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 0f50f83d605..a2db9a61dd0 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -175,7 +175,7 @@ public abstract class PlayerImpl implements Player, Serializable { protected List designations = new ArrayList<>(); - protected FilterMana phyrexianColors = new FilterMana(); + protected FilterMana phyrexianColors; /** * During some steps we can't play anything @@ -194,6 +194,7 @@ public abstract class PlayerImpl implements Player, Serializable { manaPool = new ManaPool(playerId); library = new Library(playerId); sideboard = new CardsImpl(); + phyrexianColors = new FilterMana(); } protected PlayerImpl(UUID id) { @@ -277,10 +278,9 @@ public abstract class PlayerImpl implements Player, Serializable { this.castSourceIdManaCosts = player.castSourceIdManaCosts; this.castSourceIdCosts = player.castSourceIdCosts; this.payManaMode = player.payManaMode; + this.phyrexianColors = player.phyrexianColors.copy(); this.designations.addAll(player.designations); - - this.phyrexianColors = player.phyrexianColors; } @Override @@ -345,6 +345,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.castSourceIdWithAlternateMana = player.getCastSourceIdWithAlternateMana(); this.castSourceIdManaCosts = player.getCastSourceIdManaCosts(); this.castSourceIdCosts = player.getCastSourceIdCosts(); + this.phyrexianColors = player.getPhyrexianColors().copy(); this.designations.clear(); this.designations.addAll(player.getDesignations()); @@ -422,6 +423,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.castSourceIdManaCosts = null; this.castSourceIdCosts = null; this.getManaPool().init(); // needed to remove mana that not empties on step change from previous game if left + this.phyrexianColors = new FilterMana(); this.designations.clear(); } @@ -448,6 +450,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.castSourceIdManaCosts = null; this.castSourceIdCosts = null; this.getManaPool().clearEmptyManaPoolRules(); + this.phyrexianColors = new FilterMana(); } @Override @@ -4207,6 +4210,6 @@ public abstract class PlayerImpl implements Player, Serializable { @Override public FilterMana getPhyrexianColors() { - return this.phyrexianColors.copy(); + return this.phyrexianColors; } }