From 80c4f74ed4dcf7ae57f84e72b7e89f390fabdb43 Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 28 Jul 2017 11:23:01 -0500 Subject: [PATCH 01/15] - Added a requested card Planeswalker's Mischief. --- .../mage/cards/p/PlaneswalkersMischief.java | 194 ++++++++++++++++++ Mage.Sets/src/mage/sets/Planeshift.java | 1 + 2 files changed, 195 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/p/PlaneswalkersMischief.java diff --git a/Mage.Sets/src/mage/cards/p/PlaneswalkersMischief.java b/Mage.Sets/src/mage/cards/p/PlaneswalkersMischief.java new file mode 100644 index 00000000000..c148859118d --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PlaneswalkersMischief.java @@ -0,0 +1,194 @@ +/* + * 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.p; + +import java.util.List; +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.common.ActivateAsSorceryActivatedAbility; +import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.AsThoughEffect; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ReturnFromExileEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.Cards; +import mage.cards.CardsImpl; +import mage.constants.AsThoughEffectType; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.stack.Spell; +import mage.players.Player; +import mage.target.common.TargetOpponent; +import mage.target.targetpointer.FixedTarget; +import mage.watchers.common.SpellsCastWatcher; + +/** + * + * @author jeffwadsworth + */ +public class PlaneswalkersMischief extends CardImpl { + + public PlaneswalkersMischief(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + + // {3}{U}: Target opponent reveals a card at random from his or her hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand. Activate this ability only any time you could cast a sorcery. + Ability ability = new ActivateAsSorceryActivatedAbility(Zone.BATTLEFIELD, new PlaneswalkersMischiefEffect(), new ManaCostsImpl("{3}{U}")); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + + } + + public PlaneswalkersMischief(final PlaneswalkersMischief card) { + super(card); + } + + @Override + public PlaneswalkersMischief copy() { + return new PlaneswalkersMischief(this); + } +} + +class PlaneswalkersMischiefEffect extends OneShotEffect { + + public PlaneswalkersMischiefEffect() { + super(Outcome.Benefit); + this.staticText = "Target opponent reveals a card at random from his or her hand. If it's an instant or sorcery card, exile it. You may cast it without paying its mana cost for as long as it remains exiled. At the beginning of the next end step, if you haven't cast it, return it to its owner's hand."; + } + + public PlaneswalkersMischiefEffect(final PlaneswalkersMischiefEffect effect) { + super(effect); + } + + @Override + public PlaneswalkersMischiefEffect copy() { + return new PlaneswalkersMischiefEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player opponent = game.getPlayer(source.getFirstTarget()); + if (opponent != null + && opponent.getHand().size() > 0) { + Card revealedCard = opponent.getHand().getRandom(game); + Cards cards = new CardsImpl(); + cards.add(revealedCard); + opponent.revealCards("Planeswalker's Mischief Reveal", cards, game); + if (revealedCard.isInstant() + || revealedCard.isSorcery()) { + opponent.moveCardToExileWithInfo(revealedCard, source.getSourceId(), "Planeswalker's Mischief", source.getSourceId(), game, Zone.HAND, true); + AsThoughEffect effect = new PlaneswalkersMischiefCastFromExileEffect(); + effect.setTargetPointer(new FixedTarget(revealedCard.getId())); + game.addEffect(effect, source); + OneShotEffect effect2 = new ReturnFromExileEffect(source.getSourceId(), Zone.HAND); + Condition condition = new SpellWasNotCastCondition(source.getSourceId(), revealedCard.getId()); + ConditionalOneShotEffect effect3 = new ConditionalOneShotEffect(effect2, condition, "if you haven't cast it, return it to its owner's hand."); + DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect3); + game.addDelayedTriggeredAbility(delayedAbility, source); + return true; + } + } + return false; + } +} + +class PlaneswalkersMischiefCastFromExileEffect extends AsThoughEffectImpl { + + PlaneswalkersMischiefCastFromExileEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.Custom, Outcome.Benefit); + staticText = "You may cast that card without paying its mana cost as long as it remains exiled"; + } + + PlaneswalkersMischiefCastFromExileEffect(final PlaneswalkersMischiefCastFromExileEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public PlaneswalkersMischiefCastFromExileEffect copy() { + return new PlaneswalkersMischiefCastFromExileEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + if (targetPointer.getTargets(game, source).contains(objectId) + && game.getState().getZone(objectId) == Zone.EXILED) { + Player player = game.getPlayer(source.getControllerId()); + Card card = game.getCard(objectId); + if (player != null + && card != null) { + player.setCastSourceIdWithAlternateMana(objectId, null, card.getSpellAbility().getCosts()); + return true; + } + } + return false; + } +} + +class SpellWasNotCastCondition implements Condition { + + protected UUID exileId; + protected UUID cardId; + + public SpellWasNotCastCondition(UUID exileId, UUID cardId) { + this.exileId = exileId; + this.cardId = cardId; + } + + @Override + public boolean apply(Game game, Ability source) { + if (!game.getExile().getExileZone(exileId).contains(cardId)) { + return false; + } + SpellsCastWatcher watcher = (SpellsCastWatcher) game.getState().getWatchers().get(SpellsCastWatcher.class.getSimpleName(), source.getSourceId()); + if (watcher != null) { + List spells = watcher.getSpellsCastThisTurn(source.getControllerId()); + if (spells != null) { + for (Spell spell : spells) { + if (spell.getSourceId() == cardId) { + return false; + } + } + } + } + return true; + } +} diff --git a/Mage.Sets/src/mage/sets/Planeshift.java b/Mage.Sets/src/mage/sets/Planeshift.java index 98c1684d1c7..1efee2f61ca 100644 --- a/Mage.Sets/src/mage/sets/Planeshift.java +++ b/Mage.Sets/src/mage/sets/Planeshift.java @@ -138,6 +138,7 @@ public class Planeshift extends ExpansionSet { cards.add(new SetCardInfo("Planeswalker's Favor", 86, Rarity.RARE, mage.cards.p.PlaneswalkersFavor.class)); cards.add(new SetCardInfo("Planeswalker's Fury", 70, Rarity.RARE, mage.cards.p.PlaneswalkersFury.class)); cards.add(new SetCardInfo("Planeswalker's Mirth", 12, Rarity.RARE, mage.cards.p.PlaneswalkersMirth.class)); + cards.add(new SetCardInfo("Planeswalker's Mischief", 29, Rarity.RARE, mage.cards.p.PlaneswalkersMischief.class)); cards.add(new SetCardInfo("Planeswalker's Scorn", 52, Rarity.RARE, mage.cards.p.PlaneswalkersScorn.class)); cards.add(new SetCardInfo("Pollen Remedy", 13, Rarity.COMMON, mage.cards.p.PollenRemedy.class)); cards.add(new SetCardInfo("Primal Growth", 87, Rarity.COMMON, mage.cards.p.PrimalGrowth.class)); From 74935e8bbb04cc381ce57f13f35b3da37b401d61 Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 28 Jul 2017 14:31:08 -0500 Subject: [PATCH 02/15] - Added Pentarch Paladin. --- .../src/mage/cards/p/PentarchPaladin.java | 105 +++ Mage.Sets/src/mage/sets/TimeSpiral.java | 647 +++++++++--------- 2 files changed, 429 insertions(+), 323 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/p/PentarchPaladin.java diff --git a/Mage.Sets/src/mage/cards/p/PentarchPaladin.java b/Mage.Sets/src/mage/cards/p/PentarchPaladin.java new file mode 100644 index 00000000000..b85684c9258 --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/PentarchPaladin.java @@ -0,0 +1,105 @@ +/* + * 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.p; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.AsEntersBattlefieldAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.ChooseColorEffect; +import mage.abilities.keyword.FlankingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.target.TargetPermanent; +import mage.abilities.effects.common.DestroyTargetEffect; + +/** + * + * @author jeffwadsworth + */ +public class PentarchPaladin extends CardImpl { + + private final UUID originalId; + FilterPermanent filter = new FilterPermanent("permanent of the chosen color."); + + public PentarchPaladin(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}{W}"); + + this.subtype.add("Human"); + this.subtype.add("Knight"); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flanking + this.addAbility(new FlankingAbility()); + + // As Pentarch Paladin enters the battlefield, choose a color. + this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Detriment))); + + // {W}{W}, {tap}: Destroy target permanent of the chosen color. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyTargetEffect(), new ManaCostsImpl("{W}{W}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetPermanent(filter)); + originalId = ability.getOriginalId(); + this.addAbility(ability); + + } + + @Override + public void adjustTargets(Ability ability, Game game) { + ObjectColor color = (ObjectColor) game.getState().getValue(ability.getSourceId() + "_color"); + if (ability.getOriginalId().equals(originalId) + && color != null) { + ability.getTargets().clear(); + FilterPermanent filter = new FilterPermanent("permanent of the chosen color."); + filter.add(new ColorPredicate(color)); + TargetPermanent target = new TargetPermanent(filter); + ability.addTarget(target); + } + } + + public PentarchPaladin(final PentarchPaladin card) { + super(card); + this.originalId = card.originalId; + } + + @Override + public PentarchPaladin copy() { + return new PentarchPaladin(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/TimeSpiral.java b/Mage.Sets/src/mage/sets/TimeSpiral.java index f9e042690f1..1d03d427d01 100644 --- a/Mage.Sets/src/mage/sets/TimeSpiral.java +++ b/Mage.Sets/src/mage/sets/TimeSpiral.java @@ -1,323 +1,324 @@ -package mage.sets; - -import java.util.List; -import mage.cards.Card; -import mage.cards.CardGraphicInfo; -import mage.cards.ExpansionSet; -import mage.cards.repository.CardCriteria; -import mage.cards.repository.CardRepository; -import mage.constants.Rarity; -import mage.constants.SetType; - -public class TimeSpiral extends ExpansionSet { - - private static final TimeSpiral instance = new TimeSpiral(); - - public static TimeSpiral getInstance() { - return instance; - } - - private TimeSpiral() { - super("Time Spiral", "TSP", ExpansionSet.buildDate(2006, 9, 9), SetType.EXPANSION); - this.blockName = "Time Spiral"; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Academy Ruins", 269, Rarity.RARE, mage.cards.a.AcademyRuins.class)); - cards.add(new SetCardInfo("Amrou Scout", 1, Rarity.COMMON, mage.cards.a.AmrouScout.class)); - cards.add(new SetCardInfo("Amrou Seekers", 2, Rarity.COMMON, mage.cards.a.AmrouSeekers.class)); - cards.add(new SetCardInfo("Ancestral Vision", 48, Rarity.RARE, mage.cards.a.AncestralVision.class)); - cards.add(new SetCardInfo("Ancient Grudge", 143, Rarity.COMMON, mage.cards.a.AncientGrudge.class)); - cards.add(new SetCardInfo("Angel's Grace", 3, Rarity.RARE, mage.cards.a.AngelsGrace.class)); - cards.add(new SetCardInfo("Ashcoat Bear", 190, Rarity.COMMON, mage.cards.a.AshcoatBear.class)); - cards.add(new SetCardInfo("Aspect of Mongoose", 191, Rarity.UNCOMMON, mage.cards.a.AspectOfMongoose.class)); - cards.add(new SetCardInfo("Assassinate", 95, Rarity.COMMON, mage.cards.a.Assassinate.class)); - cards.add(new SetCardInfo("Assembly-Worker", 248, Rarity.UNCOMMON, mage.cards.a.AssemblyWorker.class)); - cards.add(new SetCardInfo("Barbed Shocker", 144, Rarity.UNCOMMON, mage.cards.b.BarbedShocker.class)); - cards.add(new SetCardInfo("Basal Sliver", 96, Rarity.COMMON, mage.cards.b.BasalSliver.class)); - cards.add(new SetCardInfo("Basalt Gargoyle", 145, Rarity.UNCOMMON, mage.cards.b.BasaltGargoyle.class)); - cards.add(new SetCardInfo("Benalish Cavalry", 4, Rarity.COMMON, mage.cards.b.BenalishCavalry.class)); - cards.add(new SetCardInfo("Bewilder", 49, Rarity.COMMON, mage.cards.b.Bewilder.class)); - cards.add(new SetCardInfo("Blazing Blade Askari", 146, Rarity.COMMON, mage.cards.b.BlazingBladeAskari.class)); - cards.add(new SetCardInfo("Bogardan Hellkite", 147, Rarity.RARE, mage.cards.b.BogardanHellkite.class)); - cards.add(new SetCardInfo("Bogardan Rager", 148, Rarity.COMMON, mage.cards.b.BogardanRager.class)); - cards.add(new SetCardInfo("Bonesplitter Sliver", 149, Rarity.COMMON, mage.cards.b.BonesplitterSliver.class)); - cards.add(new SetCardInfo("Brass Gnat", 249, Rarity.COMMON, mage.cards.b.BrassGnat.class)); - cards.add(new SetCardInfo("Brine Elemental", 50, Rarity.UNCOMMON, mage.cards.b.BrineElemental.class)); - cards.add(new SetCardInfo("Calciform Pools", 270, Rarity.UNCOMMON, mage.cards.c.CalciformPools.class)); - cards.add(new SetCardInfo("Call to the Netherworld", 97, Rarity.COMMON, mage.cards.c.CallToTheNetherworld.class)); - cards.add(new SetCardInfo("Cancel", 51, Rarity.COMMON, mage.cards.c.Cancel.class)); - cards.add(new SetCardInfo("Candles of Leng", 250, Rarity.RARE, mage.cards.c.CandlesOfLeng.class)); - cards.add(new SetCardInfo("Careful Consideration", 52, Rarity.UNCOMMON, mage.cards.c.CarefulConsideration.class)); - cards.add(new SetCardInfo("Castle Raptors", 5, Rarity.COMMON, mage.cards.c.CastleRaptors.class)); - cards.add(new SetCardInfo("Cavalry Master", 6, Rarity.UNCOMMON, mage.cards.c.CavalryMaster.class)); - cards.add(new SetCardInfo("Celestial Crusader", 7, Rarity.UNCOMMON, mage.cards.c.CelestialCrusader.class)); - cards.add(new SetCardInfo("Children of Korlis", 8, Rarity.COMMON, mage.cards.c.ChildrenOfKorlis.class)); - cards.add(new SetCardInfo("Chromatic Star", 251, Rarity.COMMON, mage.cards.c.ChromaticStar.class)); - cards.add(new SetCardInfo("Chronatog Totem", 252, Rarity.UNCOMMON, mage.cards.c.ChronatogTotem.class)); - cards.add(new SetCardInfo("Chronosavant", 9, Rarity.RARE, mage.cards.c.Chronosavant.class)); - cards.add(new SetCardInfo("Clockspinning", 53, Rarity.COMMON, mage.cards.c.Clockspinning.class)); - cards.add(new SetCardInfo("Clockwork Hydra", 253, Rarity.UNCOMMON, mage.cards.c.ClockworkHydra.class)); - cards.add(new SetCardInfo("Cloudchaser Kestrel", 10, Rarity.COMMON, mage.cards.c.CloudchaserKestrel.class)); - cards.add(new SetCardInfo("Coal Stoker", 150, Rarity.COMMON, mage.cards.c.CoalStoker.class)); - cards.add(new SetCardInfo("Conflagrate", 151, Rarity.UNCOMMON, mage.cards.c.Conflagrate.class)); - cards.add(new SetCardInfo("Coral Trickster", 54, Rarity.COMMON, mage.cards.c.CoralTrickster.class)); - cards.add(new SetCardInfo("Corpulent Corpse", 98, Rarity.COMMON, mage.cards.c.CorpulentCorpse.class)); - cards.add(new SetCardInfo("Crookclaw Transmuter", 55, Rarity.COMMON, mage.cards.c.CrookclawTransmuter.class)); - cards.add(new SetCardInfo("Curse of the Cabal", 99, Rarity.RARE, mage.cards.c.CurseOfTheCabal.class)); - cards.add(new SetCardInfo("Dark Withering", 101, Rarity.COMMON, mage.cards.d.DarkWithering.class)); - cards.add(new SetCardInfo("D'Avenant Healer", 11, Rarity.COMMON, mage.cards.d.DAvenantHealer.class)); - cards.add(new SetCardInfo("Deathspore Thallid", 102, Rarity.COMMON, mage.cards.d.DeathsporeThallid.class)); - cards.add(new SetCardInfo("Deep-Sea Kraken", 56, Rarity.RARE, mage.cards.d.DeepSeaKraken.class)); - cards.add(new SetCardInfo("Dementia Sliver", 236, Rarity.UNCOMMON, mage.cards.d.DementiaSliver.class)); - cards.add(new SetCardInfo("Demonic Collusion", 103, Rarity.RARE, mage.cards.d.DemonicCollusion.class)); - cards.add(new SetCardInfo("Draining Whelk", 57, Rarity.RARE, mage.cards.d.DrainingWhelk.class)); - cards.add(new SetCardInfo("Dralnu, Lich Lord", 237, Rarity.RARE, mage.cards.d.DralnuLichLord.class)); - cards.add(new SetCardInfo("Dread Return", 104, Rarity.UNCOMMON, mage.cards.d.DreadReturn.class)); - cards.add(new SetCardInfo("Dreadship Reef", 271, Rarity.UNCOMMON, mage.cards.d.DreadshipReef.class)); - cards.add(new SetCardInfo("Dream Stalker", 58, Rarity.COMMON, mage.cards.d.DreamStalker.class)); - cards.add(new SetCardInfo("Drifter il-Dal", 59, Rarity.COMMON, mage.cards.d.DrifterIlDal.class)); - cards.add(new SetCardInfo("Drudge Reavers", 105, Rarity.COMMON, mage.cards.d.DrudgeReavers.class)); - cards.add(new SetCardInfo("Durkwood Baloth", 193, Rarity.COMMON, mage.cards.d.DurkwoodBaloth.class)); - cards.add(new SetCardInfo("Duskrider Peregrine", 14, Rarity.UNCOMMON, mage.cards.d.DuskriderPeregrine.class)); - cards.add(new SetCardInfo("Empty the Warrens", 152, Rarity.COMMON, mage.cards.e.EmptyTheWarrens.class)); - cards.add(new SetCardInfo("Endrek Sahr, Master Breeder", 106, Rarity.RARE, mage.cards.e.EndrekSahrMasterBreeder.class)); - cards.add(new SetCardInfo("Errant Doomsayers", 15, Rarity.COMMON, mage.cards.e.ErrantDoomsayers.class)); - cards.add(new SetCardInfo("Errant Ephemeron", 60, Rarity.COMMON, mage.cards.e.ErrantEphemeron.class)); - cards.add(new SetCardInfo("Eternity Snare", 61, Rarity.COMMON, mage.cards.e.EternitySnare.class)); - cards.add(new SetCardInfo("Evangelize", 16, Rarity.RARE, mage.cards.e.Evangelize.class)); - cards.add(new SetCardInfo("Evil Eye of Urborg", 107, Rarity.UNCOMMON, mage.cards.e.EvilEyeOfUrborg.class)); - cards.add(new SetCardInfo("Faceless Devourer", 108, Rarity.UNCOMMON, mage.cards.f.FacelessDevourer.class)); - cards.add(new SetCardInfo("Fallen Ideal", 109, Rarity.UNCOMMON, mage.cards.f.FallenIdeal.class)); - cards.add(new SetCardInfo("Fathom Seer", 62, Rarity.COMMON, mage.cards.f.FathomSeer.class)); - cards.add(new SetCardInfo("Feebleness", 110, Rarity.COMMON, mage.cards.f.Feebleness.class)); - cards.add(new SetCardInfo("Firemaw Kavu", 153, Rarity.UNCOMMON, mage.cards.f.FiremawKavu.class)); - cards.add(new SetCardInfo("Firewake Sliver", 238, Rarity.UNCOMMON, mage.cards.f.FirewakeSliver.class)); - cards.add(new SetCardInfo("Flagstones of Trokair", 272, Rarity.RARE, mage.cards.f.FlagstonesOfTrokair.class)); - cards.add(new SetCardInfo("Flamecore Elemental", 154, Rarity.COMMON, mage.cards.f.FlamecoreElemental.class)); - cards.add(new SetCardInfo("Fledgling Mawcor", 63, Rarity.UNCOMMON, mage.cards.f.FledglingMawcor.class)); - cards.add(new SetCardInfo("Flickering Spirit", 17, Rarity.COMMON, mage.cards.f.FlickeringSpirit.class)); - cards.add(new SetCardInfo("Fool's Demise", 64, Rarity.UNCOMMON, mage.cards.f.FoolsDemise.class)); - cards.add(new SetCardInfo("Forest", 298, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Forest", 299, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Forest", 300, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Forest", 301, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Foriysian Interceptor", 18, Rarity.COMMON, mage.cards.f.ForiysianInterceptor.class)); - cards.add(new SetCardInfo("Foriysian Totem", 254, Rarity.UNCOMMON, mage.cards.f.ForiysianTotem.class)); - cards.add(new SetCardInfo("Fortify", 19, Rarity.COMMON, mage.cards.f.Fortify.class)); - cards.add(new SetCardInfo("Fortune Thief", 156, Rarity.RARE, mage.cards.f.FortuneThief.class)); - cards.add(new SetCardInfo("Fungal Reaches", 273, Rarity.UNCOMMON, mage.cards.f.FungalReaches.class)); - cards.add(new SetCardInfo("Fungus Sliver", 195, Rarity.RARE, mage.cards.f.FungusSliver.class)); - cards.add(new SetCardInfo("Fury Sliver", 157, Rarity.UNCOMMON, mage.cards.f.FurySliver.class)); - cards.add(new SetCardInfo("Gauntlet of Power", 255, Rarity.RARE, mage.cards.g.GauntletOfPower.class)); - cards.add(new SetCardInfo("Gaze of Justice", 20, Rarity.COMMON, mage.cards.g.GazeOfJustice.class)); - cards.add(new SetCardInfo("Gemhide Sliver", 196, Rarity.COMMON, mage.cards.g.GemhideSliver.class)); - cards.add(new SetCardInfo("Gemstone Caverns", 274, Rarity.RARE, mage.cards.g.GemstoneCaverns.class)); - cards.add(new SetCardInfo("Ghitu Firebreathing", 158, Rarity.COMMON, mage.cards.g.GhituFirebreathing.class)); - cards.add(new SetCardInfo("Ghostflame Sliver", 239, Rarity.UNCOMMON, mage.cards.g.GhostflameSliver.class)); - cards.add(new SetCardInfo("Glass Asp", 197, Rarity.COMMON, mage.cards.g.GlassAsp.class)); - cards.add(new SetCardInfo("Goblin Skycutter", 159, Rarity.COMMON, mage.cards.g.GoblinSkycutter.class)); - cards.add(new SetCardInfo("Gorgon Recluse", 111, Rarity.COMMON, mage.cards.g.GorgonRecluse.class)); - cards.add(new SetCardInfo("Grapeshot", 160, Rarity.COMMON, mage.cards.g.Grapeshot.class)); - cards.add(new SetCardInfo("Greater Gargadon", 161, Rarity.RARE, mage.cards.g.GreaterGargadon.class)); - cards.add(new SetCardInfo("Greenseeker", 198, Rarity.COMMON, mage.cards.g.Greenseeker.class)); - cards.add(new SetCardInfo("Griffin Guide", 21, Rarity.UNCOMMON, mage.cards.g.GriffinGuide.class)); - cards.add(new SetCardInfo("Ground Rift", 162, Rarity.COMMON, mage.cards.g.GroundRift.class)); - cards.add(new SetCardInfo("Gustcloak Cavalier", 22, Rarity.UNCOMMON, mage.cards.g.GustcloakCavalier.class)); - cards.add(new SetCardInfo("Harmonic Sliver", 240, Rarity.UNCOMMON, mage.cards.h.HarmonicSliver.class)); - cards.add(new SetCardInfo("Haunting Hymn", 112, Rarity.UNCOMMON, mage.cards.h.HauntingHymn.class)); - cards.add(new SetCardInfo("Havenwood Wurm", 199, Rarity.COMMON, mage.cards.h.HavenwoodWurm.class)); - cards.add(new SetCardInfo("Herd Gnarr", 200, Rarity.COMMON, mage.cards.h.HerdGnarr.class)); - cards.add(new SetCardInfo("Hivestone", 256, Rarity.RARE, mage.cards.h.Hivestone.class)); - cards.add(new SetCardInfo("Hypergenesis", 201, Rarity.RARE, mage.cards.h.Hypergenesis.class)); - cards.add(new SetCardInfo("Ib Halfheart, Goblin Tactician", 163, Rarity.RARE, mage.cards.i.IbHalfheartGoblinTactician.class)); - cards.add(new SetCardInfo("Icatian Crier", 23, Rarity.COMMON, mage.cards.i.IcatianCrier.class)); - cards.add(new SetCardInfo("Ignite Memories", 164, Rarity.UNCOMMON, mage.cards.i.IgniteMemories.class)); - cards.add(new SetCardInfo("Ironclaw Buzzardiers", 165, Rarity.COMMON, mage.cards.i.IronclawBuzzardiers.class)); - cards.add(new SetCardInfo("Island", 286, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Island", 287, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Island", 288, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Island", 289, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Ith, High Arcanist", 241, Rarity.RARE, mage.cards.i.IthHighArcanist.class)); - cards.add(new SetCardInfo("Ivory Giant", 24, Rarity.COMMON, mage.cards.i.IvoryGiant.class)); - cards.add(new SetCardInfo("Ixidron", 65, Rarity.RARE, mage.cards.i.Ixidron.class)); - cards.add(new SetCardInfo("Jaya Ballard, Task Mage", 166, Rarity.RARE, mage.cards.j.JayaBallardTaskMage.class)); - cards.add(new SetCardInfo("Jedit's Dragoons", 25, Rarity.COMMON, mage.cards.j.JeditsDragoons.class)); - cards.add(new SetCardInfo("Jhoira's Timebug", 257, Rarity.COMMON, mage.cards.j.JhoirasTimebug.class)); - cards.add(new SetCardInfo("Kaervek the Merciless", 242, Rarity.RARE, mage.cards.k.KaervekTheMerciless.class)); - cards.add(new SetCardInfo("Keldon Halberdier", 167, Rarity.COMMON, mage.cards.k.KeldonHalberdier.class)); - cards.add(new SetCardInfo("Kher Keep", 275, Rarity.RARE, mage.cards.k.KherKeep.class)); - cards.add(new SetCardInfo("Knight of the Holy Nimbus", 26, Rarity.UNCOMMON, mage.cards.k.KnightOfTheHolyNimbus.class)); - cards.add(new SetCardInfo("Krosan Grip", 202, Rarity.UNCOMMON, mage.cards.k.KrosanGrip.class)); - cards.add(new SetCardInfo("Liege of the Pit", 113, Rarity.RARE, mage.cards.l.LiegeOfThePit.class)); - cards.add(new SetCardInfo("Lightning Axe", 168, Rarity.COMMON, mage.cards.l.LightningAxe.class)); - cards.add(new SetCardInfo("Lim-Dul the Necromancer", 114, Rarity.RARE, mage.cards.l.LimDulTheNecromancer.class)); - cards.add(new SetCardInfo("Living End", 115, Rarity.RARE, mage.cards.l.LivingEnd.class)); - cards.add(new SetCardInfo("Locket of Yesterdays", 258, Rarity.UNCOMMON, mage.cards.l.LocketOfYesterdays.class)); - cards.add(new SetCardInfo("Looter il-Kor", 66, Rarity.COMMON, mage.cards.l.LooterIlKor.class)); - cards.add(new SetCardInfo("Lotus Bloom", 259, Rarity.RARE, mage.cards.l.LotusBloom.class)); - cards.add(new SetCardInfo("Magus of the Candelabra", 203, Rarity.RARE, mage.cards.m.MagusOfTheCandelabra.class)); - cards.add(new SetCardInfo("Magus of the Disk", 27, Rarity.RARE, mage.cards.m.MagusOfTheDisk.class)); - cards.add(new SetCardInfo("Magus of the Jar", 67, Rarity.RARE, mage.cards.m.MagusOfTheJar.class)); - cards.add(new SetCardInfo("Magus of the Mirror", 116, Rarity.RARE, mage.cards.m.MagusOfTheMirror.class)); - cards.add(new SetCardInfo("Magus of the Scroll", 169, Rarity.RARE, mage.cards.m.MagusOfTheScroll.class)); - cards.add(new SetCardInfo("Mana Skimmer", 117, Rarity.COMMON, mage.cards.m.ManaSkimmer.class)); - cards.add(new SetCardInfo("Mangara of Corondor", 28, Rarity.RARE, mage.cards.m.MangaraOfCorondor.class)); - cards.add(new SetCardInfo("Might of Old Krosa", 204, Rarity.UNCOMMON, mage.cards.m.MightOfOldKrosa.class)); - cards.add(new SetCardInfo("Might Sliver", 205, Rarity.UNCOMMON, mage.cards.m.MightSliver.class)); - cards.add(new SetCardInfo("Mindlash Sliver", 118, Rarity.COMMON, mage.cards.m.MindlashSliver.class)); - cards.add(new SetCardInfo("Mindstab", 119, Rarity.COMMON, mage.cards.m.Mindstab.class)); - cards.add(new SetCardInfo("Mishra, Artificer Prodigy", 243, Rarity.RARE, mage.cards.m.MishraArtificerProdigy.class)); - cards.add(new SetCardInfo("Mogg War Marshal", 170, Rarity.COMMON, mage.cards.m.MoggWarMarshal.class)); - cards.add(new SetCardInfo("Molder", 206, Rarity.COMMON, mage.cards.m.Molder.class)); - cards.add(new SetCardInfo("Molten Slagheap", 276, Rarity.UNCOMMON, mage.cards.m.MoltenSlagheap.class)); - cards.add(new SetCardInfo("Momentary Blink", 29, Rarity.COMMON, mage.cards.m.MomentaryBlink.class)); - cards.add(new SetCardInfo("Moonlace", 68, Rarity.RARE, mage.cards.m.Moonlace.class)); - cards.add(new SetCardInfo("Mountain", 294, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Mountain", 295, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Mountain", 296, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Mountain", 297, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Mwonvuli Acid-Moss", 207, Rarity.COMMON, mage.cards.m.MwonvuliAcidMoss.class)); - cards.add(new SetCardInfo("Mystical Teachings", 69, Rarity.COMMON, mage.cards.m.MysticalTeachings.class)); - cards.add(new SetCardInfo("Nantuko Shaman", 208, Rarity.COMMON, mage.cards.n.NantukoShaman.class)); - cards.add(new SetCardInfo("Nether Traitor", 120, Rarity.RARE, mage.cards.n.NetherTraitor.class)); - cards.add(new SetCardInfo("Nightshade Assassin", 121, Rarity.UNCOMMON, mage.cards.n.NightshadeAssassin.class)); - cards.add(new SetCardInfo("Norin the Wary", 171, Rarity.RARE, mage.cards.n.NorinTheWary.class)); - cards.add(new SetCardInfo("Opal Guardian", 30, Rarity.RARE, mage.cards.o.OpalGuardian.class)); - cards.add(new SetCardInfo("Opaline Sliver", 244, Rarity.UNCOMMON, mage.cards.o.OpalineSliver.class)); - cards.add(new SetCardInfo("Ophidian Eye", 70, Rarity.COMMON, mage.cards.o.OphidianEye.class)); - cards.add(new SetCardInfo("Orcish Cannonade", 172, Rarity.COMMON, mage.cards.o.OrcishCannonade.class)); - cards.add(new SetCardInfo("Outrider en-Kor", 31, Rarity.UNCOMMON, mage.cards.o.OutriderEnKor.class)); - cards.add(new SetCardInfo("Paradox Haze", 71, Rarity.UNCOMMON, mage.cards.p.ParadoxHaze.class)); - cards.add(new SetCardInfo("Pardic Dragon", 173, Rarity.RARE, mage.cards.p.PardicDragon.class)); - cards.add(new SetCardInfo("Pendelhaven Elder", 209, Rarity.UNCOMMON, mage.cards.p.PendelhavenElder.class)); - cards.add(new SetCardInfo("Pentarch Ward", 33, Rarity.COMMON, mage.cards.p.PentarchWard.class)); - cards.add(new SetCardInfo("Penumbra Spider", 210, Rarity.COMMON, mage.cards.p.PenumbraSpider.class)); - cards.add(new SetCardInfo("Phantom Wurm", 211, Rarity.UNCOMMON, mage.cards.p.PhantomWurm.class)); - cards.add(new SetCardInfo("Phthisis", 122, Rarity.UNCOMMON, mage.cards.p.Phthisis.class)); - cards.add(new SetCardInfo("Phyrexian Totem", 261, Rarity.UNCOMMON, mage.cards.p.PhyrexianTotem.class)); - cards.add(new SetCardInfo("Pit Keeper", 123, Rarity.COMMON, mage.cards.p.PitKeeper.class)); - cards.add(new SetCardInfo("Plague Sliver", 124, Rarity.RARE, mage.cards.p.PlagueSliver.class)); - cards.add(new SetCardInfo("Plains", 282, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Plains", 283, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Plains", 284, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Plains", 285, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Plunder", 174, Rarity.COMMON, mage.cards.p.Plunder.class)); - cards.add(new SetCardInfo("Primal Forcemage", 212, Rarity.UNCOMMON, mage.cards.p.PrimalForcemage.class)); - cards.add(new SetCardInfo("Prismatic Lens", 262, Rarity.COMMON, mage.cards.p.PrismaticLens.class)); - cards.add(new SetCardInfo("Psionic Sliver", 72, Rarity.RARE, mage.cards.p.PsionicSliver.class)); - cards.add(new SetCardInfo("Psychotic Episode", 126, Rarity.COMMON, mage.cards.p.PsychoticEpisode.class)); - cards.add(new SetCardInfo("Pull from Eternity", 35, Rarity.UNCOMMON, mage.cards.p.PullFromEternity.class)); - cards.add(new SetCardInfo("Pulmonic Sliver", 36, Rarity.RARE, mage.cards.p.PulmonicSliver.class)); - cards.add(new SetCardInfo("Quilled Sliver", 37, Rarity.UNCOMMON, mage.cards.q.QuilledSliver.class)); - cards.add(new SetCardInfo("Reiterate", 175, Rarity.RARE, mage.cards.r.Reiterate.class)); - cards.add(new SetCardInfo("Restore Balance", 38, Rarity.RARE, mage.cards.r.RestoreBalance.class)); - cards.add(new SetCardInfo("Return to Dust", 39, Rarity.UNCOMMON, mage.cards.r.ReturnToDust.class)); - cards.add(new SetCardInfo("Rift Bolt", 176, Rarity.COMMON, mage.cards.r.RiftBolt.class)); - cards.add(new SetCardInfo("Riftwing Cloudskate", 73, Rarity.UNCOMMON, mage.cards.r.RiftwingCloudskate.class)); - cards.add(new SetCardInfo("Saffi Eriksdotter", 245, Rarity.RARE, mage.cards.s.SaffiEriksdotter.class)); - cards.add(new SetCardInfo("Sage of Epityr", 74, Rarity.COMMON, mage.cards.s.SageOfEpityr.class)); - cards.add(new SetCardInfo("Saltcrusted Steppe", 277, Rarity.UNCOMMON, mage.cards.s.SaltcrustedSteppe.class)); - cards.add(new SetCardInfo("Sangrophage", 127, Rarity.COMMON, mage.cards.s.Sangrophage.class)); - cards.add(new SetCardInfo("Sarpadian Empires, Vol. VII", 263, Rarity.RARE, mage.cards.s.SarpadianEmpiresVolVii.class)); - cards.add(new SetCardInfo("Savage Thallid", 213, Rarity.COMMON, mage.cards.s.SavageThallid.class)); - cards.add(new SetCardInfo("Scarwood Treefolk", 214, Rarity.COMMON, mage.cards.s.ScarwoodTreefolk.class)); - cards.add(new SetCardInfo("Scion of the Ur-Dragon", 246, Rarity.RARE, mage.cards.s.ScionOfTheUrDragon.class)); - cards.add(new SetCardInfo("Screeching Sliver", 75, Rarity.COMMON, mage.cards.s.ScreechingSliver.class)); - cards.add(new SetCardInfo("Scryb Ranger", 215, Rarity.UNCOMMON, mage.cards.s.ScrybRanger.class)); - cards.add(new SetCardInfo("Search for Tomorrow", 216, Rarity.COMMON, mage.cards.s.SearchForTomorrow.class)); - cards.add(new SetCardInfo("Sedge Sliver", 177, Rarity.RARE, mage.cards.s.SedgeSliver.class)); - cards.add(new SetCardInfo("Sengir Nosferatu", 128, Rarity.RARE, mage.cards.s.SengirNosferatu.class)); - cards.add(new SetCardInfo("Serra Avenger", 40, Rarity.RARE, mage.cards.s.SerraAvenger.class)); - cards.add(new SetCardInfo("Shadow Sliver", 76, Rarity.COMMON, mage.cards.s.ShadowSliver.class)); - cards.add(new SetCardInfo("Sidewinder Sliver", 41, Rarity.COMMON, mage.cards.s.SidewinderSliver.class)); - cards.add(new SetCardInfo("Skittering Monstrosity", 129, Rarity.UNCOMMON, mage.cards.s.SkitteringMonstrosity.class)); - cards.add(new SetCardInfo("Skulking Knight", 130, Rarity.COMMON, mage.cards.s.SkulkingKnight.class)); - cards.add(new SetCardInfo("Slipstream Serpent", 77, Rarity.COMMON, mage.cards.s.SlipstreamSerpent.class)); - cards.add(new SetCardInfo("Smallpox", 131, Rarity.UNCOMMON, mage.cards.s.Smallpox.class)); - cards.add(new SetCardInfo("Snapback", 78, Rarity.COMMON, mage.cards.s.Snapback.class)); - cards.add(new SetCardInfo("Spectral Force", 217, Rarity.RARE, mage.cards.s.SpectralForce.class)); - cards.add(new SetCardInfo("Spell Burst", 79, Rarity.UNCOMMON, mage.cards.s.SpellBurst.class)); - cards.add(new SetCardInfo("Spiketail Drakeling", 80, Rarity.COMMON, mage.cards.s.SpiketailDrakeling.class)); - cards.add(new SetCardInfo("Spinneret Sliver", 219, Rarity.COMMON, mage.cards.s.SpinneretSliver.class)); - cards.add(new SetCardInfo("Spirit Loop", 42, Rarity.UNCOMMON, mage.cards.s.SpiritLoop.class)); - cards.add(new SetCardInfo("Sporesower Thallid", 220, Rarity.UNCOMMON, mage.cards.s.SporesowerThallid.class)); - cards.add(new SetCardInfo("Sprite Noble", 81, Rarity.RARE, mage.cards.s.SpriteNoble.class)); - cards.add(new SetCardInfo("Sprout", 221, Rarity.COMMON, mage.cards.s.Sprout.class)); - cards.add(new SetCardInfo("Squall Line", 222, Rarity.RARE, mage.cards.s.SquallLine.class)); - cards.add(new SetCardInfo("Stonebrow, Krosan Hero", 247, Rarity.RARE, mage.cards.s.StonebrowKrosanHero.class)); - cards.add(new SetCardInfo("Stonewood Invocation", 223, Rarity.RARE, mage.cards.s.StonewoodInvocation.class)); - cards.add(new SetCardInfo("Stormcloud Djinn", 82, Rarity.UNCOMMON, mage.cards.s.StormcloudDjinn.class)); - cards.add(new SetCardInfo("Strangling Soot", 132, Rarity.COMMON, mage.cards.s.StranglingSoot.class)); - cards.add(new SetCardInfo("Strength in Numbers", 224, Rarity.COMMON, mage.cards.s.StrengthInNumbers.class)); - cards.add(new SetCardInfo("Stronghold Overseer", 133, Rarity.RARE, mage.cards.s.StrongholdOverseer.class)); - cards.add(new SetCardInfo("Stuffy Doll", 264, Rarity.RARE, mage.cards.s.StuffyDoll.class)); - cards.add(new SetCardInfo("Subterranean Shambler", 178, Rarity.COMMON, mage.cards.s.SubterraneanShambler.class)); - cards.add(new SetCardInfo("Sudden Death", 134, Rarity.UNCOMMON, mage.cards.s.SuddenDeath.class)); - cards.add(new SetCardInfo("Sudden Shock", 179, Rarity.UNCOMMON, mage.cards.s.SuddenShock.class)); - cards.add(new SetCardInfo("Sudden Spoiling", 135, Rarity.RARE, mage.cards.s.SuddenSpoiling.class)); - cards.add(new SetCardInfo("Sulfurous Blast", 180, Rarity.UNCOMMON, mage.cards.s.SulfurousBlast.class)); - cards.add(new SetCardInfo("Swamp", 290, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Swamp", 291, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Swamp", 292, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Swamp", 293, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); - cards.add(new SetCardInfo("Swarmyard", 278, Rarity.RARE, mage.cards.s.Swarmyard.class)); - cards.add(new SetCardInfo("Tectonic Fiend", 181, Rarity.UNCOMMON, mage.cards.t.TectonicFiend.class)); - cards.add(new SetCardInfo("Teferi, Mage of Zhalfir", 83, Rarity.RARE, mage.cards.t.TeferiMageOfZhalfir.class)); - cards.add(new SetCardInfo("Telekinetic Sliver", 84, Rarity.UNCOMMON, mage.cards.t.TelekineticSliver.class)); - cards.add(new SetCardInfo("Temporal Eddy", 85, Rarity.COMMON, mage.cards.t.TemporalEddy.class)); - cards.add(new SetCardInfo("Temporal Isolation", 43, Rarity.COMMON, mage.cards.t.TemporalIsolation.class)); - cards.add(new SetCardInfo("Tendrils of Corruption", 136, Rarity.COMMON, mage.cards.t.TendrilsOfCorruption.class)); - cards.add(new SetCardInfo("Terramorphic Expanse", 279, Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class)); - cards.add(new SetCardInfo("Thallid Germinator", 225, Rarity.COMMON, mage.cards.t.ThallidGerminator.class)); - cards.add(new SetCardInfo("Thallid Shell-Dweller", 226, Rarity.COMMON, mage.cards.t.ThallidShellDweller.class)); - cards.add(new SetCardInfo("Thelonite Hermit", 228, Rarity.RARE, mage.cards.t.TheloniteHermit.class)); - cards.add(new SetCardInfo("Thelon of Havenwood", 227, Rarity.RARE, mage.cards.t.ThelonOfHavenwood.class)); - cards.add(new SetCardInfo("Think Twice", 86, Rarity.COMMON, mage.cards.t.ThinkTwice.class)); - cards.add(new SetCardInfo("Thrill of the Hunt", 229, Rarity.COMMON, mage.cards.t.ThrillOfTheHunt.class)); - cards.add(new SetCardInfo("Thunder Totem", 265, Rarity.UNCOMMON, mage.cards.t.ThunderTotem.class)); - cards.add(new SetCardInfo("Tivadar of Thorn", 44, Rarity.RARE, mage.cards.t.TivadarOfThorn.class)); - cards.add(new SetCardInfo("Tolarian Sentinel", 87, Rarity.COMMON, mage.cards.t.TolarianSentinel.class)); - cards.add(new SetCardInfo("Traitor's Clutch", 137, Rarity.COMMON, mage.cards.t.TraitorsClutch.class)); - cards.add(new SetCardInfo("Trespasser il-Vec", 138, Rarity.COMMON, mage.cards.t.TrespasserIlVec.class)); - cards.add(new SetCardInfo("Trickbind", 88, Rarity.RARE, mage.cards.t.Trickbind.class)); - cards.add(new SetCardInfo("Triskelavus", 266, Rarity.RARE, mage.cards.t.Triskelavus.class)); - cards.add(new SetCardInfo("Tromp the Domains", 230, Rarity.UNCOMMON, mage.cards.t.TrompTheDomains.class)); - cards.add(new SetCardInfo("Two-Headed Sliver", 183, Rarity.COMMON, mage.cards.t.TwoHeadedSliver.class)); - cards.add(new SetCardInfo("Undying Rage", 184, Rarity.UNCOMMON, mage.cards.u.UndyingRage.class)); - cards.add(new SetCardInfo("Unyaro Bees", 231, Rarity.RARE, mage.cards.u.UnyaroBees.class)); - cards.add(new SetCardInfo("Urborg Syphon-Mage", 139, Rarity.COMMON, mage.cards.u.UrborgSyphonMage.class)); - cards.add(new SetCardInfo("Urza's Factory", 280, Rarity.UNCOMMON, mage.cards.u.UrzasFactory.class)); - cards.add(new SetCardInfo("Vampiric Sliver", 140, Rarity.UNCOMMON, mage.cards.v.VampiricSliver.class)); - cards.add(new SetCardInfo("Venser's Sliver", 267, Rarity.COMMON, mage.cards.v.VensersSliver.class)); - cards.add(new SetCardInfo("Verdant Embrace", 232, Rarity.RARE, mage.cards.v.VerdantEmbrace.class)); - cards.add(new SetCardInfo("Vesuva", 281, Rarity.RARE, mage.cards.v.Vesuva.class)); - cards.add(new SetCardInfo("Vesuvan Shapeshifter", 90, Rarity.RARE, mage.cards.v.VesuvanShapeshifter.class)); - cards.add(new SetCardInfo("Viashino Bladescout", 185, Rarity.COMMON, mage.cards.v.ViashinoBladescout.class)); - cards.add(new SetCardInfo("Viscerid Deepwalker", 91, Rarity.COMMON, mage.cards.v.VisceridDeepwalker.class)); - cards.add(new SetCardInfo("Viscid Lemures", 141, Rarity.COMMON, mage.cards.v.ViscidLemures.class)); - cards.add(new SetCardInfo("Voidmage Husher", 92, Rarity.UNCOMMON, mage.cards.v.VoidmageHusher.class)); - cards.add(new SetCardInfo("Volcanic Awakening", 186, Rarity.UNCOMMON, mage.cards.v.VolcanicAwakening.class)); - cards.add(new SetCardInfo("Walk the Aeons", 93, Rarity.RARE, mage.cards.w.WalkTheAeons.class)); - cards.add(new SetCardInfo("Watcher Sliver", 45, Rarity.COMMON, mage.cards.w.WatcherSliver.class)); - cards.add(new SetCardInfo("Wheel of Fate", 187, Rarity.RARE, mage.cards.w.WheelOfFate.class)); - cards.add(new SetCardInfo("Wipe Away", 94, Rarity.UNCOMMON, mage.cards.w.WipeAway.class)); - cards.add(new SetCardInfo("Word of Seizing", 188, Rarity.RARE, mage.cards.w.WordOfSeizing.class)); - cards.add(new SetCardInfo("Wormwood Dryad", 233, Rarity.COMMON, mage.cards.w.WormwoodDryad.class)); - cards.add(new SetCardInfo("Wurmcalling", 234, Rarity.RARE, mage.cards.w.Wurmcalling.class)); - cards.add(new SetCardInfo("Yavimaya Dryad", 235, Rarity.UNCOMMON, mage.cards.y.YavimayaDryad.class)); - cards.add(new SetCardInfo("Zealot il-Vec", 47, Rarity.COMMON, mage.cards.z.ZealotIlVec.class)); - } - - @Override - public List createBooster() { - List booster = super.createBooster(); - CardCriteria criteria = new CardCriteria(); - criteria.rarities(Rarity.SPECIAL).setCodes("TSB"); - addToBooster(booster, CardRepository.instance.findCards(criteria)); - return booster; - } -} +package mage.sets; + +import java.util.List; +import mage.cards.Card; +import mage.cards.CardGraphicInfo; +import mage.cards.ExpansionSet; +import mage.cards.repository.CardCriteria; +import mage.cards.repository.CardRepository; +import mage.constants.Rarity; +import mage.constants.SetType; + +public class TimeSpiral extends ExpansionSet { + + private static final TimeSpiral instance = new TimeSpiral(); + + public static TimeSpiral getInstance() { + return instance; + } + + private TimeSpiral() { + super("Time Spiral", "TSP", ExpansionSet.buildDate(2006, 9, 9), SetType.EXPANSION); + this.blockName = "Time Spiral"; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Academy Ruins", 269, Rarity.RARE, mage.cards.a.AcademyRuins.class)); + cards.add(new SetCardInfo("Amrou Scout", 1, Rarity.COMMON, mage.cards.a.AmrouScout.class)); + cards.add(new SetCardInfo("Amrou Seekers", 2, Rarity.COMMON, mage.cards.a.AmrouSeekers.class)); + cards.add(new SetCardInfo("Ancestral Vision", 48, Rarity.RARE, mage.cards.a.AncestralVision.class)); + cards.add(new SetCardInfo("Ancient Grudge", 143, Rarity.COMMON, mage.cards.a.AncientGrudge.class)); + cards.add(new SetCardInfo("Angel's Grace", 3, Rarity.RARE, mage.cards.a.AngelsGrace.class)); + cards.add(new SetCardInfo("Ashcoat Bear", 190, Rarity.COMMON, mage.cards.a.AshcoatBear.class)); + cards.add(new SetCardInfo("Aspect of Mongoose", 191, Rarity.UNCOMMON, mage.cards.a.AspectOfMongoose.class)); + cards.add(new SetCardInfo("Assassinate", 95, Rarity.COMMON, mage.cards.a.Assassinate.class)); + cards.add(new SetCardInfo("Assembly-Worker", 248, Rarity.UNCOMMON, mage.cards.a.AssemblyWorker.class)); + cards.add(new SetCardInfo("Barbed Shocker", 144, Rarity.UNCOMMON, mage.cards.b.BarbedShocker.class)); + cards.add(new SetCardInfo("Basal Sliver", 96, Rarity.COMMON, mage.cards.b.BasalSliver.class)); + cards.add(new SetCardInfo("Basalt Gargoyle", 145, Rarity.UNCOMMON, mage.cards.b.BasaltGargoyle.class)); + cards.add(new SetCardInfo("Benalish Cavalry", 4, Rarity.COMMON, mage.cards.b.BenalishCavalry.class)); + cards.add(new SetCardInfo("Bewilder", 49, Rarity.COMMON, mage.cards.b.Bewilder.class)); + cards.add(new SetCardInfo("Blazing Blade Askari", 146, Rarity.COMMON, mage.cards.b.BlazingBladeAskari.class)); + cards.add(new SetCardInfo("Bogardan Hellkite", 147, Rarity.RARE, mage.cards.b.BogardanHellkite.class)); + cards.add(new SetCardInfo("Bogardan Rager", 148, Rarity.COMMON, mage.cards.b.BogardanRager.class)); + cards.add(new SetCardInfo("Bonesplitter Sliver", 149, Rarity.COMMON, mage.cards.b.BonesplitterSliver.class)); + cards.add(new SetCardInfo("Brass Gnat", 249, Rarity.COMMON, mage.cards.b.BrassGnat.class)); + cards.add(new SetCardInfo("Brine Elemental", 50, Rarity.UNCOMMON, mage.cards.b.BrineElemental.class)); + cards.add(new SetCardInfo("Calciform Pools", 270, Rarity.UNCOMMON, mage.cards.c.CalciformPools.class)); + cards.add(new SetCardInfo("Call to the Netherworld", 97, Rarity.COMMON, mage.cards.c.CallToTheNetherworld.class)); + cards.add(new SetCardInfo("Cancel", 51, Rarity.COMMON, mage.cards.c.Cancel.class)); + cards.add(new SetCardInfo("Candles of Leng", 250, Rarity.RARE, mage.cards.c.CandlesOfLeng.class)); + cards.add(new SetCardInfo("Careful Consideration", 52, Rarity.UNCOMMON, mage.cards.c.CarefulConsideration.class)); + cards.add(new SetCardInfo("Castle Raptors", 5, Rarity.COMMON, mage.cards.c.CastleRaptors.class)); + cards.add(new SetCardInfo("Cavalry Master", 6, Rarity.UNCOMMON, mage.cards.c.CavalryMaster.class)); + cards.add(new SetCardInfo("Celestial Crusader", 7, Rarity.UNCOMMON, mage.cards.c.CelestialCrusader.class)); + cards.add(new SetCardInfo("Children of Korlis", 8, Rarity.COMMON, mage.cards.c.ChildrenOfKorlis.class)); + cards.add(new SetCardInfo("Chromatic Star", 251, Rarity.COMMON, mage.cards.c.ChromaticStar.class)); + cards.add(new SetCardInfo("Chronatog Totem", 252, Rarity.UNCOMMON, mage.cards.c.ChronatogTotem.class)); + cards.add(new SetCardInfo("Chronosavant", 9, Rarity.RARE, mage.cards.c.Chronosavant.class)); + cards.add(new SetCardInfo("Clockspinning", 53, Rarity.COMMON, mage.cards.c.Clockspinning.class)); + cards.add(new SetCardInfo("Clockwork Hydra", 253, Rarity.UNCOMMON, mage.cards.c.ClockworkHydra.class)); + cards.add(new SetCardInfo("Cloudchaser Kestrel", 10, Rarity.COMMON, mage.cards.c.CloudchaserKestrel.class)); + cards.add(new SetCardInfo("Coal Stoker", 150, Rarity.COMMON, mage.cards.c.CoalStoker.class)); + cards.add(new SetCardInfo("Conflagrate", 151, Rarity.UNCOMMON, mage.cards.c.Conflagrate.class)); + cards.add(new SetCardInfo("Coral Trickster", 54, Rarity.COMMON, mage.cards.c.CoralTrickster.class)); + cards.add(new SetCardInfo("Corpulent Corpse", 98, Rarity.COMMON, mage.cards.c.CorpulentCorpse.class)); + cards.add(new SetCardInfo("Crookclaw Transmuter", 55, Rarity.COMMON, mage.cards.c.CrookclawTransmuter.class)); + cards.add(new SetCardInfo("Curse of the Cabal", 99, Rarity.RARE, mage.cards.c.CurseOfTheCabal.class)); + cards.add(new SetCardInfo("Dark Withering", 101, Rarity.COMMON, mage.cards.d.DarkWithering.class)); + cards.add(new SetCardInfo("D'Avenant Healer", 11, Rarity.COMMON, mage.cards.d.DAvenantHealer.class)); + cards.add(new SetCardInfo("Deathspore Thallid", 102, Rarity.COMMON, mage.cards.d.DeathsporeThallid.class)); + cards.add(new SetCardInfo("Deep-Sea Kraken", 56, Rarity.RARE, mage.cards.d.DeepSeaKraken.class)); + cards.add(new SetCardInfo("Dementia Sliver", 236, Rarity.UNCOMMON, mage.cards.d.DementiaSliver.class)); + cards.add(new SetCardInfo("Demonic Collusion", 103, Rarity.RARE, mage.cards.d.DemonicCollusion.class)); + cards.add(new SetCardInfo("Draining Whelk", 57, Rarity.RARE, mage.cards.d.DrainingWhelk.class)); + cards.add(new SetCardInfo("Dralnu, Lich Lord", 237, Rarity.RARE, mage.cards.d.DralnuLichLord.class)); + cards.add(new SetCardInfo("Dread Return", 104, Rarity.UNCOMMON, mage.cards.d.DreadReturn.class)); + cards.add(new SetCardInfo("Dreadship Reef", 271, Rarity.UNCOMMON, mage.cards.d.DreadshipReef.class)); + cards.add(new SetCardInfo("Dream Stalker", 58, Rarity.COMMON, mage.cards.d.DreamStalker.class)); + cards.add(new SetCardInfo("Drifter il-Dal", 59, Rarity.COMMON, mage.cards.d.DrifterIlDal.class)); + cards.add(new SetCardInfo("Drudge Reavers", 105, Rarity.COMMON, mage.cards.d.DrudgeReavers.class)); + cards.add(new SetCardInfo("Durkwood Baloth", 193, Rarity.COMMON, mage.cards.d.DurkwoodBaloth.class)); + cards.add(new SetCardInfo("Duskrider Peregrine", 14, Rarity.UNCOMMON, mage.cards.d.DuskriderPeregrine.class)); + cards.add(new SetCardInfo("Empty the Warrens", 152, Rarity.COMMON, mage.cards.e.EmptyTheWarrens.class)); + cards.add(new SetCardInfo("Endrek Sahr, Master Breeder", 106, Rarity.RARE, mage.cards.e.EndrekSahrMasterBreeder.class)); + cards.add(new SetCardInfo("Errant Doomsayers", 15, Rarity.COMMON, mage.cards.e.ErrantDoomsayers.class)); + cards.add(new SetCardInfo("Errant Ephemeron", 60, Rarity.COMMON, mage.cards.e.ErrantEphemeron.class)); + cards.add(new SetCardInfo("Eternity Snare", 61, Rarity.COMMON, mage.cards.e.EternitySnare.class)); + cards.add(new SetCardInfo("Evangelize", 16, Rarity.RARE, mage.cards.e.Evangelize.class)); + cards.add(new SetCardInfo("Evil Eye of Urborg", 107, Rarity.UNCOMMON, mage.cards.e.EvilEyeOfUrborg.class)); + cards.add(new SetCardInfo("Faceless Devourer", 108, Rarity.UNCOMMON, mage.cards.f.FacelessDevourer.class)); + cards.add(new SetCardInfo("Fallen Ideal", 109, Rarity.UNCOMMON, mage.cards.f.FallenIdeal.class)); + cards.add(new SetCardInfo("Fathom Seer", 62, Rarity.COMMON, mage.cards.f.FathomSeer.class)); + cards.add(new SetCardInfo("Feebleness", 110, Rarity.COMMON, mage.cards.f.Feebleness.class)); + cards.add(new SetCardInfo("Firemaw Kavu", 153, Rarity.UNCOMMON, mage.cards.f.FiremawKavu.class)); + cards.add(new SetCardInfo("Firewake Sliver", 238, Rarity.UNCOMMON, mage.cards.f.FirewakeSliver.class)); + cards.add(new SetCardInfo("Flagstones of Trokair", 272, Rarity.RARE, mage.cards.f.FlagstonesOfTrokair.class)); + cards.add(new SetCardInfo("Flamecore Elemental", 154, Rarity.COMMON, mage.cards.f.FlamecoreElemental.class)); + cards.add(new SetCardInfo("Fledgling Mawcor", 63, Rarity.UNCOMMON, mage.cards.f.FledglingMawcor.class)); + cards.add(new SetCardInfo("Flickering Spirit", 17, Rarity.COMMON, mage.cards.f.FlickeringSpirit.class)); + cards.add(new SetCardInfo("Fool's Demise", 64, Rarity.UNCOMMON, mage.cards.f.FoolsDemise.class)); + cards.add(new SetCardInfo("Forest", 298, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Forest", 299, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Forest", 300, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Forest", 301, Rarity.LAND, mage.cards.basiclands.Forest.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Foriysian Interceptor", 18, Rarity.COMMON, mage.cards.f.ForiysianInterceptor.class)); + cards.add(new SetCardInfo("Foriysian Totem", 254, Rarity.UNCOMMON, mage.cards.f.ForiysianTotem.class)); + cards.add(new SetCardInfo("Fortify", 19, Rarity.COMMON, mage.cards.f.Fortify.class)); + cards.add(new SetCardInfo("Fortune Thief", 156, Rarity.RARE, mage.cards.f.FortuneThief.class)); + cards.add(new SetCardInfo("Fungal Reaches", 273, Rarity.UNCOMMON, mage.cards.f.FungalReaches.class)); + cards.add(new SetCardInfo("Fungus Sliver", 195, Rarity.RARE, mage.cards.f.FungusSliver.class)); + cards.add(new SetCardInfo("Fury Sliver", 157, Rarity.UNCOMMON, mage.cards.f.FurySliver.class)); + cards.add(new SetCardInfo("Gauntlet of Power", 255, Rarity.RARE, mage.cards.g.GauntletOfPower.class)); + cards.add(new SetCardInfo("Gaze of Justice", 20, Rarity.COMMON, mage.cards.g.GazeOfJustice.class)); + cards.add(new SetCardInfo("Gemhide Sliver", 196, Rarity.COMMON, mage.cards.g.GemhideSliver.class)); + cards.add(new SetCardInfo("Gemstone Caverns", 274, Rarity.RARE, mage.cards.g.GemstoneCaverns.class)); + cards.add(new SetCardInfo("Ghitu Firebreathing", 158, Rarity.COMMON, mage.cards.g.GhituFirebreathing.class)); + cards.add(new SetCardInfo("Ghostflame Sliver", 239, Rarity.UNCOMMON, mage.cards.g.GhostflameSliver.class)); + cards.add(new SetCardInfo("Glass Asp", 197, Rarity.COMMON, mage.cards.g.GlassAsp.class)); + cards.add(new SetCardInfo("Goblin Skycutter", 159, Rarity.COMMON, mage.cards.g.GoblinSkycutter.class)); + cards.add(new SetCardInfo("Gorgon Recluse", 111, Rarity.COMMON, mage.cards.g.GorgonRecluse.class)); + cards.add(new SetCardInfo("Grapeshot", 160, Rarity.COMMON, mage.cards.g.Grapeshot.class)); + cards.add(new SetCardInfo("Greater Gargadon", 161, Rarity.RARE, mage.cards.g.GreaterGargadon.class)); + cards.add(new SetCardInfo("Greenseeker", 198, Rarity.COMMON, mage.cards.g.Greenseeker.class)); + cards.add(new SetCardInfo("Griffin Guide", 21, Rarity.UNCOMMON, mage.cards.g.GriffinGuide.class)); + cards.add(new SetCardInfo("Ground Rift", 162, Rarity.COMMON, mage.cards.g.GroundRift.class)); + cards.add(new SetCardInfo("Gustcloak Cavalier", 22, Rarity.UNCOMMON, mage.cards.g.GustcloakCavalier.class)); + cards.add(new SetCardInfo("Harmonic Sliver", 240, Rarity.UNCOMMON, mage.cards.h.HarmonicSliver.class)); + cards.add(new SetCardInfo("Haunting Hymn", 112, Rarity.UNCOMMON, mage.cards.h.HauntingHymn.class)); + cards.add(new SetCardInfo("Havenwood Wurm", 199, Rarity.COMMON, mage.cards.h.HavenwoodWurm.class)); + cards.add(new SetCardInfo("Herd Gnarr", 200, Rarity.COMMON, mage.cards.h.HerdGnarr.class)); + cards.add(new SetCardInfo("Hivestone", 256, Rarity.RARE, mage.cards.h.Hivestone.class)); + cards.add(new SetCardInfo("Hypergenesis", 201, Rarity.RARE, mage.cards.h.Hypergenesis.class)); + cards.add(new SetCardInfo("Ib Halfheart, Goblin Tactician", 163, Rarity.RARE, mage.cards.i.IbHalfheartGoblinTactician.class)); + cards.add(new SetCardInfo("Icatian Crier", 23, Rarity.COMMON, mage.cards.i.IcatianCrier.class)); + cards.add(new SetCardInfo("Ignite Memories", 164, Rarity.UNCOMMON, mage.cards.i.IgniteMemories.class)); + cards.add(new SetCardInfo("Ironclaw Buzzardiers", 165, Rarity.COMMON, mage.cards.i.IronclawBuzzardiers.class)); + cards.add(new SetCardInfo("Island", 286, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Island", 287, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Island", 288, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Island", 289, Rarity.LAND, mage.cards.basiclands.Island.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Ith, High Arcanist", 241, Rarity.RARE, mage.cards.i.IthHighArcanist.class)); + cards.add(new SetCardInfo("Ivory Giant", 24, Rarity.COMMON, mage.cards.i.IvoryGiant.class)); + cards.add(new SetCardInfo("Ixidron", 65, Rarity.RARE, mage.cards.i.Ixidron.class)); + cards.add(new SetCardInfo("Jaya Ballard, Task Mage", 166, Rarity.RARE, mage.cards.j.JayaBallardTaskMage.class)); + cards.add(new SetCardInfo("Jedit's Dragoons", 25, Rarity.COMMON, mage.cards.j.JeditsDragoons.class)); + cards.add(new SetCardInfo("Jhoira's Timebug", 257, Rarity.COMMON, mage.cards.j.JhoirasTimebug.class)); + cards.add(new SetCardInfo("Kaervek the Merciless", 242, Rarity.RARE, mage.cards.k.KaervekTheMerciless.class)); + cards.add(new SetCardInfo("Keldon Halberdier", 167, Rarity.COMMON, mage.cards.k.KeldonHalberdier.class)); + cards.add(new SetCardInfo("Kher Keep", 275, Rarity.RARE, mage.cards.k.KherKeep.class)); + cards.add(new SetCardInfo("Knight of the Holy Nimbus", 26, Rarity.UNCOMMON, mage.cards.k.KnightOfTheHolyNimbus.class)); + cards.add(new SetCardInfo("Krosan Grip", 202, Rarity.UNCOMMON, mage.cards.k.KrosanGrip.class)); + cards.add(new SetCardInfo("Liege of the Pit", 113, Rarity.RARE, mage.cards.l.LiegeOfThePit.class)); + cards.add(new SetCardInfo("Lightning Axe", 168, Rarity.COMMON, mage.cards.l.LightningAxe.class)); + cards.add(new SetCardInfo("Lim-Dul the Necromancer", 114, Rarity.RARE, mage.cards.l.LimDulTheNecromancer.class)); + cards.add(new SetCardInfo("Living End", 115, Rarity.RARE, mage.cards.l.LivingEnd.class)); + cards.add(new SetCardInfo("Locket of Yesterdays", 258, Rarity.UNCOMMON, mage.cards.l.LocketOfYesterdays.class)); + cards.add(new SetCardInfo("Looter il-Kor", 66, Rarity.COMMON, mage.cards.l.LooterIlKor.class)); + cards.add(new SetCardInfo("Lotus Bloom", 259, Rarity.RARE, mage.cards.l.LotusBloom.class)); + cards.add(new SetCardInfo("Magus of the Candelabra", 203, Rarity.RARE, mage.cards.m.MagusOfTheCandelabra.class)); + cards.add(new SetCardInfo("Magus of the Disk", 27, Rarity.RARE, mage.cards.m.MagusOfTheDisk.class)); + cards.add(new SetCardInfo("Magus of the Jar", 67, Rarity.RARE, mage.cards.m.MagusOfTheJar.class)); + cards.add(new SetCardInfo("Magus of the Mirror", 116, Rarity.RARE, mage.cards.m.MagusOfTheMirror.class)); + cards.add(new SetCardInfo("Magus of the Scroll", 169, Rarity.RARE, mage.cards.m.MagusOfTheScroll.class)); + cards.add(new SetCardInfo("Mana Skimmer", 117, Rarity.COMMON, mage.cards.m.ManaSkimmer.class)); + cards.add(new SetCardInfo("Mangara of Corondor", 28, Rarity.RARE, mage.cards.m.MangaraOfCorondor.class)); + cards.add(new SetCardInfo("Might of Old Krosa", 204, Rarity.UNCOMMON, mage.cards.m.MightOfOldKrosa.class)); + cards.add(new SetCardInfo("Might Sliver", 205, Rarity.UNCOMMON, mage.cards.m.MightSliver.class)); + cards.add(new SetCardInfo("Mindlash Sliver", 118, Rarity.COMMON, mage.cards.m.MindlashSliver.class)); + cards.add(new SetCardInfo("Mindstab", 119, Rarity.COMMON, mage.cards.m.Mindstab.class)); + cards.add(new SetCardInfo("Mishra, Artificer Prodigy", 243, Rarity.RARE, mage.cards.m.MishraArtificerProdigy.class)); + cards.add(new SetCardInfo("Mogg War Marshal", 170, Rarity.COMMON, mage.cards.m.MoggWarMarshal.class)); + cards.add(new SetCardInfo("Molder", 206, Rarity.COMMON, mage.cards.m.Molder.class)); + cards.add(new SetCardInfo("Molten Slagheap", 276, Rarity.UNCOMMON, mage.cards.m.MoltenSlagheap.class)); + cards.add(new SetCardInfo("Momentary Blink", 29, Rarity.COMMON, mage.cards.m.MomentaryBlink.class)); + cards.add(new SetCardInfo("Moonlace", 68, Rarity.RARE, mage.cards.m.Moonlace.class)); + cards.add(new SetCardInfo("Mountain", 294, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Mountain", 295, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Mountain", 296, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Mountain", 297, Rarity.LAND, mage.cards.basiclands.Mountain.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Mwonvuli Acid-Moss", 207, Rarity.COMMON, mage.cards.m.MwonvuliAcidMoss.class)); + cards.add(new SetCardInfo("Mystical Teachings", 69, Rarity.COMMON, mage.cards.m.MysticalTeachings.class)); + cards.add(new SetCardInfo("Nantuko Shaman", 208, Rarity.COMMON, mage.cards.n.NantukoShaman.class)); + cards.add(new SetCardInfo("Nether Traitor", 120, Rarity.RARE, mage.cards.n.NetherTraitor.class)); + cards.add(new SetCardInfo("Nightshade Assassin", 121, Rarity.UNCOMMON, mage.cards.n.NightshadeAssassin.class)); + cards.add(new SetCardInfo("Norin the Wary", 171, Rarity.RARE, mage.cards.n.NorinTheWary.class)); + cards.add(new SetCardInfo("Opal Guardian", 30, Rarity.RARE, mage.cards.o.OpalGuardian.class)); + cards.add(new SetCardInfo("Opaline Sliver", 244, Rarity.UNCOMMON, mage.cards.o.OpalineSliver.class)); + cards.add(new SetCardInfo("Ophidian Eye", 70, Rarity.COMMON, mage.cards.o.OphidianEye.class)); + cards.add(new SetCardInfo("Orcish Cannonade", 172, Rarity.COMMON, mage.cards.o.OrcishCannonade.class)); + cards.add(new SetCardInfo("Outrider en-Kor", 31, Rarity.UNCOMMON, mage.cards.o.OutriderEnKor.class)); + cards.add(new SetCardInfo("Paradox Haze", 71, Rarity.UNCOMMON, mage.cards.p.ParadoxHaze.class)); + cards.add(new SetCardInfo("Pardic Dragon", 173, Rarity.RARE, mage.cards.p.PardicDragon.class)); + cards.add(new SetCardInfo("Pendelhaven Elder", 209, Rarity.UNCOMMON, mage.cards.p.PendelhavenElder.class)); + cards.add(new SetCardInfo("Pentarch Paladin", 32, Rarity.RARE, mage.cards.p.PentarchPaladin.class)); + cards.add(new SetCardInfo("Pentarch Ward", 33, Rarity.COMMON, mage.cards.p.PentarchWard.class)); + cards.add(new SetCardInfo("Penumbra Spider", 210, Rarity.COMMON, mage.cards.p.PenumbraSpider.class)); + cards.add(new SetCardInfo("Phantom Wurm", 211, Rarity.UNCOMMON, mage.cards.p.PhantomWurm.class)); + cards.add(new SetCardInfo("Phthisis", 122, Rarity.UNCOMMON, mage.cards.p.Phthisis.class)); + cards.add(new SetCardInfo("Phyrexian Totem", 261, Rarity.UNCOMMON, mage.cards.p.PhyrexianTotem.class)); + cards.add(new SetCardInfo("Pit Keeper", 123, Rarity.COMMON, mage.cards.p.PitKeeper.class)); + cards.add(new SetCardInfo("Plague Sliver", 124, Rarity.RARE, mage.cards.p.PlagueSliver.class)); + cards.add(new SetCardInfo("Plains", 282, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Plains", 283, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Plains", 284, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Plains", 285, Rarity.LAND, mage.cards.basiclands.Plains.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Plunder", 174, Rarity.COMMON, mage.cards.p.Plunder.class)); + cards.add(new SetCardInfo("Primal Forcemage", 212, Rarity.UNCOMMON, mage.cards.p.PrimalForcemage.class)); + cards.add(new SetCardInfo("Prismatic Lens", 262, Rarity.COMMON, mage.cards.p.PrismaticLens.class)); + cards.add(new SetCardInfo("Psionic Sliver", 72, Rarity.RARE, mage.cards.p.PsionicSliver.class)); + cards.add(new SetCardInfo("Psychotic Episode", 126, Rarity.COMMON, mage.cards.p.PsychoticEpisode.class)); + cards.add(new SetCardInfo("Pull from Eternity", 35, Rarity.UNCOMMON, mage.cards.p.PullFromEternity.class)); + cards.add(new SetCardInfo("Pulmonic Sliver", 36, Rarity.RARE, mage.cards.p.PulmonicSliver.class)); + cards.add(new SetCardInfo("Quilled Sliver", 37, Rarity.UNCOMMON, mage.cards.q.QuilledSliver.class)); + cards.add(new SetCardInfo("Reiterate", 175, Rarity.RARE, mage.cards.r.Reiterate.class)); + cards.add(new SetCardInfo("Restore Balance", 38, Rarity.RARE, mage.cards.r.RestoreBalance.class)); + cards.add(new SetCardInfo("Return to Dust", 39, Rarity.UNCOMMON, mage.cards.r.ReturnToDust.class)); + cards.add(new SetCardInfo("Rift Bolt", 176, Rarity.COMMON, mage.cards.r.RiftBolt.class)); + cards.add(new SetCardInfo("Riftwing Cloudskate", 73, Rarity.UNCOMMON, mage.cards.r.RiftwingCloudskate.class)); + cards.add(new SetCardInfo("Saffi Eriksdotter", 245, Rarity.RARE, mage.cards.s.SaffiEriksdotter.class)); + cards.add(new SetCardInfo("Sage of Epityr", 74, Rarity.COMMON, mage.cards.s.SageOfEpityr.class)); + cards.add(new SetCardInfo("Saltcrusted Steppe", 277, Rarity.UNCOMMON, mage.cards.s.SaltcrustedSteppe.class)); + cards.add(new SetCardInfo("Sangrophage", 127, Rarity.COMMON, mage.cards.s.Sangrophage.class)); + cards.add(new SetCardInfo("Sarpadian Empires, Vol. VII", 263, Rarity.RARE, mage.cards.s.SarpadianEmpiresVolVii.class)); + cards.add(new SetCardInfo("Savage Thallid", 213, Rarity.COMMON, mage.cards.s.SavageThallid.class)); + cards.add(new SetCardInfo("Scarwood Treefolk", 214, Rarity.COMMON, mage.cards.s.ScarwoodTreefolk.class)); + cards.add(new SetCardInfo("Scion of the Ur-Dragon", 246, Rarity.RARE, mage.cards.s.ScionOfTheUrDragon.class)); + cards.add(new SetCardInfo("Screeching Sliver", 75, Rarity.COMMON, mage.cards.s.ScreechingSliver.class)); + cards.add(new SetCardInfo("Scryb Ranger", 215, Rarity.UNCOMMON, mage.cards.s.ScrybRanger.class)); + cards.add(new SetCardInfo("Search for Tomorrow", 216, Rarity.COMMON, mage.cards.s.SearchForTomorrow.class)); + cards.add(new SetCardInfo("Sedge Sliver", 177, Rarity.RARE, mage.cards.s.SedgeSliver.class)); + cards.add(new SetCardInfo("Sengir Nosferatu", 128, Rarity.RARE, mage.cards.s.SengirNosferatu.class)); + cards.add(new SetCardInfo("Serra Avenger", 40, Rarity.RARE, mage.cards.s.SerraAvenger.class)); + cards.add(new SetCardInfo("Shadow Sliver", 76, Rarity.COMMON, mage.cards.s.ShadowSliver.class)); + cards.add(new SetCardInfo("Sidewinder Sliver", 41, Rarity.COMMON, mage.cards.s.SidewinderSliver.class)); + cards.add(new SetCardInfo("Skittering Monstrosity", 129, Rarity.UNCOMMON, mage.cards.s.SkitteringMonstrosity.class)); + cards.add(new SetCardInfo("Skulking Knight", 130, Rarity.COMMON, mage.cards.s.SkulkingKnight.class)); + cards.add(new SetCardInfo("Slipstream Serpent", 77, Rarity.COMMON, mage.cards.s.SlipstreamSerpent.class)); + cards.add(new SetCardInfo("Smallpox", 131, Rarity.UNCOMMON, mage.cards.s.Smallpox.class)); + cards.add(new SetCardInfo("Snapback", 78, Rarity.COMMON, mage.cards.s.Snapback.class)); + cards.add(new SetCardInfo("Spectral Force", 217, Rarity.RARE, mage.cards.s.SpectralForce.class)); + cards.add(new SetCardInfo("Spell Burst", 79, Rarity.UNCOMMON, mage.cards.s.SpellBurst.class)); + cards.add(new SetCardInfo("Spiketail Drakeling", 80, Rarity.COMMON, mage.cards.s.SpiketailDrakeling.class)); + cards.add(new SetCardInfo("Spinneret Sliver", 219, Rarity.COMMON, mage.cards.s.SpinneretSliver.class)); + cards.add(new SetCardInfo("Spirit Loop", 42, Rarity.UNCOMMON, mage.cards.s.SpiritLoop.class)); + cards.add(new SetCardInfo("Sporesower Thallid", 220, Rarity.UNCOMMON, mage.cards.s.SporesowerThallid.class)); + cards.add(new SetCardInfo("Sprite Noble", 81, Rarity.RARE, mage.cards.s.SpriteNoble.class)); + cards.add(new SetCardInfo("Sprout", 221, Rarity.COMMON, mage.cards.s.Sprout.class)); + cards.add(new SetCardInfo("Squall Line", 222, Rarity.RARE, mage.cards.s.SquallLine.class)); + cards.add(new SetCardInfo("Stonebrow, Krosan Hero", 247, Rarity.RARE, mage.cards.s.StonebrowKrosanHero.class)); + cards.add(new SetCardInfo("Stonewood Invocation", 223, Rarity.RARE, mage.cards.s.StonewoodInvocation.class)); + cards.add(new SetCardInfo("Stormcloud Djinn", 82, Rarity.UNCOMMON, mage.cards.s.StormcloudDjinn.class)); + cards.add(new SetCardInfo("Strangling Soot", 132, Rarity.COMMON, mage.cards.s.StranglingSoot.class)); + cards.add(new SetCardInfo("Strength in Numbers", 224, Rarity.COMMON, mage.cards.s.StrengthInNumbers.class)); + cards.add(new SetCardInfo("Stronghold Overseer", 133, Rarity.RARE, mage.cards.s.StrongholdOverseer.class)); + cards.add(new SetCardInfo("Stuffy Doll", 264, Rarity.RARE, mage.cards.s.StuffyDoll.class)); + cards.add(new SetCardInfo("Subterranean Shambler", 178, Rarity.COMMON, mage.cards.s.SubterraneanShambler.class)); + cards.add(new SetCardInfo("Sudden Death", 134, Rarity.UNCOMMON, mage.cards.s.SuddenDeath.class)); + cards.add(new SetCardInfo("Sudden Shock", 179, Rarity.UNCOMMON, mage.cards.s.SuddenShock.class)); + cards.add(new SetCardInfo("Sudden Spoiling", 135, Rarity.RARE, mage.cards.s.SuddenSpoiling.class)); + cards.add(new SetCardInfo("Sulfurous Blast", 180, Rarity.UNCOMMON, mage.cards.s.SulfurousBlast.class)); + cards.add(new SetCardInfo("Swamp", 290, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Swamp", 291, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Swamp", 292, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Swamp", 293, Rarity.LAND, mage.cards.basiclands.Swamp.class, new CardGraphicInfo(null, true))); + cards.add(new SetCardInfo("Swarmyard", 278, Rarity.RARE, mage.cards.s.Swarmyard.class)); + cards.add(new SetCardInfo("Tectonic Fiend", 181, Rarity.UNCOMMON, mage.cards.t.TectonicFiend.class)); + cards.add(new SetCardInfo("Teferi, Mage of Zhalfir", 83, Rarity.RARE, mage.cards.t.TeferiMageOfZhalfir.class)); + cards.add(new SetCardInfo("Telekinetic Sliver", 84, Rarity.UNCOMMON, mage.cards.t.TelekineticSliver.class)); + cards.add(new SetCardInfo("Temporal Eddy", 85, Rarity.COMMON, mage.cards.t.TemporalEddy.class)); + cards.add(new SetCardInfo("Temporal Isolation", 43, Rarity.COMMON, mage.cards.t.TemporalIsolation.class)); + cards.add(new SetCardInfo("Tendrils of Corruption", 136, Rarity.COMMON, mage.cards.t.TendrilsOfCorruption.class)); + cards.add(new SetCardInfo("Terramorphic Expanse", 279, Rarity.COMMON, mage.cards.t.TerramorphicExpanse.class)); + cards.add(new SetCardInfo("Thallid Germinator", 225, Rarity.COMMON, mage.cards.t.ThallidGerminator.class)); + cards.add(new SetCardInfo("Thallid Shell-Dweller", 226, Rarity.COMMON, mage.cards.t.ThallidShellDweller.class)); + cards.add(new SetCardInfo("Thelonite Hermit", 228, Rarity.RARE, mage.cards.t.TheloniteHermit.class)); + cards.add(new SetCardInfo("Thelon of Havenwood", 227, Rarity.RARE, mage.cards.t.ThelonOfHavenwood.class)); + cards.add(new SetCardInfo("Think Twice", 86, Rarity.COMMON, mage.cards.t.ThinkTwice.class)); + cards.add(new SetCardInfo("Thrill of the Hunt", 229, Rarity.COMMON, mage.cards.t.ThrillOfTheHunt.class)); + cards.add(new SetCardInfo("Thunder Totem", 265, Rarity.UNCOMMON, mage.cards.t.ThunderTotem.class)); + cards.add(new SetCardInfo("Tivadar of Thorn", 44, Rarity.RARE, mage.cards.t.TivadarOfThorn.class)); + cards.add(new SetCardInfo("Tolarian Sentinel", 87, Rarity.COMMON, mage.cards.t.TolarianSentinel.class)); + cards.add(new SetCardInfo("Traitor's Clutch", 137, Rarity.COMMON, mage.cards.t.TraitorsClutch.class)); + cards.add(new SetCardInfo("Trespasser il-Vec", 138, Rarity.COMMON, mage.cards.t.TrespasserIlVec.class)); + cards.add(new SetCardInfo("Trickbind", 88, Rarity.RARE, mage.cards.t.Trickbind.class)); + cards.add(new SetCardInfo("Triskelavus", 266, Rarity.RARE, mage.cards.t.Triskelavus.class)); + cards.add(new SetCardInfo("Tromp the Domains", 230, Rarity.UNCOMMON, mage.cards.t.TrompTheDomains.class)); + cards.add(new SetCardInfo("Two-Headed Sliver", 183, Rarity.COMMON, mage.cards.t.TwoHeadedSliver.class)); + cards.add(new SetCardInfo("Undying Rage", 184, Rarity.UNCOMMON, mage.cards.u.UndyingRage.class)); + cards.add(new SetCardInfo("Unyaro Bees", 231, Rarity.RARE, mage.cards.u.UnyaroBees.class)); + cards.add(new SetCardInfo("Urborg Syphon-Mage", 139, Rarity.COMMON, mage.cards.u.UrborgSyphonMage.class)); + cards.add(new SetCardInfo("Urza's Factory", 280, Rarity.UNCOMMON, mage.cards.u.UrzasFactory.class)); + cards.add(new SetCardInfo("Vampiric Sliver", 140, Rarity.UNCOMMON, mage.cards.v.VampiricSliver.class)); + cards.add(new SetCardInfo("Venser's Sliver", 267, Rarity.COMMON, mage.cards.v.VensersSliver.class)); + cards.add(new SetCardInfo("Verdant Embrace", 232, Rarity.RARE, mage.cards.v.VerdantEmbrace.class)); + cards.add(new SetCardInfo("Vesuva", 281, Rarity.RARE, mage.cards.v.Vesuva.class)); + cards.add(new SetCardInfo("Vesuvan Shapeshifter", 90, Rarity.RARE, mage.cards.v.VesuvanShapeshifter.class)); + cards.add(new SetCardInfo("Viashino Bladescout", 185, Rarity.COMMON, mage.cards.v.ViashinoBladescout.class)); + cards.add(new SetCardInfo("Viscerid Deepwalker", 91, Rarity.COMMON, mage.cards.v.VisceridDeepwalker.class)); + cards.add(new SetCardInfo("Viscid Lemures", 141, Rarity.COMMON, mage.cards.v.ViscidLemures.class)); + cards.add(new SetCardInfo("Voidmage Husher", 92, Rarity.UNCOMMON, mage.cards.v.VoidmageHusher.class)); + cards.add(new SetCardInfo("Volcanic Awakening", 186, Rarity.UNCOMMON, mage.cards.v.VolcanicAwakening.class)); + cards.add(new SetCardInfo("Walk the Aeons", 93, Rarity.RARE, mage.cards.w.WalkTheAeons.class)); + cards.add(new SetCardInfo("Watcher Sliver", 45, Rarity.COMMON, mage.cards.w.WatcherSliver.class)); + cards.add(new SetCardInfo("Wheel of Fate", 187, Rarity.RARE, mage.cards.w.WheelOfFate.class)); + cards.add(new SetCardInfo("Wipe Away", 94, Rarity.UNCOMMON, mage.cards.w.WipeAway.class)); + cards.add(new SetCardInfo("Word of Seizing", 188, Rarity.RARE, mage.cards.w.WordOfSeizing.class)); + cards.add(new SetCardInfo("Wormwood Dryad", 233, Rarity.COMMON, mage.cards.w.WormwoodDryad.class)); + cards.add(new SetCardInfo("Wurmcalling", 234, Rarity.RARE, mage.cards.w.Wurmcalling.class)); + cards.add(new SetCardInfo("Yavimaya Dryad", 235, Rarity.UNCOMMON, mage.cards.y.YavimayaDryad.class)); + cards.add(new SetCardInfo("Zealot il-Vec", 47, Rarity.COMMON, mage.cards.z.ZealotIlVec.class)); + } + + @Override + public List createBooster() { + List booster = super.createBooster(); + CardCriteria criteria = new CardCriteria(); + criteria.rarities(Rarity.SPECIAL).setCodes("TSB"); + addToBooster(booster, CardRepository.instance.findCards(criteria)); + return booster; + } +} From 8ecb5e1511655235b1ad9e759e436ffc771d45ec Mon Sep 17 00:00:00 2001 From: Jeff Date: Fri, 28 Jul 2017 15:43:47 -0500 Subject: [PATCH 03/15] - Added Paradise Plume. --- Mage.Sets/src/mage/cards/p/ParadisePlume.java | 157 ++++++++++++++++++ Mage.Sets/src/mage/sets/TimeSpiral.java | 1 + 2 files changed, 158 insertions(+) create mode 100644 Mage.Sets/src/mage/cards/p/ParadisePlume.java diff --git a/Mage.Sets/src/mage/cards/p/ParadisePlume.java b/Mage.Sets/src/mage/cards/p/ParadisePlume.java new file mode 100644 index 00000000000..b1a1de9ddae --- /dev/null +++ b/Mage.Sets/src/mage/cards/p/ParadisePlume.java @@ -0,0 +1,157 @@ +/* + * 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.p; + +import java.util.UUID; +import mage.Mana; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.AsEntersBattlefieldAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.ChooseColorEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.effects.common.ManaEffect; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.stack.Spell; +import mage.players.Player; + +/** + * + * @author jeffwadsworth + */ +public class ParadisePlume extends CardImpl { + + public ParadisePlume(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); + + // As Paradise Plume enters the battlefield, choose a color. + this.addAbility(new AsEntersBattlefieldAbility(new ChooseColorEffect(Outcome.Detriment))); + + // Whenever a player casts a spell of the chosen color, you may gain 1 life. + this.addAbility(new ParadisePlumeSpellCastTriggeredAbility()); + + // {tap}: Add one mana of the chosen color to your mana pool. + this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new ParadisePlumeManaEffect(), new TapSourceCost())); + + } + + public ParadisePlume(final ParadisePlume card) { + super(card); + } + + @Override + public ParadisePlume copy() { + return new ParadisePlume(this); + } +} + +class ParadisePlumeManaEffect extends ManaEffect { + + public ParadisePlumeManaEffect() { + super(); + staticText = "Add one mana of the chosen color to your mana pool"; + } + + public ParadisePlumeManaEffect(final ParadisePlumeManaEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + player.getManaPool().addMana(getMana(game, source), game, source); + } + return true; + } + + @Override + public Mana getMana(Game game, Ability source) { + ObjectColor color = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); + if (color != null) { + return new Mana(ColoredManaSymbol.lookup(color.toString().charAt(0))); + } else { + return null; + } + } + + @Override + public ParadisePlumeManaEffect copy() { + return new ParadisePlumeManaEffect(this); + } +} + +class ParadisePlumeSpellCastTriggeredAbility extends TriggeredAbilityImpl { + + public ParadisePlumeSpellCastTriggeredAbility() { + super(Zone.BATTLEFIELD, new GainLifeEffect(1), true); + } + + public ParadisePlumeSpellCastTriggeredAbility(final ParadisePlumeSpellCastTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.SPELL_CAST; + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + ObjectColor color = (ObjectColor) game.getState().getValue(getSourceId() + "_color"); + if (color != null) { + FilterSpell filter = new FilterSpell(); + filter.add(new ColorPredicate(color)); + Spell spell = game.getStack().getSpell(event.getTargetId()); + return (spell != null + && filter.match(spell, getSourceId(), getControllerId(), game)); + } + return false; + } + + @Override + public ParadisePlumeSpellCastTriggeredAbility copy() { + return new ParadisePlumeSpellCastTriggeredAbility(this); + } + + @Override + public String getRule() { + return "Whenever a player casts a spell of the chosen color, " + super.getRule(); + } +} diff --git a/Mage.Sets/src/mage/sets/TimeSpiral.java b/Mage.Sets/src/mage/sets/TimeSpiral.java index 1d03d427d01..fc5cf0319c1 100644 --- a/Mage.Sets/src/mage/sets/TimeSpiral.java +++ b/Mage.Sets/src/mage/sets/TimeSpiral.java @@ -191,6 +191,7 @@ public class TimeSpiral extends ExpansionSet { cards.add(new SetCardInfo("Ophidian Eye", 70, Rarity.COMMON, mage.cards.o.OphidianEye.class)); cards.add(new SetCardInfo("Orcish Cannonade", 172, Rarity.COMMON, mage.cards.o.OrcishCannonade.class)); cards.add(new SetCardInfo("Outrider en-Kor", 31, Rarity.UNCOMMON, mage.cards.o.OutriderEnKor.class)); + cards.add(new SetCardInfo("Paradise Plume", 260, Rarity.UNCOMMON, mage.cards.p.ParadisePlume.class)); cards.add(new SetCardInfo("Paradox Haze", 71, Rarity.UNCOMMON, mage.cards.p.ParadoxHaze.class)); cards.add(new SetCardInfo("Pardic Dragon", 173, Rarity.RARE, mage.cards.p.PardicDragon.class)); cards.add(new SetCardInfo("Pendelhaven Elder", 209, Rarity.UNCOMMON, mage.cards.p.PendelhavenElder.class)); From 1ddd063928e02acbb4b93401c046f5033b73a8cb Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 11:40:51 +0200 Subject: [PATCH 04/15] * Some Aftermath rule text fixes. --- Mage.Sets/src/mage/cards/c/CommitMemory.java | 2 +- Mage.Sets/src/mage/cards/c/CutRibbons.java | 4 +- Mage.Sets/src/mage/cards/d/DestinedLead.java | 2 +- Mage.Sets/src/mage/cards/d/DuskDawn.java | 2 +- Mage.Sets/src/mage/cards/f/FailureComply.java | 2 +- Mage.Sets/src/mage/cards/h/HeavenEarth.java | 106 +++++++++--------- Mage.Sets/src/mage/cards/i/InsultInjury.java | 2 +- Mage.Sets/src/mage/cards/m/MouthFeed.java | 2 +- Mage.Sets/src/mage/cards/n/NeverReturn.java | 2 +- Mage.Sets/src/mage/cards/o/OnwardVictory.java | 2 +- Mage.Sets/src/mage/cards/p/PrepareFight.java | 2 +- Mage.Sets/src/mage/cards/r/RagsRiches.java | 2 +- Mage.Sets/src/mage/cards/r/ReduceRubble.java | 2 +- Mage.Sets/src/mage/cards/s/SpringMind.java | 5 +- Mage.Sets/src/mage/cards/s/StartFinish.java | 2 +- .../abilities/keyword/AftermathAbility.java | 92 +-------------- 16 files changed, 73 insertions(+), 158 deletions(-) diff --git a/Mage.Sets/src/mage/cards/c/CommitMemory.java b/Mage.Sets/src/mage/cards/c/CommitMemory.java index 1ce9ffe6faa..9b3e4c7b683 100644 --- a/Mage.Sets/src/mage/cards/c/CommitMemory.java +++ b/Mage.Sets/src/mage/cards/c/CommitMemory.java @@ -72,7 +72,7 @@ public class CommitMemory extends SplitCard { // Memory // Aftermath // Each player shuffles his or her hand and graveyard into his or her library, then draws seven cards. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addEffect(new MemoryEffect()); Effect effect = new DrawCardAllEffect(7); effect.setText(", then draws seven cards"); diff --git a/Mage.Sets/src/mage/cards/c/CutRibbons.java b/Mage.Sets/src/mage/cards/c/CutRibbons.java index 30abdaf1aaa..ac1e6fa473e 100644 --- a/Mage.Sets/src/mage/cards/c/CutRibbons.java +++ b/Mage.Sets/src/mage/cards/c/CutRibbons.java @@ -23,12 +23,12 @@ public class CutRibbons extends SplitCard { // Cut // Cut deals 4 damage to target creature. getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); - getLeftHalfCard().getSpellAbility().addEffect(new DamageTargetEffect(4)); + getLeftHalfCard().getSpellAbility().addEffect(new DamageTargetEffect(4).setText("Cut deals 4 damage to target creature")); // to // Ribbons // Each opponent loses X life. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addEffect(new LoseLifeOpponentsEffect(new ManacostVariableValue())); } diff --git a/Mage.Sets/src/mage/cards/d/DestinedLead.java b/Mage.Sets/src/mage/cards/d/DestinedLead.java index 18824517760..af2b2dd4235 100644 --- a/Mage.Sets/src/mage/cards/d/DestinedLead.java +++ b/Mage.Sets/src/mage/cards/d/DestinedLead.java @@ -61,7 +61,7 @@ public class DestinedLead extends SplitCard { // to // Lead // All creatures able to block target creature this turn must do so. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); getRightHalfCard().getSpellAbility().addEffect(new MustBeBlockedByAllTargetEffect(Duration.EndOfTurn)); } diff --git a/Mage.Sets/src/mage/cards/d/DuskDawn.java b/Mage.Sets/src/mage/cards/d/DuskDawn.java index 247f8a50a0d..92db3e1321d 100644 --- a/Mage.Sets/src/mage/cards/d/DuskDawn.java +++ b/Mage.Sets/src/mage/cards/d/DuskDawn.java @@ -69,7 +69,7 @@ public class DuskDawn extends SplitCard { // Dawn // Return all creature cards with power less than or equal to 2 from your graveyard to your hand. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addEffect(new DawnEffect()); } diff --git a/Mage.Sets/src/mage/cards/f/FailureComply.java b/Mage.Sets/src/mage/cards/f/FailureComply.java index 8ed7542bf46..4b5663e31df 100644 --- a/Mage.Sets/src/mage/cards/f/FailureComply.java +++ b/Mage.Sets/src/mage/cards/f/FailureComply.java @@ -63,7 +63,7 @@ public class FailureComply extends SplitCard { // to // Comply // Choose a card name. Until your next turn, your opponents can't cast spells with the chosen name - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); Effect effect = new NameACardEffect(NameACardEffect.TypeOfName.ALL); effect.setText("Choose a card name"); getRightHalfCard().getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/h/HeavenEarth.java b/Mage.Sets/src/mage/cards/h/HeavenEarth.java index 0dff7803efb..6fd3a88d329 100644 --- a/Mage.Sets/src/mage/cards/h/HeavenEarth.java +++ b/Mage.Sets/src/mage/cards/h/HeavenEarth.java @@ -1,53 +1,53 @@ -package mage.cards.h; - -import java.util.UUID; -import mage.abilities.dynamicvalue.common.ManacostVariableValue; -import mage.abilities.effects.common.DamageAllEffect; -import mage.abilities.keyword.AftermathAbility; -import mage.abilities.keyword.FlyingAbility; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.SplitCard; -import mage.constants.CardType; -import mage.constants.SpellAbilityType; -import mage.filter.common.FilterCreaturePermanent; -import mage.filter.predicate.Predicates; -import mage.filter.predicate.mageobject.AbilityPredicate; - -/** - * - * @author Styxo - */ -public class HeavenEarth extends SplitCard { - - private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying"); - private static final FilterCreaturePermanent filterWithouFlying = new FilterCreaturePermanent("creature without flying"); - - static { - filterFlying.add(new AbilityPredicate(FlyingAbility.class)); - filterWithouFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); - } - - public HeavenEarth(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, new CardType[]{CardType.SORCERY}, "{X}{G}", "{X}{R}{R}", SpellAbilityType.SPLIT_AFTERMATH); - - // Falling - // Falling deals X damage to each creature with flying. - getLeftHalfCard().getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), filterFlying)); - - // to - // Earth - // Earth deals X damage to each creature without flying. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); - getRightHalfCard().getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), filterWithouFlying)); - } - - public HeavenEarth(final HeavenEarth card) { - super(card); - } - - @Override - public HeavenEarth copy() { - return new HeavenEarth(this); - } -} +package mage.cards.h; + +import java.util.UUID; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.effects.common.DamageAllEffect; +import mage.abilities.keyword.AftermathAbility; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.cards.SplitCard; +import mage.constants.CardType; +import mage.constants.SpellAbilityType; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.AbilityPredicate; + +/** + * + * @author Styxo + */ +public class HeavenEarth extends SplitCard { + + private static final FilterCreaturePermanent filterFlying = new FilterCreaturePermanent("creature with flying"); + private static final FilterCreaturePermanent filterWithouFlying = new FilterCreaturePermanent("creature without flying"); + + static { + filterFlying.add(new AbilityPredicate(FlyingAbility.class)); + filterWithouFlying.add(Predicates.not(new AbilityPredicate(FlyingAbility.class))); + } + + public HeavenEarth(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, new CardType[]{CardType.SORCERY}, "{X}{G}", "{X}{R}{R}", SpellAbilityType.SPLIT_AFTERMATH); + + // Falling + // Falling deals X damage to each creature with flying. + getLeftHalfCard().getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), filterFlying)); + + // to + // Earth + // Earth deals X damage to each creature without flying. + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); + getRightHalfCard().getSpellAbility().addEffect(new DamageAllEffect(new ManacostVariableValue(), filterWithouFlying)); + } + + public HeavenEarth(final HeavenEarth card) { + super(card); + } + + @Override + public HeavenEarth copy() { + return new HeavenEarth(this); + } +} diff --git a/Mage.Sets/src/mage/cards/i/InsultInjury.java b/Mage.Sets/src/mage/cards/i/InsultInjury.java index b4721e71740..b4c272be79c 100644 --- a/Mage.Sets/src/mage/cards/i/InsultInjury.java +++ b/Mage.Sets/src/mage/cards/i/InsultInjury.java @@ -37,7 +37,7 @@ public class InsultInjury extends SplitCard { // to // Injury // Injury deals 2 damage to target creature and 2 damage to target player. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); getRightHalfCard().getSpellAbility().addTarget(new TargetPlayer()); getRightHalfCard().getSpellAbility().addEffect(new InjuryEffect()); diff --git a/Mage.Sets/src/mage/cards/m/MouthFeed.java b/Mage.Sets/src/mage/cards/m/MouthFeed.java index 5231431900e..e316d403229 100644 --- a/Mage.Sets/src/mage/cards/m/MouthFeed.java +++ b/Mage.Sets/src/mage/cards/m/MouthFeed.java @@ -38,7 +38,7 @@ public class MouthFeed extends SplitCard { // to // Feed // Draw a card for each creature you control with power 3 or greater - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); Effect draw = new DrawCardSourceControllerEffect(new PermanentsOnBattlefieldCount(filterCreaturesYouControlPower3orGreater)); getRightHalfCard().getSpellAbility().addEffect(draw); diff --git a/Mage.Sets/src/mage/cards/n/NeverReturn.java b/Mage.Sets/src/mage/cards/n/NeverReturn.java index 3fa5d9af014..fdcd525b9f0 100644 --- a/Mage.Sets/src/mage/cards/n/NeverReturn.java +++ b/Mage.Sets/src/mage/cards/n/NeverReturn.java @@ -57,7 +57,7 @@ public class NeverReturn extends SplitCard { // Return // Exile target card from a graveyard. Create a 2/2 black Zombie creature token. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addEffect(new ExileTargetEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetCardInGraveyard()); getRightHalfCard().getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken())); diff --git a/Mage.Sets/src/mage/cards/o/OnwardVictory.java b/Mage.Sets/src/mage/cards/o/OnwardVictory.java index 4b260fb53e1..51aa05a0aab 100644 --- a/Mage.Sets/src/mage/cards/o/OnwardVictory.java +++ b/Mage.Sets/src/mage/cards/o/OnwardVictory.java @@ -56,7 +56,7 @@ public class OnwardVictory extends SplitCard { // to // Victory // Target creature gains double strike until end of turn. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); Effect effect = new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn); getRightHalfCard().getSpellAbility().addEffect(effect); getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/cards/p/PrepareFight.java b/Mage.Sets/src/mage/cards/p/PrepareFight.java index d6bc3413405..07fd0a80951 100644 --- a/Mage.Sets/src/mage/cards/p/PrepareFight.java +++ b/Mage.Sets/src/mage/cards/p/PrepareFight.java @@ -75,7 +75,7 @@ public class PrepareFight extends SplitCard { // to // Fight // Target creature you control fights target creature you don't control. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addEffect(new FightTargetsEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); Target target = new TargetCreaturePermanent(filter); diff --git a/Mage.Sets/src/mage/cards/r/RagsRiches.java b/Mage.Sets/src/mage/cards/r/RagsRiches.java index 2e801390330..b59cc838c87 100644 --- a/Mage.Sets/src/mage/cards/r/RagsRiches.java +++ b/Mage.Sets/src/mage/cards/r/RagsRiches.java @@ -32,7 +32,7 @@ public class RagsRiches extends SplitCard { // to // Riches // Each opponent chooses a creature he or she controls. You gain control of each of those creatures. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addEffect(new RichesEffect()); } diff --git a/Mage.Sets/src/mage/cards/r/ReduceRubble.java b/Mage.Sets/src/mage/cards/r/ReduceRubble.java index 59541ce56c4..f415afa07ea 100644 --- a/Mage.Sets/src/mage/cards/r/ReduceRubble.java +++ b/Mage.Sets/src/mage/cards/r/ReduceRubble.java @@ -58,7 +58,7 @@ public class ReduceRubble extends SplitCard { // Rubble // Up to three target lands don't untap during their controller's next untap step. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); Effect effect = new DontUntapInControllersNextUntapStepTargetEffect(); effect.setText("Up to three target lands don't untap during their controller's next untap step"); getRightHalfCard().getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/cards/s/SpringMind.java b/Mage.Sets/src/mage/cards/s/SpringMind.java index 7b14bbb9bb0..52512b3167e 100644 --- a/Mage.Sets/src/mage/cards/s/SpringMind.java +++ b/Mage.Sets/src/mage/cards/s/SpringMind.java @@ -27,6 +27,7 @@ */ package mage.cards.s; +import java.util.UUID; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; import mage.abilities.keyword.AftermathAbility; @@ -38,8 +39,6 @@ import mage.constants.SpellAbilityType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInLibrary; -import java.util.UUID; - /** * * @author fireshoes @@ -56,7 +55,7 @@ public class SpringMind extends SplitCard { // Mind // Aftermath // Draw two cards. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); } diff --git a/Mage.Sets/src/mage/cards/s/StartFinish.java b/Mage.Sets/src/mage/cards/s/StartFinish.java index 1f467425ca3..90f937e52c5 100644 --- a/Mage.Sets/src/mage/cards/s/StartFinish.java +++ b/Mage.Sets/src/mage/cards/s/StartFinish.java @@ -62,7 +62,7 @@ public class StartFinish extends SplitCard { // Finish // Aftermath // As an additional cost to cast Finish, sacrifice a creature. Destroy target creature. - ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility()); + ((CardImpl) (getRightHalfCard())).addAbility(new AftermathAbility().setRuleAtTheTop(true)); getRightHalfCard().getSpellAbility().addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(new FilterControlledCreaturePermanent("a creature")))); getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent(new FilterCreaturePermanent("creature (to destoy)"))); getRightHalfCard().getSpellAbility().addEffect(new DestroyTargetEffect("Destroy target creature")); diff --git a/Mage/src/main/java/mage/abilities/keyword/AftermathAbility.java b/Mage/src/main/java/mage/abilities/keyword/AftermathAbility.java index 59dccbb040d..35b374f513c 100644 --- a/Mage/src/main/java/mage/abilities/keyword/AftermathAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/AftermathAbility.java @@ -31,14 +31,11 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.*; +import mage.abilities.effects.common.ExileSpellEffect; import mage.cards.Card; -import mage.cards.SplitCardHalf; import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.ZoneChangeEvent; -import mage.game.stack.Spell; -import mage.players.Player; /** * Aftermath @@ -55,7 +52,7 @@ public class AftermathAbility extends SimpleStaticAbility { public AftermathAbility() { super(Zone.ALL, new AftermathCastFromGraveyard()); addEffect(new AftermathCantCastFromHand()); - addEffect(new AftermathExileAsResolvesFromGraveyard()); + addEffect(ExileSpellEffect.getInstance()); } public AftermathAbility(final AftermathAbility ability) { @@ -68,12 +65,8 @@ public class AftermathAbility extends SimpleStaticAbility { } @Override - public String getRule(boolean all) { - if (all) { - return "Aftermath (Cast this card only from your graveyard. Exile it afterwards.)"; - } else { - return "Aftermath"; - } + public String getRule() { + return "Aftermath (Cast this spell only from your graveyard. Then exile it.)"; } } @@ -81,7 +74,6 @@ class AftermathCastFromGraveyard extends AsThoughEffectImpl { public AftermathCastFromGraveyard() { super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.EndOfGame, Outcome.Benefit); - staticText = "Cast {this} from your graveyard"; } public AftermathCastFromGraveyard(final AftermathCastFromGraveyard effect) { @@ -98,10 +90,6 @@ class AftermathCastFromGraveyard extends AsThoughEffectImpl { return new AftermathCastFromGraveyard(this); } - private static String msb(UUID id) { - return Integer.toUnsignedString((int) id.getMostSignificantBits(), 16); - } - @Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { if (objectId.equals(source.getSourceId()) @@ -153,75 +141,3 @@ class AftermathCantCastFromHand extends ContinuousRuleModifyingEffectImpl { return false; } } - -class AftermathExileAsResolvesFromGraveyard extends ReplacementEffectImpl { - - AftermathExileAsResolvesFromGraveyard() { - super(Duration.WhileOnStack, Outcome.Detriment); - this.staticText = "Exile it afterwards."; - } - - AftermathExileAsResolvesFromGraveyard(AftermathExileAsResolvesFromGraveyard effect) { - super(effect); - } - - @Override - public boolean checksEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ZONE_CHANGE; - } - - @Override - public boolean applies(GameEvent evt, Ability source, Game game) { - ZoneChangeEvent event = (ZoneChangeEvent) evt; - if (event.getFromZone() == Zone.STACK && event.getToZone() != Zone.EXILED) { - // Moving something from stack to somewhere else - - // Get the source id, getting the whole split card's ID, because - // that's the card that is changing zones in the event, but - // source.getSourceId is only the split card half. - // If branch so that we also support putting Aftermath on - // non-split cards for... whatever reason, in case somebody - // wants to do that in the future. - UUID sourceId = source.getSourceId(); - Card sourceCard = game.getCard(source.getSourceId()); - if (sourceCard != null && sourceCard instanceof SplitCardHalf) { - sourceCard = ((SplitCardHalf) sourceCard).getParentCard(); - sourceId = sourceCard.getId(); - } - - if (event.getTargetId() == sourceId) { - // Moving this spell from stack to yard - Spell spell = game.getStack().getSpell(source.getSourceId()); - if (spell != null && spell.getFromZone() == Zone.GRAVEYARD) { - // And this spell was cast from the graveyard, so we need to exile it - return true; - } - } - } - return false; - } - - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - UUID sourceId = source.getSourceId(); - Card sourceCard = game.getCard(source.getSourceId()); - if (sourceCard != null && sourceCard instanceof SplitCardHalf) { - sourceCard = ((SplitCardHalf) sourceCard).getParentCard(); - sourceId = sourceCard.getId(); - } - - if (sourceCard != null) { - Player player = game.getPlayer(sourceCard.getOwnerId()); - if (player != null) { - return player.moveCardToExileWithInfo(sourceCard, null, "", sourceId, game, ((ZoneChangeEvent) event).getFromZone(), true); - } - } - return false; - } - - @Override - public AftermathExileAsResolvesFromGraveyard copy() { - return new AftermathExileAsResolvesFromGraveyard(this); - } - -} From 18cab46b05b58175969bedfe2dcd34babc8d2385 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 11:43:05 +0200 Subject: [PATCH 05/15] * Improved editor search function, fixed some problems with search for split card rules. --- .../mage/client/deckeditor/CardSelector.form | 218 +++++++---- .../mage/client/deckeditor/CardSelector.java | 367 +++++++++++++----- .../mage/client/util/gui/GuiDisplayUtil.java | 7 +- Mage/src/main/java/mage/cards/SplitCard.java | 7 +- .../java/mage/cards/repository/CardInfo.java | 34 +- .../predicate/other/CardTextPredicate.java | 53 ++- 6 files changed, 484 insertions(+), 202 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form index b3c2a7d1ce0..1cf837043f2 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.form @@ -388,12 +388,7 @@ - - - - - - + @@ -498,21 +493,25 @@ - + - + - + - + - - + + + + + + @@ -524,19 +523,26 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + - + @@ -551,6 +557,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -558,11 +587,11 @@ - + - + @@ -581,24 +610,107 @@ - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -634,52 +746,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java index 91c77056289..c2a7c234561 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java @@ -33,6 +33,11 @@ */ package mage.client.deckeditor; +import java.awt.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.*; +import javax.swing.table.DefaultTableCellRenderer; import mage.MageObject; import mage.ObjectColor; import mage.cards.Card; @@ -59,20 +64,13 @@ import mage.filter.predicate.other.ExpansionSetPredicate; import mage.view.CardView; import mage.view.CardsView; -import javax.swing.*; -import javax.swing.table.DefaultTableCellRenderer; -import java.awt.*; -import java.awt.event.*; -import java.util.*; -import java.util.List; - /** * * @author BetaSteward_at_googlemail.com, nantuko */ public class CardSelector extends javax.swing.JPanel implements ComponentListener, DragCardTarget { - private final List cards = new ArrayList<>(); + private final java.util.List cards = new ArrayList<>(); private BigCard bigCard; private boolean limited = false; private final SortSetting sortSetting; @@ -138,6 +136,9 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene mainTable.setOpaque(false); cbSortBy.setEnabled(false); chkPiles.setEnabled(false); +// chkNames.setEnabled(true); +// chkTypes.setEnabled(true); +// chkRules.setEnabled(true); mainTable.addMouseListener(new MouseAdapter() { @Override @@ -194,7 +195,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene this.currentView.drawCards(sortSetting); } - public void loadSideboard(List sideboard, BigCard bigCard) { + public void loadSideboard(java.util.List sideboard, BigCard bigCard) { this.bigCard = bigCard; this.btnBooster.setVisible(false); this.btnClear.setVisible(false); @@ -221,7 +222,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene FilterCard filter = new FilterCard(); String name = jTextFieldSearch.getText().trim(); - filter.add(new CardTextPredicate(name)); + filter.add(new CardTextPredicate(name, chkNames.isSelected(), chkTypes.isSelected(), chkRules.isSelected())); if (limited) { ArrayList> predicates = new ArrayList<>(); @@ -321,7 +322,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene if (this.cbExpansionSet.isVisible()) { String expansionSelection = this.cbExpansionSet.getSelectedItem().toString(); if (!expansionSelection.equals("- All Sets")) { - List setCodes = ConstructedFormats.getSetsByFormat(expansionSelection); + java.util.List setCodes = ConstructedFormats.getSetsByFormat(expansionSelection); criteria.setCodes(setCodes.toArray(new String[0])); } } @@ -369,7 +370,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene private void filterCards() { FilterCard filter = buildFilter(); try { - List filteredCards = new ArrayList<>(); + java.util.List filteredCards = new ArrayList<>(); setCursor(new Cursor(Cursor.WAIT_CURSOR)); if (limited) { for (Card card : cards) { @@ -378,7 +379,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene } } } else { - List foundCards = CardRepository.instance.findCards(buildCriteria()); + java.util.List foundCards = CardRepository.instance.findCards(buildCriteria()); for (CardInfo cardInfo : foundCards) { Card card = cardInfo.getMockCard(); if (filter.match(card, null)) { @@ -400,8 +401,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene this.cardCount.setText(String.valueOf(value)); } - public List getCardGridComponents() { - List components = new ArrayList<>(); + public java.util.List getCardGridComponents() { + java.util.List components = new ArrayList<>(); components.add(mainModel); components.add(cardGrid); return components; @@ -458,15 +459,17 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene cardSelectorScrollPane = new javax.swing.JScrollPane(); cardSelectorBottomPanel = new javax.swing.JPanel(); jButtonAddToMain = new javax.swing.JButton(); + jButtonRemoveFromMain = new javax.swing.JButton(); jButtonAddToSideboard = new javax.swing.JButton(); - jLabelSearch = new javax.swing.JLabel(); + jButtonRemoveFromSideboard = new javax.swing.JButton(); jTextFieldSearch = new javax.swing.JTextField(); + chkNames = new javax.swing.JCheckBox(); + chkTypes = new javax.swing.JCheckBox(); + chkRules = new javax.swing.JCheckBox(); jButtonSearch = new javax.swing.JButton(); jButtonClean = new javax.swing.JButton(); cardCountLabel = new javax.swing.JLabel(); cardCount = new javax.swing.JLabel(); - jButtonRemoveFromMain = new javax.swing.JButton(); - jButtonRemoveFromSideboard = new javax.swing.JButton(); tbColor.setFloatable(false); tbColor.setRollover(true); @@ -483,7 +486,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbRed.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbRed.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_red.png"))); // NOI18N tbRed.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbRed.addActionListener(evt -> tbRedActionPerformed(evt)); + tbRed.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbRedActionPerformed(evt); + } + }); tbColor.add(tbRed); tbGreen.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_green_off.png"))); // NOI18N @@ -495,7 +502,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbGreen.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_green.png"))); // NOI18N tbGreen.setVerifyInputWhenFocusTarget(false); tbGreen.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbGreen.addActionListener(evt -> tbGreenActionPerformed(evt)); + tbGreen.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbGreenActionPerformed(evt); + } + }); tbColor.add(tbGreen); tbBlue.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_blueOff.png"))); // NOI18N @@ -506,7 +517,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbBlue.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbBlue.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_blue.png"))); // NOI18N tbBlue.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbBlue.addActionListener(evt -> tbBlueActionPerformed(evt)); + tbBlue.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbBlueActionPerformed(evt); + } + }); tbColor.add(tbBlue); tbBlack.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_black_off.png"))); // NOI18N @@ -517,7 +532,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbBlack.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbBlack.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_black.png"))); // NOI18N tbBlack.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbBlack.addActionListener(evt -> tbBlackActionPerformed(evt)); + tbBlack.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbBlackActionPerformed(evt); + } + }); tbColor.add(tbBlack); tbWhite.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_white_off.png"))); // NOI18N @@ -528,7 +547,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbWhite.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbWhite.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/color_white.png"))); // NOI18N tbWhite.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbWhite.addActionListener(evt -> tbWhiteActionPerformed(evt)); + tbWhite.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbWhiteActionPerformed(evt); + } + }); tbColor.add(tbWhite); tbColorless.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/colorless_off.png"))); // NOI18N @@ -539,7 +562,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbColorless.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbColorless.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/colorless.png"))); // NOI18N tbColorless.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbColorless.addActionListener(evt -> tbColorlessActionPerformed(evt)); + tbColorless.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbColorlessActionPerformed(evt); + } + }); tbColor.add(tbColorless); tbColor.add(jSeparator1); @@ -548,7 +575,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene cbExpansionSet.setMinimumSize(new java.awt.Dimension(250, 25)); cbExpansionSet.setName("cbExpansionSet"); // NOI18N cbExpansionSet.setPreferredSize(new java.awt.Dimension(250, 25)); - cbExpansionSet.addActionListener(evt -> cbExpansionSetActionPerformed(evt)); + cbExpansionSet.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cbExpansionSetActionPerformed(evt); + } + }); tbColor.add(cbExpansionSet); tbColor.add(jSeparator2); @@ -557,14 +588,22 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene btnBooster.setFocusable(false); btnBooster.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnBooster.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - btnBooster.addActionListener(evt -> btnBoosterActionPerformed(evt)); + btnBooster.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnBoosterActionPerformed(evt); + } + }); tbColor.add(btnBooster); btnClear.setText("Clear"); btnClear.setFocusable(false); btnClear.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); btnClear.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - btnClear.addActionListener(evt -> btnClearActionPerformed(evt)); + btnClear.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + btnClearActionPerformed(evt); + } + }); tbColor.add(btnClear); tbTypes.setFloatable(false); @@ -580,7 +619,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbLand.setFocusable(false); tbLand.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbLand.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbLand.addActionListener(evt -> tbLandActionPerformed(evt)); + tbLand.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbLandActionPerformed(evt); + } + }); tbTypes.add(tbLand); tbCreatures.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_creatures.png"))); // NOI18N @@ -591,7 +634,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbCreatures.setFocusable(false); tbCreatures.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbCreatures.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbCreatures.addActionListener(evt -> tbCreaturesActionPerformed(evt)); + tbCreatures.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbCreaturesActionPerformed(evt); + } + }); tbTypes.add(tbCreatures); tbArifiacts.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_artifact.png"))); // NOI18N @@ -602,7 +649,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbArifiacts.setFocusable(false); tbArifiacts.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbArifiacts.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbArifiacts.addActionListener(evt -> tbArifiactsActionPerformed(evt)); + tbArifiacts.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbArifiactsActionPerformed(evt); + } + }); tbTypes.add(tbArifiacts); tbSorceries.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_sorcery.png"))); // NOI18N @@ -613,7 +664,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbSorceries.setFocusable(false); tbSorceries.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbSorceries.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbSorceries.addActionListener(evt -> tbSorceriesActionPerformed(evt)); + tbSorceries.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbSorceriesActionPerformed(evt); + } + }); tbTypes.add(tbSorceries); tbInstants.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_instant.png"))); // NOI18N @@ -624,7 +679,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbInstants.setFocusable(false); tbInstants.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbInstants.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbInstants.addActionListener(evt -> tbInstantsActionPerformed(evt)); + tbInstants.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbInstantsActionPerformed(evt); + } + }); tbTypes.add(tbInstants); tbEnchantments.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_enchantment.png"))); // NOI18N @@ -635,7 +694,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbEnchantments.setFocusable(false); tbEnchantments.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbEnchantments.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbEnchantments.addActionListener(evt -> tbEnchantmentsActionPerformed(evt)); + tbEnchantments.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbEnchantmentsActionPerformed(evt); + } + }); tbTypes.add(tbEnchantments); tbPlaneswalkers.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/type_planeswalker.png"))); // NOI18N @@ -646,7 +709,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene tbPlaneswalkers.setFocusable(false); tbPlaneswalkers.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); tbPlaneswalkers.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - tbPlaneswalkers.addActionListener(evt -> tbPlaneswalkersActionPerformed(evt)); + tbPlaneswalkers.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tbPlaneswalkersActionPerformed(evt); + } + }); tbTypes.add(tbPlaneswalkers); tbTypes.add(jSeparator6); @@ -655,15 +722,22 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene chkPiles.setFocusable(false); chkPiles.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); chkPiles.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - chkPiles.addActionListener(evt -> chkPilesActionPerformed(evt)); + chkPiles.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + chkPilesActionPerformed(evt); + } + }); tbTypes.add(chkPiles); tbTypes.add(jSeparator3); - cbSortBy.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); cbSortBy.setMaximumSize(new java.awt.Dimension(120, 20)); cbSortBy.setMinimumSize(new java.awt.Dimension(120, 20)); cbSortBy.setPreferredSize(new java.awt.Dimension(120, 20)); - cbSortBy.addActionListener(evt -> cbSortByActionPerformed(evt)); + cbSortBy.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cbSortByActionPerformed(evt); + } + }); tbTypes.add(cbSortBy); tbTypes.add(jSeparator4); @@ -678,7 +752,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene jToggleListView.setMaximumSize(new java.awt.Dimension(37, 22)); jToggleListView.setMinimumSize(new java.awt.Dimension(37, 22)); jToggleListView.setPreferredSize(new java.awt.Dimension(37, 22)); - jToggleListView.addActionListener(evt -> jToggleListViewActionPerformed(evt)); + jToggleListView.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jToggleListViewActionPerformed(evt); + } + }); tbTypes.add(jToggleListView); bgView.add(jToggleCardView); @@ -693,7 +771,11 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene jToggleCardView.setName(""); // NOI18N jToggleCardView.setPreferredSize(new java.awt.Dimension(37, 22)); jToggleCardView.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - jToggleCardView.addActionListener(evt -> jToggleCardViewActionPerformed(evt)); + jToggleCardView.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jToggleCardViewActionPerformed(evt); + } + }); tbTypes.add(jToggleCardView); cardSelectorScrollPane.setToolTipText("Double click to add the card to the main deck.
\nALT + Double click to add the card to the sideboard."); @@ -704,52 +786,118 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene jButtonAddToMain.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/deck_in.png"))); // NOI18N jButtonAddToMain.setToolTipText("Add selected cards to deck.
\nAlternative: Double click the card in card selector to move a card to the deck."); jButtonAddToMain.setMargin(null); - jButtonAddToMain.setMaximumSize(new java.awt.Dimension(42, 23)); - jButtonAddToMain.setMinimumSize(new java.awt.Dimension(42, 23)); - jButtonAddToMain.setPreferredSize(new java.awt.Dimension(40, 28)); - jButtonAddToMain.addActionListener(evt -> jButtonAddToMainActionPerformed(evt)); - - jButtonAddToSideboard.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/sideboard_in.png"))); // NOI18N - jButtonAddToSideboard.setToolTipText("Add selected cards to sideboard.
\nAlternative: ALT key + Double click the card in card selector to move a card to the sideboard."); - jButtonAddToSideboard.setMargin(new java.awt.Insets(2, 0, 2, 0)); - jButtonAddToSideboard.setMaximumSize(new java.awt.Dimension(100, 30)); - jButtonAddToSideboard.setMinimumSize(new java.awt.Dimension(10, 30)); - jButtonAddToSideboard.setPreferredSize(new java.awt.Dimension(40, 28)); - jButtonAddToSideboard.addActionListener(evt -> jButtonAddToSideboardActionPerformed(evt)); - - jLabelSearch.setText("Search:"); - jLabelSearch.setToolTipText("Searches for card names and in the rule text of the card."); - - jTextFieldSearch.setToolTipText("Searches for card names and in the rule text of the card."); - - jButtonSearch.setText("Search"); - jButtonSearch.setToolTipText("Performs the search."); - jButtonSearch.addActionListener(evt -> jButtonSearchActionPerformed(evt)); - - jButtonClean.setText("Clear"); - jButtonClean.setToolTipText("Clears the search field."); - jButtonClean.addActionListener(evt -> jButtonCleanActionPerformed(evt)); - - cardCountLabel.setText("Card count:"); - cardCountLabel.setToolTipText("Number of cards currently shown."); - - cardCount.setText("0"); + jButtonAddToMain.setMaximumSize(new java.awt.Dimension(35, 23)); + jButtonAddToMain.setMinimumSize(new java.awt.Dimension(35, 23)); + jButtonAddToMain.setPreferredSize(new java.awt.Dimension(30, 28)); + jButtonAddToMain.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButtonAddToMainActionPerformed(evt); + } + }); jButtonRemoveFromMain.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/deck_out.png"))); // NOI18N jButtonRemoveFromMain.setToolTipText("Remove selected cards from deck"); jButtonRemoveFromMain.setMargin(null); jButtonRemoveFromMain.setMaximumSize(new java.awt.Dimension(42, 23)); jButtonRemoveFromMain.setMinimumSize(new java.awt.Dimension(42, 23)); - jButtonRemoveFromMain.setPreferredSize(new java.awt.Dimension(40, 28)); - jButtonRemoveFromMain.addActionListener(evt -> jButtonRemoveFromMainActionPerformed(evt)); + jButtonRemoveFromMain.setPreferredSize(new java.awt.Dimension(30, 28)); + jButtonRemoveFromMain.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButtonRemoveFromMainActionPerformed(evt); + } + }); + + jButtonAddToSideboard.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/sideboard_in.png"))); // NOI18N + jButtonAddToSideboard.setToolTipText("Add selected cards to sideboard.
\nAlternative: ALT key + Double click the card in card selector to move a card to the sideboard."); + jButtonAddToSideboard.setMargin(new java.awt.Insets(2, 0, 2, 0)); + jButtonAddToSideboard.setMaximumSize(new java.awt.Dimension(100, 30)); + jButtonAddToSideboard.setMinimumSize(new java.awt.Dimension(10, 30)); + jButtonAddToSideboard.setPreferredSize(new java.awt.Dimension(30, 28)); + jButtonAddToSideboard.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButtonAddToSideboardActionPerformed(evt); + } + }); jButtonRemoveFromSideboard.setIcon(new javax.swing.ImageIcon(getClass().getResource("/buttons/sideboard_out.png"))); // NOI18N jButtonRemoveFromSideboard.setToolTipText("Remove selected cards from sideboard."); jButtonRemoveFromSideboard.setMargin(new java.awt.Insets(2, 0, 2, 0)); jButtonRemoveFromSideboard.setMaximumSize(new java.awt.Dimension(10, 30)); jButtonRemoveFromSideboard.setMinimumSize(new java.awt.Dimension(100, 30)); - jButtonRemoveFromSideboard.setPreferredSize(new java.awt.Dimension(40, 28)); - jButtonRemoveFromSideboard.addActionListener(evt -> jButtonRemoveFromSideboardActionPerformed(evt)); + jButtonRemoveFromSideboard.setPreferredSize(new java.awt.Dimension(30, 28)); + jButtonRemoveFromSideboard.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButtonRemoveFromSideboardActionPerformed(evt); + } + }); + + jTextFieldSearch.setToolTipText("Searches for card names and in the rule text of the card."); + + chkNames.setSelected(true); + chkNames.setText("Names"); + chkNames.setToolTipText("Search in card names."); + chkNames.setFocusable(false); + chkNames.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); + chkNames.setMaximumSize(new java.awt.Dimension(67, 16)); + chkNames.setMinimumSize(new java.awt.Dimension(67, 16)); + chkNames.setPreferredSize(new java.awt.Dimension(67, 16)); + chkNames.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + chkNames.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + chkNamesActionPerformed(evt); + } + }); + + chkTypes.setSelected(true); + chkTypes.setText("Types"); + chkTypes.setToolTipText("Search in card types."); + chkTypes.setFocusable(false); + chkTypes.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); + chkTypes.setMaximumSize(new java.awt.Dimension(63, 16)); + chkTypes.setMinimumSize(new java.awt.Dimension(63, 16)); + chkTypes.setPreferredSize(new java.awt.Dimension(63, 16)); + chkTypes.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + chkTypes.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + chkTypesActionPerformed(evt); + } + }); + + chkRules.setSelected(true); + chkRules.setText("Rules"); + chkRules.setToolTipText("Search in card rules."); + chkRules.setFocusable(false); + chkRules.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); + chkRules.setMaximumSize(new java.awt.Dimension(59, 16)); + chkRules.setMinimumSize(new java.awt.Dimension(59, 16)); + chkRules.setPreferredSize(new java.awt.Dimension(59, 16)); + chkRules.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + chkRules.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + chkRulesActionPerformed(evt); + } + }); + + jButtonSearch.setText("Search"); + jButtonSearch.setToolTipText("Performs the search."); + jButtonSearch.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButtonSearchActionPerformed(evt); + } + }); + + jButtonClean.setText("Clear"); + jButtonClean.setToolTipText("Clears the search field."); + jButtonClean.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + jButtonCleanActionPerformed(evt); + } + }); + + cardCountLabel.setText("Card count:"); + cardCountLabel.setToolTipText("Number of cards currently shown."); + + cardCount.setText("0"); javax.swing.GroupLayout cardSelectorBottomPanelLayout = new javax.swing.GroupLayout(cardSelectorBottomPanel); cardSelectorBottomPanel.setLayout(cardSelectorBottomPanelLayout); @@ -758,21 +906,25 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene .addGroup(cardSelectorBottomPanelLayout.createSequentialGroup() .addGap(6, 6, 6) .addComponent(jButtonAddToMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGap(2, 2, 2) .addComponent(jButtonRemoveFromMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGap(1, 1, 1) .addComponent(jButtonAddToSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGap(2, 2, 2) .addComponent(jButtonRemoveFromSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabelSearch) + .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 219, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(2, 2, 2) .addComponent(jButtonSearch) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jButtonClean) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(chkNames, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(chkTypes, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(chkRules, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(5, 5, 5) .addComponent(cardCountLabel) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(cardCount, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -782,18 +934,23 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(cardSelectorBottomPanelLayout.createSequentialGroup() .addGap(4, 4, 4) - .addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jButtonRemoveFromMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jButtonAddToSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jButtonRemoveFromSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabelSearch) - .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jButtonSearch) - .addComponent(jButtonClean) - .addComponent(cardCountLabel) - .addComponent(cardCount) - .addComponent(jButtonAddToMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(4, 4, 4)) + .addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(chkTypes, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(chkRules, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(chkNames, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(cardSelectorBottomPanelLayout.createSequentialGroup() + .addGroup(cardSelectorBottomPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jButtonRemoveFromMain, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jButtonAddToSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jButtonRemoveFromSideboard, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jTextFieldSearch, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jButtonSearch) + .addComponent(jButtonClean) + .addComponent(cardCount) + .addComponent(jButtonAddToMain, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(cardCountLabel)) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) ); cardCountLabel.getAccessibleContext().setAccessibleName("cardCountLabel"); @@ -832,7 +989,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene }//GEN-LAST:event_btnClearActionPerformed private void btnBoosterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBoosterActionPerformed - List sets = ConstructedFormats.getSetsByFormat(this.cbExpansionSet.getSelectedItem().toString()); + java.util.List sets = ConstructedFormats.getSetsByFormat(this.cbExpansionSet.getSelectedItem().toString()); if (sets.size() == 1) { if (!this.limited) { this.limited = true; @@ -840,7 +997,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene } ExpansionSet expansionSet = Sets.getInstance().get(sets.get(0)); if (expansionSet != null) { - List booster = expansionSet.createBooster(); + java.util.List booster = expansionSet.createBooster(); cards.addAll(booster); filterCards(); } @@ -890,7 +1047,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene private void jButtonAddToMainActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddToMainActionPerformed if (mainTable.getSelectedRowCount() > 0) { int[] n = mainTable.getSelectedRows(); - List indexes = asList(n); + java.util.List indexes = asList(n); Collections.reverse(indexes); for (Integer index : indexes) { mainModel.doubleClick(index); @@ -905,7 +1062,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene private void jButtonAddToSideboardActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAddToSideboardActionPerformed if (mainTable.getSelectedRowCount() > 0) { int[] n = mainTable.getSelectedRows(); - List indexes = asList(n); + java.util.List indexes = asList(n); Collections.reverse(indexes); for (Integer index : indexes) { mainModel.altDoubleClick(index); @@ -986,6 +1143,18 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene filterCardsType(evt.getModifiers(), evt.getActionCommand()); }//GEN-LAST:event_tbLandActionPerformed + private void chkNamesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkNamesActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_chkNamesActionPerformed + + private void chkTypesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkTypesActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_chkTypesActionPerformed + + private void chkRulesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkRulesActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_chkRulesActionPerformed + private void toggleViewMode() { if (currentView instanceof CardGrid) { jToggleListView.setSelected(true); @@ -1008,8 +1177,8 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene } } - public List asList(final int[] is) { - List list = new ArrayList<>(); + public java.util.List asList(final int[] is) { + java.util.List list = new ArrayList<>(); for (int i : is) { list.add(i); } @@ -1034,14 +1203,16 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene private javax.swing.JScrollPane cardSelectorScrollPane; private javax.swing.JComboBox cbExpansionSet; private javax.swing.JComboBox cbSortBy; + private javax.swing.JCheckBox chkNames; private javax.swing.JCheckBox chkPiles; + private javax.swing.JCheckBox chkRules; + private javax.swing.JCheckBox chkTypes; private javax.swing.JButton jButtonAddToMain; private javax.swing.JButton jButtonAddToSideboard; private javax.swing.JButton jButtonClean; private javax.swing.JButton jButtonRemoveFromMain; private javax.swing.JButton jButtonRemoveFromSideboard; private javax.swing.JButton jButtonSearch; - private javax.swing.JLabel jLabelSearch; private javax.swing.JToolBar.Separator jSeparator1; private javax.swing.JToolBar.Separator jSeparator2; private javax.swing.JToolBar.Separator jSeparator3; diff --git a/Mage.Client/src/main/java/mage/client/util/gui/GuiDisplayUtil.java b/Mage.Client/src/main/java/mage/client/util/gui/GuiDisplayUtil.java index d2deeea32db..293231595b7 100644 --- a/Mage.Client/src/main/java/mage/client/util/gui/GuiDisplayUtil.java +++ b/Mage.Client/src/main/java/mage/client/util/gui/GuiDisplayUtil.java @@ -1,5 +1,8 @@ package mage.client.util.gui; +import java.awt.*; +import java.util.ArrayList; +import javax.swing.*; import mage.client.MageFrame; import mage.client.util.GUISizeHelper; import mage.constants.*; @@ -10,10 +13,6 @@ import org.jdesktop.swingx.JXPanel; import org.mage.card.arcane.ManaSymbols; import org.mage.card.arcane.UI; -import javax.swing.*; -import java.awt.*; -import java.util.ArrayList; - public final class GuiDisplayUtil { private static final Font cardNameFont = new Font("Calibri", Font.BOLD, 15); diff --git a/Mage/src/main/java/mage/cards/SplitCard.java b/Mage/src/main/java/mage/cards/SplitCard.java index b3869e6beae..9e57f04b9fc 100644 --- a/Mage/src/main/java/mage/cards/SplitCard.java +++ b/Mage/src/main/java/mage/cards/SplitCard.java @@ -27,6 +27,9 @@ */ package mage.cards; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; import mage.abilities.Abilities; import mage.abilities.AbilitiesImpl; import mage.abilities.Ability; @@ -36,10 +39,6 @@ import mage.constants.SpellAbilityType; import mage.constants.Zone; import mage.game.Game; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - /** * * @author LevelX2 diff --git a/Mage/src/main/java/mage/cards/repository/CardInfo.java b/Mage/src/main/java/mage/cards/repository/CardInfo.java index 87a6d5b9d8c..1600f5b82ad 100644 --- a/Mage/src/main/java/mage/cards/repository/CardInfo.java +++ b/Mage/src/main/java/mage/cards/repository/CardInfo.java @@ -30,6 +30,8 @@ package mage.cards.repository; import com.j256.ormlite.field.DataType; import com.j256.ormlite.field.DatabaseField; import com.j256.ormlite.table.DatabaseTable; +import java.util.*; +import java.util.stream.Collectors; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.SpellAbility; @@ -41,16 +43,13 @@ import mage.constants.*; import mage.util.SubTypeList; import org.apache.log4j.Logger; -import java.util.*; -import java.util.stream.Collectors; - /** * @author North */ @DatabaseTable(tableName = "card") public class CardInfo { - private static final int MAX_RULE_LENGTH = 700; + private static final int MAX_RULE_LENGTH = 750; private static final String SEPARATOR = "@@@"; @DatabaseField(indexName = "name_index") @@ -157,13 +156,30 @@ public class CardInfo { this.setManaCosts(card.getManaCost().getSymbols()); int length = 0; - for (String rule : card.getRules()) { - length += rule.length(); + List rulesList = new ArrayList<>(); + if (card instanceof SplitCard) { + for (String rule : ((SplitCard) card).getLeftHalfCard().getRules()) { + length += rule.length(); + rulesList.add(rule); + } + for (String rule : ((SplitCard) card).getRightHalfCard().getRules()) { + length += rule.length(); + rulesList.add(rule); + } + for (String rule : card.getRules()) { + length += rule.length(); + rulesList.add(rule); + } + } else { + for (String rule : card.getRules()) { + length += rule.length(); + rulesList.add(rule); + } } if (length > MAX_RULE_LENGTH) { length = 0; ArrayList shortRules = new ArrayList<>(); - for (String rule : card.getRules()) { + for (String rule : rulesList) { if (length + rule.length() + 3 <= MAX_RULE_LENGTH) { shortRules.add(rule); length += rule.length() + 3; @@ -175,7 +191,7 @@ public class CardInfo { Logger.getLogger(CardInfo.class).warn("Card rule text was cut - cardname: " + card.getName()); this.setRules(shortRules); } else { - this.setRules(card.getRules()); + this.setRules(rulesList); } SpellAbility spellAbility = card.getSpellAbility(); @@ -306,7 +322,7 @@ public class CardInfo { public final SubTypeList getSubTypes() { SubTypeList sl = new SubTypeList(); - if(subtypes.trim().isEmpty()){ + if (subtypes.trim().isEmpty()) { return sl; } for (String s : subtypes.split(SEPARATOR)) { diff --git a/Mage/src/main/java/mage/filter/predicate/other/CardTextPredicate.java b/Mage/src/main/java/mage/filter/predicate/other/CardTextPredicate.java index c6603f41566..36cf356ce4f 100644 --- a/Mage/src/main/java/mage/filter/predicate/other/CardTextPredicate.java +++ b/Mage/src/main/java/mage/filter/predicate/other/CardTextPredicate.java @@ -28,7 +28,9 @@ package mage.filter.predicate.other; import mage.cards.Card; +import mage.cards.SplitCard; import mage.constants.SubType; +import mage.constants.SuperType; import mage.filter.predicate.Predicate; import mage.game.Game; @@ -39,9 +41,15 @@ import mage.game.Game; public class CardTextPredicate implements Predicate { private final String text; + private final boolean inNames; + private final boolean inTypes; + private final boolean inRules; - public CardTextPredicate(String text) { + public CardTextPredicate(String text, boolean inNames, boolean inTypes, boolean inRules) { this.text = text; + this.inNames = inNames; + this.inTypes = inTypes; + this.inRules = inRules; } @Override @@ -50,7 +58,7 @@ public class CardTextPredicate implements Predicate { return true; } // first check in card name - if (input.getName().toLowerCase().contains(text.toLowerCase())) { + if (inNames && input.getName().toLowerCase().contains(text.toLowerCase())) { return true; } @@ -60,17 +68,40 @@ public class CardTextPredicate implements Predicate { boolean found = false; if (!token.isEmpty()) { // then try to find in rules - for (String rule : input.getRules(game)) { - if (rule.toLowerCase().contains(token)) { - found = true; - break; + if (inRules) { + if (input.isSplitCard()) { + for (String rule : ((SplitCard) input).getLeftHalfCard().getRules(game)) { + if (rule.toLowerCase().contains(token)) { + found = true; + break; + } + } + for (String rule : ((SplitCard) input).getRightHalfCard().getRules(game)) { + if (rule.toLowerCase().contains(token)) { + found = true; + break; + } + } + } + for (String rule : input.getRules(game)) { + if (rule.toLowerCase().contains(token)) { + found = true; + break; + } } } - - for (SubType subType : input.getSubtype(game)) { - if (subType.toString().equalsIgnoreCase(token)) { - found = true; - break; + if (inTypes) { + for (SubType subType : input.getSubtype(game)) { + if (subType.toString().equalsIgnoreCase(token)) { + found = true; + break; + } + } + for (SuperType superType : input.getSuperType()) { + if (superType.toString().equalsIgnoreCase(token)) { + found = true; + break; + } } } } From 94994dd3ec1bc38dfbc553f8b99906a274810a4b Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 12:01:10 +0200 Subject: [PATCH 06/15] * Kalitas, Bloodchief of Ghet - Fixed that the vampire token was also created if the destroyed creature was not moved to the graveyard. --- .../src/mage/cards/k/KalitasBloodchiefOfGhet.java | 7 ++++++- .../cards/single/KalitasBloodchiefOfGhetTest.java | 13 +++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java b/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java index 353bc8682e6..3b1a0392be3 100644 --- a/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java +++ b/Mage.Sets/src/mage/cards/k/KalitasBloodchiefOfGhet.java @@ -96,7 +96,12 @@ class KalitasDestroyEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); - if (permanent != null && permanent.destroy(source.getSourceId(), game, false)) { // if not destroyed or moved to other zone (replacement effect) it returns false + if (permanent != null && permanent.destroy(source.getSourceId(), game, false)) { // if not destroyed it returns false + if (permanent.getZoneChangeCounter(game) + 1 == game.getState().getZoneChangeCounter(permanent.getId()) + && !game.getState().getZone(permanent.getId()).equals(Zone.GRAVEYARD)) { + // A replacement effect has moved the card to another zone as grvayard + return true; + } new CreateTokenEffect(new KalitasVampireToken(permanent.getPower().getValue(), permanent.getToughness().getValue())).apply(game, source); } return true; diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/KalitasBloodchiefOfGhetTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/KalitasBloodchiefOfGhetTest.java index ce58ce1b55d..ea8217863b9 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/KalitasBloodchiefOfGhetTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/KalitasBloodchiefOfGhetTest.java @@ -6,20 +6,25 @@ import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBase; public class KalitasBloodchiefOfGhetTest extends CardTestPlayerBase { + @Test public void testTokenCreatedOnlyIfTargetDies() { + // {B}{B}{B}, {T}: Destroy target creature. If that creature dies this way, create a black Vampire creature token. + // Its power is equal to that creature's power and its toughness is equal to that creature's toughness. addCard(Zone.BATTLEFIELD, playerA, "Kalitas, Bloodchief of Ghet", 1); addCard(Zone.BATTLEFIELD, playerA, "Swamp", 3); - addCard(Zone.BATTLEFIELD, playerA, "Rest in Peace", 1); - addCard(Zone.BATTLEFIELD, playerB, "Gray Ogre", 1); + // When Rest in Peace enters the battlefield, exile all cards from all graveyards. + // If a card or token would be put into a graveyard from anywhere, exile it instead. + addCard(Zone.BATTLEFIELD, playerA, "Rest in Peace", 1); // Enchantment + + addCard(Zone.BATTLEFIELD, playerB, "Gray Ogre", 1); // Creature - Ogre 2/2 activateAbility(3, PhaseStep.PRECOMBAT_MAIN, playerA, "{B}{B}{B}", "Gray Ogre"); setStopAt(3, PhaseStep.BEGIN_COMBAT); execute(); - assertPermanentCount(playerA, 5); - assertPermanentCount(playerB, 0); + assertPermanentCount(playerA, "Vampire", 0); } } From b6a7998eab4416a58ee5819661f26d82ce36421d Mon Sep 17 00:00:00 2001 From: spjspj Date: Sat, 29 Jul 2017 23:55:58 +1000 Subject: [PATCH 07/15] Mana Circles for deck analysis --- .../java/mage/client/cards/DragCardGrid.java | 55 ++++++------ .../java/mage/client/cards/ManaPieChart.java | 84 +++++++++++++++++++ 2 files changed, 110 insertions(+), 29 deletions(-) create mode 100644 Mage.Client/src/main/java/mage/client/cards/ManaPieChart.java diff --git a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java index 2e611c93cb1..6973fa4ea79 100644 --- a/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java +++ b/Mage.Client/src/main/java/mage/client/cards/DragCardGrid.java @@ -7,7 +7,6 @@ import mage.cards.decks.DeckCardLayout; import mage.cards.repository.CardCriteria; import mage.cards.repository.CardInfo; import mage.cards.repository.CardRepository; -import mage.client.MageFrame; import mage.client.constants.Constants; import mage.client.dialog.PreferencesDialog; import mage.client.plugins.impl.Plugins; @@ -1410,38 +1409,36 @@ public class DragCardGrid extends JPanel implements DragCardSource, DragCardTarg } } - String finalInfo = "Found the following quantity of mana costs, mana sources and land types:
    "; - for (String qty : qtys.keySet()) { - int value = qtys.get(qty); - if (value > 0) { - finalInfo += "
  • " + qty + " = " + value; - } - } + JPanel panel = new JPanel(); + panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS)); - for (String source : sourcePips.keySet()) { - int value = sourcePips.get(source); - if (value > 0) { - finalInfo += "
  • " + "Mana source " + source + " = " + value; - } - } + JPanel panel2 = new JPanel(); + panel2.setLayout(new BoxLayout(panel2, BoxLayout.Y_AXIS)); + ManaPieChart chart = new ManaPieChart(pips.get("#w}"), pips.get("#u}"), pips.get("#b}"), pips.get("#r}"), pips.get("#g}"), pips.get("#c}")); + chart.setMinimumSize(new Dimension(200, 200)); + panel2.add(new JLabel("Casting Costs found:")); + panel2.add(chart); - for (String pip : pips.keySet()) { - int value = pips.get(pip); - if (value > 0) { - finalInfo += "
  • " + pip.toUpperCase() + " mana pip/s = " + value; - } - } + JPanel panel3 = new JPanel(); + panel3.setLayout(new BoxLayout(panel3, BoxLayout.Y_AXIS)); + ManaPieChart chart2 = new ManaPieChart(qtys.get("plains"), qtys.get("island"), qtys.get("swamp"), qtys.get("mountain"), qtys.get("forest"), qtys.get("wastes")); + chart2.setMinimumSize(new Dimension(200, 200)); + panel3.add(new JLabel("Basic Land types found:")); + panel3.add(chart2); - for (String mana : manaCounts.keySet()) { - int value = manaCounts.get(mana); - if (value > 0) { - finalInfo += "
  • " + mana.toUpperCase() + " mana sources = " + value; - } - } - finalInfo = finalInfo.replaceAll("#", "\\{"); - finalInfo += "
"; + JPanel panel4 = new JPanel(); + panel4.setLayout(new BoxLayout(panel4, BoxLayout.Y_AXIS)); + ManaPieChart chart3 = new ManaPieChart(manaCounts.get("{W}"), manaCounts.get("{U}"), manaCounts.get("{B}"), manaCounts.get("{R}"), manaCounts.get("{G}"), manaCounts.get("{C}")); + chart3.setMinimumSize(new Dimension(200, 200)); + panel4.add(new JLabel("Mana sources found:")); + panel4.add(chart3); - MageFrame.getInstance().showMessage(finalInfo); + panel.add(panel2); + panel.add(panel3); + panel.add(panel4); + + JFrame frame = new JFrame("JOptionPane showMessageDialog component example"); + JOptionPane.showMessageDialog(frame, panel, "This is the distribution of colors found", JOptionPane.INFORMATION_MESSAGE); } public void blingDeck() { diff --git a/Mage.Client/src/main/java/mage/client/cards/ManaPieChart.java b/Mage.Client/src/main/java/mage/client/cards/ManaPieChart.java new file mode 100644 index 00000000000..a8d447e700d --- /dev/null +++ b/Mage.Client/src/main/java/mage/client/cards/ManaPieChart.java @@ -0,0 +1,84 @@ +package mage.client.cards; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.util.ArrayList; + +import javax.swing.JComponent; + +class Slice { + + double value; + Color color; + + public Slice(double value, Color color) { + this.value = value; + this.color = color; + } +} + +public class ManaPieChart extends JComponent { + + ArrayList slices = new ArrayList(); + + ManaPieChart() { + } + + ManaPieChart(Integer w, Integer u, Integer b, Integer r, Integer g, Integer c) { + if (w != null && w > 0) { + slices.add(new Slice(w, Color.WHITE)); + } + if (u != null && u > 0) { + slices.add(new Slice(u, Color.BLUE)); + } + if (b != null && b > 0) { + slices.add(new Slice(b, Color.BLACK)); + } + if (r != null && r > 0) { + slices.add(new Slice(r, Color.RED)); + } + if (g != null && g > 0) { + slices.add(new Slice(g, Color.GREEN)); + } + if (c != null && c > 0) { + slices.add(new Slice(c, Color.LIGHT_GRAY)); + } + } + + @Override + public Dimension getPreferredSize() { + Dimension preferred = super.getPreferredSize(); + Dimension minimum = getMinimumSize(); + Dimension maximum = getMaximumSize(); + preferred.width = Math.min(Math.max(preferred.width, minimum.width), maximum.width); + preferred.height = Math.min(Math.max(preferred.height, minimum.height), maximum.height); + return preferred; + } + + public void paint(Graphics g) { + drawPie((Graphics2D) g, getBounds(), slices.toArray(new Slice[slices.size()])); + } + + void drawPie(Graphics2D g, Rectangle area, Slice[] slices) { + double total = 0.0D; + for (int i = 0; i < slices.length; i++) { + total += slices[i].value; + } + + double curValue = 0.0D; + int startAngle = 0; + int lastAngle = 0; + for (int i = 0; i < slices.length; i++) { + startAngle = lastAngle; + int arcAngle = (int) (slices[i].value * 360 / total); + + g.setColor(slices[i].color); + g.fillArc(area.x, area.y, area.width - 20, area.height - 20, startAngle, arcAngle); + curValue += slices[i].value; + lastAngle += arcAngle; + } + } +} From 400bbba8e1871cce4d64c3396c4221d56aa604e3 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 17:39:13 +0200 Subject: [PATCH 08/15] * Deactivated macro button, becuase it's not working correctly (#2147). --- .../main/java/mage/client/game/GamePanel.java | 109 +++++++++--------- .../src/mage/player/human/HumanPlayer.java | 30 ++++- .../src/mage/player/human/PlayerResponse.java | 29 ++--- 3 files changed, 92 insertions(+), 76 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 4dcfba71424..cd1fc3dfe8e 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -305,7 +305,7 @@ public final class GamePanel extends javax.swing.JPanel { this.players.clear(); this.playersWhoLeft.clear(); - if (jLayeredPane!= null) { + if (jLayeredPane != null) { jLayeredPane.remove(abilityPicker); jLayeredPane.remove(DialogManager.getManager(gameId)); } @@ -1439,8 +1439,7 @@ public final class GamePanel extends javax.swing.JPanel { bigCard.setBorder(new LineBorder(Color.black, 1, true)); int c = JComponent.WHEN_IN_FOCUSED_WINDOW; - - + btnToggleMacro.setContentAreaFilled(false); btnToggleMacro.setBorder(new EmptyBorder(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, BORDER_SIZE)); btnToggleMacro.setIcon(new ImageIcon(ImageManagerImpl.instance.getToggleRecordMacroButtonImage())); @@ -1804,24 +1803,24 @@ public final class GamePanel extends javax.swing.JPanel { pnlReplay.setLayout(gl_pnlReplay); gl_pnlReplay.setHorizontalGroup( gl_pnlReplay.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(gl_pnlReplay.createSequentialGroup() - .addComponent(btnPreviousPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(btnStopReplay, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnNextPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(btnSkipForward, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(gl_pnlReplay.createSequentialGroup() + .addComponent(btnPreviousPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 41, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 35, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(btnStopReplay, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnNextPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 36, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(btnSkipForward, javax.swing.GroupLayout.PREFERRED_SIZE, 39, javax.swing.GroupLayout.PREFERRED_SIZE)) ); gl_pnlReplay.setVerticalGroup( gl_pnlReplay.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(btnSkipForward, 0, 0, Short.MAX_VALUE) - .addComponent(btnNextPlay, 0, 0, Short.MAX_VALUE) - .addComponent(btnStopReplay, 0, 0, Short.MAX_VALUE) - .addComponent(btnPlay, 0, 0, Short.MAX_VALUE) - .addComponent(btnPreviousPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 31, Short.MAX_VALUE) + .addComponent(btnSkipForward, 0, 0, Short.MAX_VALUE) + .addComponent(btnNextPlay, 0, 0, Short.MAX_VALUE) + .addComponent(btnStopReplay, 0, 0, Short.MAX_VALUE) + .addComponent(btnPlay, 0, 0, Short.MAX_VALUE) + .addComponent(btnPreviousPlay, javax.swing.GroupLayout.PREFERRED_SIZE, 31, Short.MAX_VALUE) ); // Game info panel (buttons on the right panel) @@ -1837,9 +1836,9 @@ public final class GamePanel extends javax.swing.JPanel { .addComponent(btnSkipToEndStepBeforeYourTurn) ) .addGroup(gl_pnlShortCuts.createSequentialGroup() - .addComponent(btnToggleMacro) .addComponent(txtHoldPriority) .addComponent(txtSpellsCast) + /* .addComponent(btnToggleMacro)*/ .addComponent(btnSwitchHands) .addComponent(btnCancelSkip) .addComponent(btnConcede) @@ -1935,46 +1934,46 @@ public final class GamePanel extends javax.swing.JPanel { javax.swing.GroupLayout gl_helperHandButtonsStackArea = new javax.swing.GroupLayout(pnlHelperHandButtonsStackArea); gl_helperHandButtonsStackArea.setHorizontalGroup( gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) - .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() - // .addGap(0) - .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) - .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() - .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) - .addComponent(helper, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(handContainer, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() + // .addGap(0) + .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) + .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() + .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) + .addComponent(helper, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(handContainer, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + ) + .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) + .addComponent(pnlShortCuts, 410, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) + .addComponent(stackObjects, 410, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) + ) ) - .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) - .addComponent(pnlShortCuts, 410, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) - .addComponent(stackObjects, 410, GroupLayout.PREFERRED_SIZE, Short.MAX_VALUE) - ) - ) - .addGap(0) - //.addComponent(jPhases, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() - .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) - .addComponent(phasesContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) - ))) + .addGap(0) + //.addComponent(jPhases, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() + .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) + .addComponent(phasesContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + ))) ); gl_helperHandButtonsStackArea.setVerticalGroup( gl_helperHandButtonsStackArea.createParallelGroup(Alignment.TRAILING) - .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() - .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) - .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) - .addComponent(phasesContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) - ) - //.addPreferredGap(ComponentPlacement.RELATED) - .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) - .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() - .addGap(2) - .addComponent(pnlShortCuts, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) - .addComponent(stackObjects, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() + .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) + .addComponent(pnlBattlefield, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE) + .addComponent(phasesContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ) - .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() - .addComponent(helper, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) - .addComponent(handContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + //.addPreferredGap(ComponentPlacement.RELATED) + .addGroup(gl_helperHandButtonsStackArea.createParallelGroup(Alignment.LEADING) + .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() + .addGap(2) + .addComponent(pnlShortCuts, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(stackObjects, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + ) + .addGroup(gl_helperHandButtonsStackArea.createSequentialGroup() + .addComponent(helper, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(handContainer, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + ) ) ) - ) ); pnlHelperHandButtonsStackArea.setLayout(gl_helperHandButtonsStackArea); @@ -2007,11 +2006,11 @@ public final class GamePanel extends javax.swing.JPanel { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSplitPane0, javax.swing.GroupLayout.DEFAULT_SIZE, 1078, Short.MAX_VALUE) + .addComponent(jSplitPane0, javax.swing.GroupLayout.DEFAULT_SIZE, 1078, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSplitPane0, javax.swing.GroupLayout.DEFAULT_SIZE, 798, Short.MAX_VALUE) + .addComponent(jSplitPane0, javax.swing.GroupLayout.DEFAULT_SIZE, 798, Short.MAX_VALUE) ); } @@ -2103,7 +2102,7 @@ public final class GamePanel extends javax.swing.JPanel { message.setGameId(gameId); MageFrame.getInstance().showUserRequestDialog(message); } - + private void btnToggleMacroActionPerformed(java.awt.event.ActionEvent evt) { SessionHandler.sendPlayerAction(PlayerAction.TOGGLE_RECORD_MACRO, gameId, null); AudioManager.playOnSkipButton(); diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index 4e3225cc759..3c46ffe05f1 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -87,7 +87,6 @@ public class HumanPlayer extends PlayerImpl { protected static FilterAttackingCreature filterAttack = new FilterAttackingCreature(); protected static FilterBlockingCreature filterBlock = new FilterBlockingCreature(); protected final Choice replacementEffectChoice; - private static final Logger logger = Logger.getLogger(HumanPlayer.class); protected HashSet autoSelectReplacementEffects = new HashSet<>(); @@ -119,9 +118,26 @@ public class HumanPlayer extends PlayerImpl { public HumanPlayer(final HumanPlayer player) { super(player); + this.replacementEffectChoice = player.replacementEffectChoice; this.autoSelectReplacementEffects.addAll(autoSelectReplacementEffects); this.currentlyUnpaidMana = player.currentlyUnpaidMana; - this.replacementEffectChoice = player.replacementEffectChoice; + + this.triggerAutoOrderAbilityFirst.addAll(player.triggerAutoOrderAbilityFirst); + this.triggerAutoOrderAbilityLast.addAll(player.triggerAutoOrderAbilityLast); + this.triggerAutoOrderNameFirst.addAll(player.triggerAutoOrderNameFirst); + this.triggerAutoOrderNameLast.addAll(player.triggerAutoOrderNameLast); + + this.requestAutoAnswerId.putAll(player.requestAutoAnswerId); + this.requestAutoAnswerText.putAll(player.requestAutoAnswerText); + + this.holdingPriority = player.holdingPriority; + + this.actionQueue.addAll(player.actionQueue); + this.actionQueueSaved.addAll(player.actionQueueSaved); + this.actionIterations = player.actionIterations; + this.recordingMacro = player.recordingMacro; + this.macroTriggeredSelectionFlag = player.macroTriggeredSelectionFlag; + this.activatingMacro = player.activatingMacro; } protected boolean isExecutingMacro() { @@ -134,6 +150,7 @@ public class HumanPlayer extends PlayerImpl { if (actionQueue.isEmpty() && actionIterations > 0 && !actionQueueSaved.isEmpty()) { actionQueue = new LinkedList(actionQueueSaved); actionIterations--; +// logger.info("MACRO iteration: " + actionIterations); } PlayerResponse action = actionQueue.poll(); if (action != null) { @@ -158,6 +175,11 @@ public class HumanPlayer extends PlayerImpl { protected void waitForResponse(Game game) { if (isExecutingMacro()) { pullResponseFromQueue(game); +// logger.info("MACRO pull from queue: " + response.toString()); +// try { +// TimeUnit.MILLISECONDS.sleep(1000); +// } catch (InterruptedException e) { +// } return; } response.clear(); @@ -166,7 +188,7 @@ public class HumanPlayer extends PlayerImpl { synchronized (response) { try { response.wait(); - logger.debug("Got response from player: " + getId()); + logger.info("Got response from player: " + response.toString()); } catch (InterruptedException ex) { logger.error("Response error for player " + getName() + " gameId: " + game.getId(), ex); } finally { @@ -174,7 +196,7 @@ public class HumanPlayer extends PlayerImpl { } } if (recordingMacro && !macroTriggeredSelectionFlag) { - logger.debug("Adding an action " + response); +// logger.info("Adding an action " + response); actionQueueSaved.add(new PlayerResponse(response)); } } diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/PlayerResponse.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/PlayerResponse.java index fc7b27bed87..2f1e5871c29 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/PlayerResponse.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/PlayerResponse.java @@ -24,8 +24,7 @@ * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. -*/ - + */ package mage.player.human; import java.io.Serializable; @@ -44,29 +43,25 @@ public class PlayerResponse implements Serializable { private Integer responseInteger; private ManaType responseManaType; private UUID responseManaTypePlayerId; - + public PlayerResponse() { clear(); } - + + @Override public String toString() { - return new StringBuilder((responseString == null) ? "null" : responseString) - .append(',') - .append(responseUUID) - .append(',') - .append(responseBoolean) - .append(',') - .append(responseInteger) - .append(',') - .append(responseManaType) - .append(',') - .append(responseManaTypePlayerId).toString(); + return ((responseString == null) ? "null" : responseString) + + ',' + responseUUID + + ',' + responseBoolean + + ',' + responseInteger + + ',' + responseManaType + + ',' + responseManaTypePlayerId; } - + public PlayerResponse(PlayerResponse other) { copy(other); } - + public void copy(PlayerResponse other) { responseString = other.responseString; responseUUID = other.responseUUID; From 5cca05dd23a62a28d04d20567d9db704e6949aa1 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 17:53:28 +0200 Subject: [PATCH 09/15] * Fixed bug in download images logic (fixes #3756). --- .../java/org/mage/plugins/card/images/DownloadPictures.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java index 8249f277f80..02e639ba193 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/images/DownloadPictures.java @@ -26,7 +26,6 @@ import mage.client.constants.Constants; import mage.client.dialog.PreferencesDialog; import mage.client.util.sets.ConstructedFormats; import mage.remote.Connection; -import mage.util.RandomUtil; import net.java.truevfs.access.TFile; import net.java.truevfs.access.TFileOutputStream; import net.java.truevfs.access.TVFS; @@ -107,7 +106,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab p0.add(jLabel1); p0.add(Box.createVerticalStrut(5)); ComboBoxModel jComboBox1Model = new DefaultComboBoxModel(new String[]{ - // "magiccards.info", + // "magiccards.info", "wizards.com", "mythicspoiler.com", "tokens.mtg.onl", //"mtgimage.com (HQ)", @@ -127,7 +126,7 @@ public class DownloadPictures extends DefaultBoundedRangeModel implements Runnab jComboBox1.setAlignmentX(Component.LEFT_ALIGNMENT); jComboBox1.addActionListener(e -> { JComboBox cb = (JComboBox) e.getSource(); - switch (cb.getSelectedIndex()) { + switch (cb.getSelectedIndex() + 1) { case 0: cardImageSource = MagicCardsImageSource.instance; break; From a35abd7f8c41d1ea3f248a35341d685ed30b21ba Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 19:13:13 +0200 Subject: [PATCH 10/15] * Deactivated macro button, becuase it's not working correctly (#2147). --- Mage.Client/src/main/java/mage/client/game/GamePanel.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index cd1fc3dfe8e..c215382b40b 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -1838,7 +1838,7 @@ public final class GamePanel extends javax.swing.JPanel { .addGroup(gl_pnlShortCuts.createSequentialGroup() .addComponent(txtHoldPriority) .addComponent(txtSpellsCast) - /* .addComponent(btnToggleMacro)*/ + /*.addComponent(btnToggleMacro)*/ .addComponent(btnSwitchHands) .addComponent(btnCancelSkip) .addComponent(btnConcede) @@ -1871,7 +1871,7 @@ public final class GamePanel extends javax.swing.JPanel { .addComponent(btnSkipToEndStepBeforeYourTurn) ) .addGroup(gl_pnlShortCuts.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(btnToggleMacro) + /*.addComponent(btnToggleMacro)*/ .addComponent(txtHoldPriority) .addComponent(txtSpellsCast) .addComponent(btnSwitchHands) From 0ef94a588c53d5cfd895958179771313bb1e1bba Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 19:13:42 +0200 Subject: [PATCH 11/15] * Fixed some null pointer or other exception bugs. --- .../java/mage/server/game/GameController.java | 14 +++++----- .../src/mage/cards/a/AthreosGodOfPassage.java | 11 ++++---- Mage.Sets/src/mage/cards/b/BlazingTorch.java | 4 +-- Mage.Sets/src/mage/cards/c/CarrionThrash.java | 7 +++-- .../mage/cards/c/ChandraTorchOfDefiance.java | 9 ++---- .../src/mage/cards/w/WildfireEternal.java | 2 +- .../mage/abilities/ActivatedAbilityImpl.java | 12 ++++++-- .../effects/common/CounterTargetEffect.java | 2 +- .../continuous/BecomesColorSourceEffect.java | 3 +- .../java/mage/game/combat/CombatGroup.java | 28 ++++++++++--------- 10 files changed, 47 insertions(+), 45 deletions(-) diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index 0046d625c07..1787d6739ed 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -27,6 +27,11 @@ */ package mage.server.game; +import java.io.*; +import java.util.*; +import java.util.Map.Entry; +import java.util.concurrent.*; +import java.util.zip.GZIPOutputStream; import mage.MageException; import mage.abilities.Ability; import mage.cards.Card; @@ -61,12 +66,6 @@ import mage.view.ChatMessage.MessageColor; import mage.view.ChatMessage.MessageType; import org.apache.log4j.Logger; -import java.io.*; -import java.util.*; -import java.util.Map.Entry; -import java.util.concurrent.*; -import java.util.zip.GZIPOutputStream; - /** * @author BetaSteward_at_googlemail.com */ @@ -271,8 +270,8 @@ public class GameController implements GameCallback { }; PriorityTimer timer = new PriorityTimer(count, delayMs, executeOnNoTimeLeft); - timers.put(playerId, timer); timer.init(game.getId()); + timers.put(playerId, timer); return timer; } @@ -983,6 +982,7 @@ public class GameController implements GameCallback { @FunctionalInterface interface Command { + void execute(UUID player); } diff --git a/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java b/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java index 093b7ff0df8..3e888169ba4 100644 --- a/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java +++ b/Mage.Sets/src/mage/cards/a/AthreosGodOfPassage.java @@ -39,6 +39,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.continuous.LoseCreatureTypeSourceEffect; import mage.abilities.keyword.IndestructibleAbility; +import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; @@ -49,7 +50,6 @@ 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.common.TargetOpponent; @@ -67,7 +67,7 @@ public class AthreosGodOfPassage extends CardImpl { } public AthreosGodOfPassage(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT,CardType.CREATURE},"{1}{W}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT, CardType.CREATURE}, "{1}{W}{B}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.GOD); @@ -118,7 +118,7 @@ class AthreosGodOfPassageReturnEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { UUID creatureId = (UUID) this.getValue("creatureId"); - Permanent creature = game.getPermanentOrLKIBattlefield(creatureId); + Card creature = game.getCard(creatureId); if (creature != null) { Player opponent = game.getPlayer(source.getFirstTarget()); boolean paid = false; @@ -133,7 +133,7 @@ class AthreosGodOfPassageReturnEffect extends OneShotEffect { } if (opponent == null || !paid) { if (game.getState().getZone(creature.getId()) == Zone.GRAVEYARD) { - controller.moveCards(game.getCard(creatureId), Zone.HAND, source, game); + controller.moveCards(creature, Zone.HAND, source, game); } } } @@ -171,8 +171,7 @@ class AthreosDiesCreatureTriggeredAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { ZoneChangeEvent zEvent = (ZoneChangeEvent) event; if (zEvent.getFromZone() == Zone.BATTLEFIELD && zEvent.getToZone() == Zone.GRAVEYARD) { - Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); - if (permanent != null && filter.match(permanent, sourceId, controllerId, game)) { + if (zEvent.getTarget() != null && filter.match(zEvent.getTarget(), sourceId, controllerId, game)) { for (Effect effect : this.getEffects()) { effect.setValue("creatureId", event.getTargetId()); } diff --git a/Mage.Sets/src/mage/cards/b/BlazingTorch.java b/Mage.Sets/src/mage/cards/b/BlazingTorch.java index 83239ba3522..805ccc9972b 100644 --- a/Mage.Sets/src/mage/cards/b/BlazingTorch.java +++ b/Mage.Sets/src/mage/cards/b/BlazingTorch.java @@ -55,7 +55,7 @@ import mage.target.common.TargetCreatureOrPlayer; public class BlazingTorch extends CardImpl { public BlazingTorch(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{1}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); this.subtype.add("Equipment"); // Equipped creature can't be blocked by Vampires or Zombies. (!this is a static ability of the equipment) @@ -95,7 +95,7 @@ class BlazingTorchEvasionEffect extends RestrictionEffect { Permanent equipment = game.getPermanent(source.getSourceId()); if (equipment != null && equipment.getAttachedTo() != null) { Permanent equipped = game.getPermanent(equipment.getAttachedTo()); - if (permanent.getId().equals(equipped.getId())) { + if (equipped != null && permanent.getId().equals(equipped.getId())) { return true; } } diff --git a/Mage.Sets/src/mage/cards/c/CarrionThrash.java b/Mage.Sets/src/mage/cards/c/CarrionThrash.java index ccd450b0a4e..c2b6d9f23bd 100644 --- a/Mage.Sets/src/mage/cards/c/CarrionThrash.java +++ b/Mage.Sets/src/mage/cards/c/CarrionThrash.java @@ -37,7 +37,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.filter.common.FilterCreatureCard; -import mage.filter.predicate.permanent.AnotherPredicate; +import mage.filter.predicate.mageobject.AnotherCardPredicate; import mage.target.common.TargetCardInYourGraveyard; /** @@ -47,12 +47,13 @@ import mage.target.common.TargetCardInYourGraveyard; public class CarrionThrash extends CardImpl { private static final FilterCreatureCard filter = new FilterCreatureCard("another creature card from your graveyard"); + static { - filter.add(new AnotherPredicate()); + filter.add(new AnotherCardPredicate()); } public CarrionThrash(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{R}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{R}{G}"); this.subtype.add("Viashino"); this.subtype.add("Warrior"); diff --git a/Mage.Sets/src/mage/cards/c/ChandraTorchOfDefiance.java b/Mage.Sets/src/mage/cards/c/ChandraTorchOfDefiance.java index 0ca23c7cbaa..2d4f9cac48d 100644 --- a/Mage.Sets/src/mage/cards/c/ChandraTorchOfDefiance.java +++ b/Mage.Sets/src/mage/cards/c/ChandraTorchOfDefiance.java @@ -93,7 +93,7 @@ class ChandraTorchOfDefianceEffect extends OneShotEffect { public ChandraTorchOfDefianceEffect() { super(Outcome.Detriment); - this.staticText = "Exile the top card of your library. You may cast that card. If you don't, Chandra, Torch of Defiance deals 2 damage to each opponent"; + this.staticText = "Exile the top card of your library. You may cast that card. If you don't, {this} deals 2 damage to each opponent"; } public ChandraTorchOfDefianceEffect(final ChandraTorchOfDefianceEffect effect) { @@ -111,17 +111,12 @@ class ChandraTorchOfDefianceEffect extends OneShotEffect { MageObject sourceObject = source.getSourceObject(game); if (controller != null && sourceObject != null && controller.getLibrary().hasCards()) { Library library = controller.getLibrary(); - Card card = library.removeFromTop(game); + Card card = library.getFromTop(game); if (card != null) { boolean exiledCardWasCast = false; controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true); if (!card.getManaCost().isEmpty()) { if (controller.chooseUse(Outcome.Benefit, "Cast the card? (You still pay the costs)", source, game) && !card.isLand()) { -// LinkedHashMap useableAbilities = controller.getUseableActivatedAbilities(card, Zone.EXILED, game); -// for (ActivatedAbility ability : useableAbilities.values()) { -// -// } -// controller.activateAbility(useableAbilities, game); exiledCardWasCast = controller.cast(card.getSpellAbility(), game, false); } } diff --git a/Mage.Sets/src/mage/cards/w/WildfireEternal.java b/Mage.Sets/src/mage/cards/w/WildfireEternal.java index c5c911cc50e..ed524222e2e 100644 --- a/Mage.Sets/src/mage/cards/w/WildfireEternal.java +++ b/Mage.Sets/src/mage/cards/w/WildfireEternal.java @@ -81,7 +81,7 @@ class WildfireEternalCastEffect extends OneShotEffect { public WildfireEternalCastEffect() { super(Outcome.Benefit); - this.staticText = " you may cast an instant or sorcery card from your hand without paying its mana cost."; + this.staticText = "you may cast an instant or sorcery card from your hand without paying its mana cost"; } public WildfireEternalCastEffect(final WildfireEternalCastEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java b/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java index c37b815e743..5021a83896f 100644 --- a/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/ActivatedAbilityImpl.java @@ -28,6 +28,7 @@ package mage.abilities; import java.util.UUID; +import mage.MageObject; import mage.abilities.costs.Cost; import mage.abilities.costs.Costs; import mage.abilities.costs.mana.ManaCosts; @@ -42,6 +43,7 @@ import mage.constants.TargetController; import mage.constants.TimingRule; import mage.constants.Zone; import mage.game.Game; +import mage.game.command.Emblem; import mage.game.permanent.Permanent; /** @@ -215,9 +217,13 @@ public abstract class ActivatedAbilityImpl extends AbilityImpl implements Activa if (this.controllerId != null && this.controllerId.equals(playerId)) { return true; } else { - Card card = (Card) game.getObject(this.sourceId); - if (card != null && game.getState().getZone(this.sourceId) != Zone.BATTLEFIELD) { - return card.getOwnerId().equals(playerId); + MageObject mageObject = game.getObject(this.sourceId); + if (mageObject instanceof Emblem) { + return ((Emblem) mageObject).getControllerId().equals(playerId); + } else { + if (game.getState().getZone(this.sourceId) != Zone.BATTLEFIELD) { + return ((Card) mageObject).getOwnerId().equals(playerId); + } } } return false; diff --git a/Mage/src/main/java/mage/abilities/effects/common/CounterTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CounterTargetEffect.java index c569241ae63..f3e1ee52b11 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CounterTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CounterTargetEffect.java @@ -69,6 +69,6 @@ public class CounterTargetEffect extends OneShotEffect { if (staticText != null && !staticText.isEmpty()) { return staticText; } - return "counter target " + (mode.getTargets().get(0) != null ? mode.getTargets().get(0).getTargetName() : "spell"); + return "counter target " + (!mode.getTargets().isEmpty() ? mode.getTargets().get(0).getTargetName() : "spell"); } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesColorSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesColorSourceEffect.java index 2ab725e74a2..b7ba3d680c1 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesColorSourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/BecomesColorSourceEffect.java @@ -109,9 +109,8 @@ public class BecomesColorSourceEffect extends ContinuousEffectImpl { this.discard(); } return true; - } else { - throw new UnsupportedOperationException("No color set"); } + return false; } @Override diff --git a/Mage/src/main/java/mage/game/combat/CombatGroup.java b/Mage/src/main/java/mage/game/combat/CombatGroup.java index 455f7fb6082..f0ecf761ea0 100644 --- a/Mage/src/main/java/mage/game/combat/CombatGroup.java +++ b/Mage/src/main/java/mage/game/combat/CombatGroup.java @@ -282,20 +282,22 @@ public class CombatGroup implements Serializable, Copyable { if (blocked) { for (UUID blockerId : blockerOrder) { Permanent blocker = game.getPermanent(blockerId); - int lethalDamage; - if (attacker.getAbilities().containsKey(DeathtouchAbility.getInstance().getId())) { - lethalDamage = 1; - } else { - lethalDamage = blocker.getToughness().getValue() - blocker.getDamage(); + if (blocker != null) { + int lethalDamage; + if (attacker.getAbilities().containsKey(DeathtouchAbility.getInstance().getId())) { + lethalDamage = 1; + } else { + lethalDamage = blocker.getToughness().getValue() - blocker.getDamage(); + } + if (lethalDamage >= damage) { + assigned.put(blockerId, damage); + damage = 0; + break; + } + int damageAssigned = player.getAmount(lethalDamage, damage, "Assign damage to " + blocker.getName(), game); + assigned.put(blockerId, damageAssigned); + damage -= damageAssigned; } - if (lethalDamage >= damage) { - assigned.put(blockerId, damage); - damage = 0; - break; - } - int damageAssigned = player.getAmount(lethalDamage, damage, "Assign damage to " + blocker.getName(), game); - assigned.put(blockerId, damageAssigned); - damage -= damageAssigned; } if (damage > 0 && hasTrample(attacker)) { defenderDamage(attacker, damage, game); From 6530b404c8b4ed6c225e7c6d8cc31665f5166fe4 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 20:13:48 +0200 Subject: [PATCH 12/15] * Some Aftermath fixes. --- .../test/cards/single/akh/DuskDawnTest.java | 5 +- .../abilities/keyword/AftermathAbility.java | 79 ++++++++++++++++++- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/akh/DuskDawnTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/akh/DuskDawnTest.java index 067f5c040d5..d988ff98559 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/single/akh/DuskDawnTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/akh/DuskDawnTest.java @@ -46,6 +46,10 @@ public class DuskDawnTest extends CardTestPlayerBase { @Test public void testCastDawnFromGraveyard() { + // Dusk + // Destroy all creatures with power 3 or greater. + // Dawn + // Return all creature cards with power less than or equal to 2 from your graveyard to your hand. addCard(Zone.GRAVEYARD, playerA, "Dusk // Dawn"); addCard(Zone.BATTLEFIELD, playerA, "Plains", 5); addCard(Zone.GRAVEYARD, playerA, "Devoted Hero"); @@ -85,5 +89,4 @@ public class DuskDawnTest extends CardTestPlayerBase { assertGraveyardCount(playerA, "Devoted Hero", 1); } - } diff --git a/Mage/src/main/java/mage/abilities/keyword/AftermathAbility.java b/Mage/src/main/java/mage/abilities/keyword/AftermathAbility.java index 35b374f513c..cd246dd20a8 100644 --- a/Mage/src/main/java/mage/abilities/keyword/AftermathAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/AftermathAbility.java @@ -31,11 +31,14 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.*; -import mage.abilities.effects.common.ExileSpellEffect; import mage.cards.Card; +import mage.cards.SplitCardHalf; import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; +import mage.game.stack.Spell; +import mage.players.Player; /** * Aftermath @@ -52,7 +55,7 @@ public class AftermathAbility extends SimpleStaticAbility { public AftermathAbility() { super(Zone.ALL, new AftermathCastFromGraveyard()); addEffect(new AftermathCantCastFromHand()); - addEffect(ExileSpellEffect.getInstance()); + addEffect(new AftermathExileAsResolvesFromGraveyard()); } public AftermathAbility(final AftermathAbility ability) { @@ -141,3 +144,75 @@ class AftermathCantCastFromHand extends ContinuousRuleModifyingEffectImpl { return false; } } + +class AftermathExileAsResolvesFromGraveyard extends ReplacementEffectImpl { + + AftermathExileAsResolvesFromGraveyard() { + super(Duration.WhileOnStack, Outcome.Detriment); + this.staticText = "Exile it afterwards."; + } + + AftermathExileAsResolvesFromGraveyard(AftermathExileAsResolvesFromGraveyard effect) { + super(effect); + } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ZONE_CHANGE; + } + + @Override + public boolean applies(GameEvent evt, Ability source, Game game) { + ZoneChangeEvent event = (ZoneChangeEvent) evt; + if (event.getFromZone() == Zone.STACK && event.getToZone() != Zone.EXILED) { + // Moving something from stack to somewhere else + + // Get the source id, getting the whole split card's ID, because + // that's the card that is changing zones in the event, but + // source.getSourceId is only the split card half. + // If branch so that we also support putting Aftermath on + // non-split cards for... whatever reason, in case somebody + // wants to do that in the future. + UUID sourceId = source.getSourceId(); + Card sourceCard = game.getCard(source.getSourceId()); + if (sourceCard != null && sourceCard instanceof SplitCardHalf) { + sourceCard = ((SplitCardHalf) sourceCard).getParentCard(); + sourceId = sourceCard.getId(); + } + + if (event.getTargetId() == sourceId) { + // Moving this spell from stack to yard + Spell spell = game.getStack().getSpell(source.getSourceId()); + if (spell != null && spell.getFromZone() == Zone.GRAVEYARD) { + // And this spell was cast from the graveyard, so we need to exile it + return true; + } + } + } + return false; + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + UUID sourceId = source.getSourceId(); + Card sourceCard = game.getCard(source.getSourceId()); + if (sourceCard != null && sourceCard instanceof SplitCardHalf) { + sourceCard = ((SplitCardHalf) sourceCard).getParentCard(); + sourceId = sourceCard.getId(); + } + + if (sourceCard != null) { + Player player = game.getPlayer(sourceCard.getOwnerId()); + if (player != null) { + return player.moveCardToExileWithInfo(sourceCard, null, "", sourceId, game, ((ZoneChangeEvent) event).getFromZone(), true); + } + } + return false; + } + + @Override + public AftermathExileAsResolvesFromGraveyard copy() { + return new AftermathExileAsResolvesFromGraveyard(this); + } + +} From 7ba051871d631531c9545cd3aabbb1908d04fdc4 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 20:22:07 +0200 Subject: [PATCH 13/15] * Fixed minor bug that the tables list was not cleared if no active table did exist. --- .../java/mage/client/table/TablesPanel.form | 2 +- .../java/mage/client/table/TablesPanel.java | 69 +++++++++---------- 2 files changed, 34 insertions(+), 37 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.form b/Mage.Client/src/main/java/mage/client/table/TablesPanel.form index 30e1a8e2284..b764e017700 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.form +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.form @@ -39,7 +39,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index d9aad35135b..4e14af92622 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -33,12 +33,28 @@ */ package mage.client.table; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.beans.PropertyVetoException; +import java.io.File; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import javax.swing.*; +import javax.swing.table.AbstractTableModel; import mage.cards.decks.importer.DeckImporterUtil; import mage.client.MageFrame; import mage.client.SessionHandler; import mage.client.chat.ChatPanelBasic; import mage.client.components.MageComponents; import mage.client.dialog.*; +import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_ORDER; +import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_WIDTH; +import static mage.client.table.TablesPanel.PASSWORDED; import mage.client.util.ButtonColumn; import mage.client.util.GUISizeHelper; import mage.client.util.IgnoreList; @@ -55,25 +71,6 @@ import mage.view.TableView; import mage.view.UserRequestMessage; import org.apache.log4j.Logger; -import javax.swing.*; -import javax.swing.table.AbstractTableModel; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.beans.PropertyVetoException; -import java.io.File; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.List; -import java.util.concurrent.CancellationException; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; - -import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_ORDER; -import static mage.client.dialog.PreferencesDialog.KEY_TABLES_COLUMNS_WIDTH; -import static mage.client.table.TablesPanel.PASSWORDED; - /** * * @author BetaSteward_at_googlemail.com @@ -94,7 +91,7 @@ public class TablesPanel extends javax.swing.JPanel { private NewTableDialog newTableDialog; private NewTournamentDialog newTournamentDialog; private final GameChooser gameChooser; - private List messages; + private java.util.List messages; private int currentMessage; private final MageTableRowSorter activeTablesSorter; @@ -231,7 +228,7 @@ public class TablesPanel extends javax.swing.JPanel { String action = (String) matchesModel.getValueAt(modelRow, MatchesTableModel.ACTION_COLUMN); switch (action) { case "Replay": - List gameList = matchesModel.getListofGames(modelRow); + java.util.List gameList = matchesModel.getListofGames(modelRow); if (gameList != null && !gameList.isEmpty()) { if (gameList.size() == 1) { SessionHandler.replayGame(gameList.get(0)); @@ -486,7 +483,7 @@ public class TablesPanel extends javax.swing.JPanel { protected void reloadMessages() { // reload server messages - List serverMessages = SessionHandler.getServerMessages(); + java.util.List serverMessages = SessionHandler.getServerMessages(); synchronized (this) { this.messages = serverMessages; this.currentMessage = 0; @@ -525,7 +522,7 @@ public class TablesPanel extends javax.swing.JPanel { public void setTableFilter() { // state - List> stateFilterList = new ArrayList<>(); + java.util.List> stateFilterList = new ArrayList<>(); if (btnStateWaiting.isSelected()) { stateFilterList.add(RowFilter.regexFilter("Waiting", TableTableModel.COLUMN_STATUS)); } @@ -534,7 +531,7 @@ public class TablesPanel extends javax.swing.JPanel { } // type - List> typeFilterList = new ArrayList<>(); + java.util.List> typeFilterList = new ArrayList<>(); if (btnTypeMatch.isSelected()) { typeFilterList.add(RowFilter.regexFilter("Two|Commander|Free|Tiny|Momir", TableTableModel.COLUMN_GAME_TYPE)); } @@ -546,7 +543,7 @@ public class TablesPanel extends javax.swing.JPanel { } // format - List> formatFilterList = new ArrayList<>(); + java.util.List> formatFilterList = new ArrayList<>(); if (btnFormatBlock.isSelected()) { formatFilterList.add(RowFilter.regexFilter("^Constructed.*Block", TableTableModel.COLUMN_DECK_TYPE)); } @@ -575,7 +572,7 @@ public class TablesPanel extends javax.swing.JPanel { formatFilterList.add(RowFilter.regexFilter("^Momir Basic|^Constructed - Pauper|^Constructed - Frontier|^Constructed - Extended|^Constructed - Eternal|^Constructed - Historical|^Constructed - Super|^Constructed - Freeform|^Australian Highlander|^Canadian Highlander|^Constructed - Old", TableTableModel.COLUMN_DECK_TYPE)); } - List> skillFilterList = new ArrayList<>(); + java.util.List> skillFilterList = new ArrayList<>(); if (btnSkillBeginner.isSelected()) { skillFilterList.add(RowFilter.regexFilter(SkillLevel.BEGINNER.toString(), TableTableModel.COLUMN_SKILL)); } @@ -586,7 +583,7 @@ public class TablesPanel extends javax.swing.JPanel { skillFilterList.add(RowFilter.regexFilter(SkillLevel.SERIOUS.toString(), TableTableModel.COLUMN_SKILL)); } - List> ratingFilterList = new ArrayList<>(); + java.util.List> ratingFilterList = new ArrayList<>(); if (btnRated.isSelected()) { ratingFilterList.add(RowFilter.regexFilter("^Rated", TableTableModel.COLUMN_RATING)); } @@ -595,7 +592,7 @@ public class TablesPanel extends javax.swing.JPanel { } // Password - List> passwordFilterList = new ArrayList<>(); + java.util.List> passwordFilterList = new ArrayList<>(); if (btnOpen.isSelected()) { passwordFilterList.add(RowFilter.regexFilter("^$", TableTableModel.COLUMN_PASSWORD)); } @@ -604,7 +601,7 @@ public class TablesPanel extends javax.swing.JPanel { } // Hide games of ignored players - List> ignoreListFilterList = new ArrayList<>(); + java.util.List> ignoreListFilterList = new ArrayList<>(); String serverAddress = SessionHandler.getSession().getServerHostname().orElseGet(() -> ""); final Set ignoreListCopy = IgnoreList.ignoreList(serverAddress); if (!ignoreListCopy.isEmpty()) { @@ -622,7 +619,7 @@ public class TablesPanel extends javax.swing.JPanel { || passwordFilterList.isEmpty()) { // no selection activeTablesSorter.setRowFilter(RowFilter.regexFilter("Nothing", TableTableModel.COLUMN_SKILL)); } else { - List> filterList = new ArrayList<>(); + java.util.List> filterList = new ArrayList<>(); if (stateFilterList.size() > 1) { filterList.add(RowFilter.orFilter(stateFilterList)); @@ -1418,7 +1415,7 @@ class UpdateTablesTask extends SwingWorker> { protected Void doInBackground() throws Exception { while (!isCancelled()) { Collection tables = SessionHandler.getTables(roomId); - if (!tables.isEmpty()) { + if (tables != null) { this.publish(tables); } TimeUnit.SECONDS.sleep(3); @@ -1427,7 +1424,7 @@ class UpdateTablesTask extends SwingWorker> { } @Override - protected void process(List> view) { + protected void process(java.util.List> view) { panel.updateTables(view.get(0)); count++; if (count > 60) { @@ -1471,7 +1468,7 @@ class UpdatePlayersTask extends SwingWorker> { } @Override - protected void process(List> roomUserInfo) { + protected void process(java.util.List> roomUserInfo) { chat.setRoomUserInfo(roomUserInfo); } @@ -1549,7 +1546,7 @@ class MatchesTableModel extends AbstractTableModel { return ""; } - public List getListofGames(int row) { + public java.util.List getListofGames(int row) { return matches[row].getGames(); } @@ -1613,7 +1610,7 @@ class UpdateMatchesTask extends SwingWorker> { } @Override - protected void process(List> view) { + protected void process(java.util.List> view) { panel.updateMatches(view.get(0)); } @@ -1635,7 +1632,7 @@ class GameChooser extends JPopupMenu { } - public void show(List games, Point p) { + public void show(java.util.List games, Point p) { if (p == null) { return; } From fe2ee5dfec86919b9b25fc6b3990cf40958710f3 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 29 Jul 2017 20:35:16 +0200 Subject: [PATCH 14/15] Xmage 1.4.25V0 --- Mage.Client/pom.xml | 2 +- Mage.Common/pom.xml | 2 +- .../src/main/java/mage/utils/MageVersion.java | 4 ++-- Mage.Plugins/Mage.Counter.Plugin/pom.xml | 2 +- Mage.Plugins/pom.xml | 2 +- Mage.Server.Console/pom.xml | 2 +- Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml | 2 +- Mage.Server.Plugins/Mage.Deck.Limited/pom.xml | 2 +- .../Mage.Game.CanadianHighlanderDuel/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml | 2 +- .../Mage.Game.CommanderFreeForAll/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml | 2 +- .../Mage.Game.TinyLeadersDuel/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml | 2 +- Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml | 2 +- Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml | 2 +- Mage.Server.Plugins/Mage.Player.AI/pom.xml | 2 +- Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml | 2 +- Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml | 2 +- Mage.Server.Plugins/Mage.Player.Human/pom.xml | 2 +- .../Mage.Tournament.BoosterDraft/pom.xml | 2 +- .../Mage.Tournament.Constructed/pom.xml | 2 +- Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml | 2 +- Mage.Server.Plugins/pom.xml | 2 +- Mage.Server/pom.xml | 2 +- Mage.Sets/pom.xml | 2 +- Mage.Stats/pom.xml | 2 +- Mage.Tests/pom.xml | 2 +- Mage.Updater/pom.xml | 2 +- Mage.Verify/pom.xml | 2 +- Mage/pom.xml | 2 +- .../java/mage/cards/repository/CardRepository.java | 13 ++++--------- pom.xml | 4 ++-- 34 files changed, 39 insertions(+), 44 deletions(-) diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml index f2de6ebcf85..0ea1a89ba60 100644 --- a/Mage.Client/pom.xml +++ b/Mage.Client/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 org.mage diff --git a/Mage.Common/pom.xml b/Mage.Common/pom.xml index ad208f35978..128e85256ba 100644 --- a/Mage.Common/pom.xml +++ b/Mage.Common/pom.xml @@ -7,7 +7,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 mage-common diff --git a/Mage.Common/src/main/java/mage/utils/MageVersion.java b/Mage.Common/src/main/java/mage/utils/MageVersion.java index 7c567df7b2b..867e0d7a849 100644 --- a/Mage.Common/src/main/java/mage/utils/MageVersion.java +++ b/Mage.Common/src/main/java/mage/utils/MageVersion.java @@ -40,8 +40,8 @@ public class MageVersion implements Serializable, Comparable { */ public final static int MAGE_VERSION_MAJOR = 1; public final static int MAGE_VERSION_MINOR = 4; - public final static int MAGE_VERSION_PATCH = 24; - public final static String MAGE_VERSION_MINOR_PATCH = "V3"; + public final static int MAGE_VERSION_PATCH = 25; + public final static String MAGE_VERSION_MINOR_PATCH = "V0"; public final static String MAGE_VERSION_INFO = ""; private final int major; diff --git a/Mage.Plugins/Mage.Counter.Plugin/pom.xml b/Mage.Plugins/Mage.Counter.Plugin/pom.xml index d285273f7f6..c0caea8e84c 100644 --- a/Mage.Plugins/Mage.Counter.Plugin/pom.xml +++ b/Mage.Plugins/Mage.Counter.Plugin/pom.xml @@ -7,7 +7,7 @@ org.mage mage-plugins - 1.4.24 + 1.4.25 mage-counter-plugin diff --git a/Mage.Plugins/pom.xml b/Mage.Plugins/pom.xml index 8562bbb68b6..a839dd87eb1 100644 --- a/Mage.Plugins/pom.xml +++ b/Mage.Plugins/pom.xml @@ -7,7 +7,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 mage-plugins diff --git a/Mage.Server.Console/pom.xml b/Mage.Server.Console/pom.xml index f5d0506f72a..463763841ad 100644 --- a/Mage.Server.Console/pom.xml +++ b/Mage.Server.Console/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 org.mage diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml index cf44137297a..ce6ba038aa9 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-deck-constructed diff --git a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml index 2bf3742952a..d2faa06b074 100644 --- a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml +++ b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-deck-limited diff --git a/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml index d654d973e66..800112bc85e 100644 --- a/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-game-canadianhighlanderduel diff --git a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml index 12b6f88e8a8..9d7aed28fae 100644 --- a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-game-commanderduel diff --git a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml index ab523a9fe1a..cad0fd770bc 100644 --- a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml @@ -6,7 +6,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-game-commanderfreeforall diff --git a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml index 6c33316cc92..e0908806aeb 100644 --- a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-game-freeforall diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml index b17f01f4dc1..bd5d6b34e4c 100644 --- a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-game-momirduel diff --git a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml index 4df4d733b14..84942c56c10 100644 --- a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-game-tinyleadersduel diff --git a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml index 0a80e4c370b..ca274fb980b 100644 --- a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-game-twoplayerduel diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml index 684eacda572..75089fbbf06 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-player-ai-draftbot diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml index 8a1739ee54c..80968f19660 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-player-ai-ma diff --git a/Mage.Server.Plugins/Mage.Player.AI/pom.xml b/Mage.Server.Plugins/Mage.Player.AI/pom.xml index 11d0f5e1a9c..fdfa27f9baf 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AI/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-player-ai diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml index 0018d9200f5..73c1a33e593 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-player-ai-mcts diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml index f846f475ff7..0f7bb70257e 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-player-aiminimax diff --git a/Mage.Server.Plugins/Mage.Player.Human/pom.xml b/Mage.Server.Plugins/Mage.Player.Human/pom.xml index e2ee8c6cb06..dcfdc05152c 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.Human/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-player-human diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml index 1a23ebb769b..6dc1d6a64ce 100644 --- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-tournament-boosterdraft diff --git a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml index ed1fe7838e5..e9ce701b75c 100644 --- a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-tournament-constructed diff --git a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml index 247a8bddff5..08aa67f7b9b 100644 --- a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml @@ -7,7 +7,7 @@ org.mage mage-server-plugins - 1.4.24 + 1.4.25 mage-tournament-sealed diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml index 3573e2a2127..fd60041fdea 100644 --- a/Mage.Server.Plugins/pom.xml +++ b/Mage.Server.Plugins/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 mage-server-plugins diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml index b206132209c..0edcb6ec86f 100644 --- a/Mage.Server/pom.xml +++ b/Mage.Server/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 mage-server diff --git a/Mage.Sets/pom.xml b/Mage.Sets/pom.xml index 0d466cc360a..e1d245474af 100644 --- a/Mage.Sets/pom.xml +++ b/Mage.Sets/pom.xml @@ -7,7 +7,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 org.mage diff --git a/Mage.Stats/pom.xml b/Mage.Stats/pom.xml index 172a6cc92d3..0e965ced727 100644 --- a/Mage.Stats/pom.xml +++ b/Mage.Stats/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 org.mage diff --git a/Mage.Tests/pom.xml b/Mage.Tests/pom.xml index 7a119919a37..70539614ea3 100644 --- a/Mage.Tests/pom.xml +++ b/Mage.Tests/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 mage-tests diff --git a/Mage.Updater/pom.xml b/Mage.Updater/pom.xml index ae6f7107bd1..cdf272ca1e7 100644 --- a/Mage.Updater/pom.xml +++ b/Mage.Updater/pom.xml @@ -5,7 +5,7 @@ mage-root org.mage - 1.4.24 + 1.4.25 4.0.0 diff --git a/Mage.Verify/pom.xml b/Mage.Verify/pom.xml index e25e894db3d..97b59fb45f6 100644 --- a/Mage.Verify/pom.xml +++ b/Mage.Verify/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 mage-verify diff --git a/Mage/pom.xml b/Mage/pom.xml index 178d3afc6b0..c5bfd9f408c 100644 --- a/Mage/pom.xml +++ b/Mage/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 mage diff --git a/Mage/src/main/java/mage/cards/repository/CardRepository.java b/Mage/src/main/java/mage/cards/repository/CardRepository.java index d2fa7275ce4..cde82924484 100644 --- a/Mage/src/main/java/mage/cards/repository/CardRepository.java +++ b/Mage/src/main/java/mage/cards/repository/CardRepository.java @@ -37,16 +37,15 @@ import com.j256.ormlite.stmt.Where; import com.j256.ormlite.support.ConnectionSource; import com.j256.ormlite.support.DatabaseConnection; import com.j256.ormlite.table.TableUtils; +import java.io.File; +import java.sql.SQLException; +import java.util.*; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SetType; import mage.util.RandomUtil; import org.apache.log4j.Logger; -import java.io.File; -import java.sql.SQLException; -import java.util.*; - /** * @author North */ @@ -59,7 +58,7 @@ public enum CardRepository { // raise this if db structure was changed private static final long CARD_DB_VERSION = 51; // raise this if new cards were added to the server - private static final long CARD_CONTENT_VERSION = 85; + private static final long CARD_CONTENT_VERSION = 86; private final TreeSet landTypes = new TreeSet<>(); private Dao cardDao; private Set classNames; @@ -274,10 +273,6 @@ public enum CardRepository { return names; } - - - - public CardInfo findCard(String setCode, String cardNumber) { try { QueryBuilder queryBuilder = cardDao.queryBuilder(); diff --git a/pom.xml b/pom.xml index 7f5fd18e3f6..e1855fef7b5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.mage mage-root - 1.4.24 + 1.4.25 pom Mage Root Mage Root POM @@ -84,7 +84,7 @@ - 1.4.24 + 1.4.25 UTF-8 From 89ac77e28a3f1a0726286dc9476aff37ba0ab925 Mon Sep 17 00:00:00 2001 From: igoudt Date: Sat, 29 Jul 2017 23:55:11 +0200 Subject: [PATCH 15/15] clean ups, talk to interface rather than implementation --- Mage.Sets/src/mage/cards/a/Aetherspouts.java | 12 +++--- .../src/mage/cards/a/ArsenalThresher.java | 8 ++-- Mage.Sets/src/mage/cards/b/Balance.java | 8 ++-- Mage.Sets/src/mage/cards/b/BlastfireBolt.java | 8 ++-- .../src/mage/cards/b/BorderlandExplorer.java | 5 ++- .../src/mage/cards/c/CallToTheKindred.java | 8 ++-- .../src/mage/cards/c/CapriciousEfreet.java | 8 ++-- .../src/mage/cards/c/CarpetOfFlowers.java | 8 ++-- Mage.Sets/src/mage/cards/c/Counterlash.java | 8 ++-- Mage.Sets/src/mage/cards/c/CracklingDoom.java | 8 ++-- .../src/mage/cards/c/CryptOfTheEternals.java | 8 ++-- .../src/mage/cards/c/CrypticGateway.java | 9 ++-- Mage.Sets/src/mage/cards/c/CustodiSquire.java | 8 ++-- Mage.Sets/src/mage/cards/d/DeadlyTempest.java | 12 +++--- .../src/mage/cards/d/DescentOfTheDragons.java | 8 ++-- Mage.Sets/src/mage/cards/d/DroidFactory.java | 8 ++-- .../src/mage/cards/d/DwarvenArmorer.java | 8 ++-- .../src/mage/cards/e/EmptyShrineKannushi.java | 8 ++-- .../src/mage/cards/e/EndHostilities.java | 8 ++-- .../src/mage/cards/e/ErdwalIlluminator.java | 8 ++-- .../src/mage/cards/e/EyeOfSingularity.java | 14 ++++--- Mage.Sets/src/mage/cards/f/FaithsReward.java | 8 ++-- .../src/mage/cards/f/FalkenrathGorger.java | 12 +++--- Mage.Sets/src/mage/cards/f/Fatespinner.java | 8 ++-- Mage.Sets/src/mage/cards/f/FiveAlarmFire.java | 8 ++-- .../src/mage/cards/f/FlowstoneSculpture.java | 8 ++-- .../src/mage/cards/f/ForgottenAncient.java | 8 ++-- .../src/mage/cards/g/GazeOfTheGorgon.java | 8 ++-- .../src/mage/cards/g/GhastlyConscription.java | 5 ++- .../src/mage/cards/h/HarmonicConvergence.java | 7 +--- .../src/mage/cards/h/HedonistsTrove.java | 14 +++---- .../mage/cards/i/IndomitableCreativity.java | 16 +++----- Mage.Sets/src/mage/cards/j/JediEnclave.java | 8 ++-- Mage.Sets/src/mage/cards/j/JodahsAvenger.java | 15 +++---- Mage.Sets/src/mage/cards/j/JungleVillage.java | 8 ++-- Mage.Sets/src/mage/cards/k/KillingWave.java | 10 ++--- .../mage/cards/k/KynaiosAndTiroOfMeletis.java | 10 +++-- Mage.Sets/src/mage/cards/l/LunarAvenger.java | 8 ++-- .../src/mage/cards/m/MaintenanceDroid.java | 8 ++-- Mage.Sets/src/mage/cards/m/MarchOfSouls.java | 10 +++-- Mage.Sets/src/mage/cards/m/MartyrsBond.java | 9 ++-- Mage.Sets/src/mage/cards/m/MenacingOgre.java | 8 ++-- Mage.Sets/src/mage/cards/m/Mindblaze.java | 8 ++-- .../src/mage/cards/m/MitoticManipulation.java | 10 +++-- .../src/mage/cards/m/MultiformWonder.java | 15 +++---- .../mage/cards/n/NecromanticSelection.java | 14 +++---- .../mage/cards/n/NicolBolasGodPharaoh.java | 21 ++++------ .../src/mage/cards/n/NoRestForTheWicked.java | 14 +++---- .../src/mage/cards/n/NyleasPresence.java | 41 ++++++++----------- .../src/mage/cards/o/OrzhovAdvokist.java | 12 +++--- Mage.Sets/src/mage/cards/p/PlanarOverlay.java | 11 ++--- Mage.Sets/src/mage/cards/p/PrismaticOmen.java | 37 +++++++---------- .../src/mage/cards/r/RallyTheAncestors.java | 10 +++-- Mage.Sets/src/mage/cards/r/ReapIntellect.java | 15 +++---- .../src/mage/cards/r/ReinsOfTheVinesteed.java | 8 ++-- .../src/mage/cards/r/RestoreBalance.java | 14 +++---- Mage.Sets/src/mage/cards/r/RiteOfRuin.java | 9 ++-- .../src/mage/cards/s/SavageSummoning.java | 19 +++------ Mage.Sets/src/mage/cards/s/ScytheSpecter.java | 10 +++-- Mage.Sets/src/mage/cards/s/SecondSunrise.java | 8 ++-- Mage.Sets/src/mage/cards/s/Shapeshifter.java | 24 +++++------ .../src/mage/cards/s/SharedAnimosity.java | 8 ++-- .../src/mage/cards/s/SilenceTheBelievers.java | 8 ++-- Mage.Sets/src/mage/cards/s/SithEvoker.java | 8 ++-- Mage.Sets/src/mage/cards/s/SithRuins.java | 8 ++-- Mage.Sets/src/mage/cards/s/SoulOfRavnica.java | 8 ++-- .../src/mage/cards/s/SpiritOfResistance.java | 8 ++-- .../mage/cards/s/SpiritOfTheLabyrinth.java | 8 ++-- Mage.Sets/src/mage/cards/s/StorageMatrix.java | 8 ++-- .../src/mage/cards/s/SunderingTitan.java | 11 ++--- .../mage/cards/t/TamiyoFieldResearcher.java | 9 ++-- Mage.Sets/src/mage/cards/t/Tarmogoyf.java | 15 +++---- Mage.Sets/src/mage/cards/t/TeferisRealm.java | 8 ++-- Mage.Sets/src/mage/cards/t/Terastodon.java | 10 +++-- .../src/mage/cards/t/ThatcherRevolt.java | 8 ++-- Mage.Sets/src/mage/cards/t/ThranTurbine.java | 8 ++-- Mage.Sets/src/mage/cards/t/Turnabout.java | 10 +++-- Mage.Sets/src/mage/cards/t/Twinflame.java | 8 ++-- .../src/mage/cards/t/TymnaTheWeaver.java | 10 ++--- Mage.Sets/src/mage/cards/u/UbaMask.java | 15 ++----- .../src/mage/cards/u/UnderworldSlums.java | 8 ++-- Mage.Sets/src/mage/cards/u/UrzasMiter.java | 8 ++-- Mage.Sets/src/mage/cards/v/VileRedeemer.java | 8 ++-- .../src/mage/cards/v/VoraciousDragon.java | 7 ++-- Mage.Sets/src/mage/cards/w/WakeTheDead.java | 8 ++-- Mage.Sets/src/mage/cards/w/WitchbaneOrb.java | 8 ++-- Mage.Sets/src/mage/cards/w/WorldQueller.java | 9 ++-- .../src/main/java/mage/constants/SubType.java | 7 ++-- .../main/java/mage/filter/StaticFilters.java | 23 +++++++++++ Mage/src/main/java/mage/game/GameImpl.java | 28 +++---------- 90 files changed, 509 insertions(+), 457 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/Aetherspouts.java b/Mage.Sets/src/mage/cards/a/Aetherspouts.java index f4d11cda396..3e8466c2064 100644 --- a/Mage.Sets/src/mage/cards/a/Aetherspouts.java +++ b/Mage.Sets/src/mage/cards/a/Aetherspouts.java @@ -27,8 +27,6 @@ */ package mage.cards.a; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.*; @@ -44,6 +42,10 @@ import mage.players.Player; import mage.players.PlayerList; import mage.target.TargetCard; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -102,8 +104,8 @@ class AetherspoutsEffect extends OneShotEffect { Player player = game.getPlayer(game.getActivePlayerId()); Player activePlayer = player; do { - ArrayList permanentsToTop = new ArrayList<>(); - ArrayList permanentsToBottom = new ArrayList<>(); + List permanentsToTop = new ArrayList<>(); + List permanentsToBottom = new ArrayList<>(); for (Permanent permanent:game.getState().getBattlefield().getActivePermanents(new FilterAttackingCreature(), player.getId(), source.getSourceId(), game)) { if (permanent.getOwnerId().equals(player.getId())) { if (player.chooseUse(outcome, "Put " + permanent.getLogName() + " to the top? (else it goes to bottom)", source, game)) { @@ -117,7 +119,7 @@ class AetherspoutsEffect extends OneShotEffect { } // cards to top Cards cards = new CardsImpl(); - ArrayList toLibrary = new ArrayList<>(); + List toLibrary = new ArrayList<>(); for (Permanent permanent: permanentsToTop) { if (permanent instanceof PermanentToken) { toLibrary.add(permanent); diff --git a/Mage.Sets/src/mage/cards/a/ArsenalThresher.java b/Mage.Sets/src/mage/cards/a/ArsenalThresher.java index 925ac2da937..4ec764a971c 100644 --- a/Mage.Sets/src/mage/cards/a/ArsenalThresher.java +++ b/Mage.Sets/src/mage/cards/a/ArsenalThresher.java @@ -27,8 +27,6 @@ */ package mage.cards.a; -import java.util.ArrayList; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.AsEntersBattlefieldAbility; @@ -48,6 +46,10 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCardInHand; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author jeffwadsworth @@ -110,7 +112,7 @@ class ArsenalThresherEffect extends OneShotEffect { } if (arsenalThresher != null) { controller.revealCards(arsenalThresher.getIdName(), cards, game); - ArrayList appliedEffects = (ArrayList) this.getValue("appliedEffects"); // the basic event is the EntersBattlefieldEvent, so use already applied replacement effects from that event + List appliedEffects = (ArrayList) this.getValue("appliedEffects"); // the basic event is the EntersBattlefieldEvent, so use already applied replacement effects from that event arsenalThresher.addCounters(CounterType.P1P1.createInstance(cards.size()), source, game, appliedEffects); } } diff --git a/Mage.Sets/src/mage/cards/b/Balance.java b/Mage.Sets/src/mage/cards/b/Balance.java index f44a8a49f29..8bb7ed6ded1 100644 --- a/Mage.Sets/src/mage/cards/b/Balance.java +++ b/Mage.Sets/src/mage/cards/b/Balance.java @@ -27,8 +27,6 @@ */ package mage.cards.b; -import java.util.HashMap; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.*; @@ -43,6 +41,10 @@ import mage.players.Player; import mage.target.common.TargetCardInHand; import mage.target.common.TargetControlledPermanent; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * * @author emerald000 @@ -156,7 +158,7 @@ class BalanceEffect extends OneShotEffect { //Cards in hand int minCard = Integer.MAX_VALUE; - HashMap cardsToDiscard = new HashMap<>(2); + Map cardsToDiscard = new HashMap<>(2); for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { diff --git a/Mage.Sets/src/mage/cards/b/BlastfireBolt.java b/Mage.Sets/src/mage/cards/b/BlastfireBolt.java index ea0ce6df855..723e0243687 100644 --- a/Mage.Sets/src/mage/cards/b/BlastfireBolt.java +++ b/Mage.Sets/src/mage/cards/b/BlastfireBolt.java @@ -27,8 +27,6 @@ */ package mage.cards.b; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; @@ -41,6 +39,10 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Quercitron @@ -89,7 +91,7 @@ class DestroyAllAttachedEquipmentEffect extends OneShotEffect { if (controller != null) { Permanent target = game.getPermanent(source.getFirstTarget()); if (target != null) { - ArrayList attachments = new ArrayList<>(target.getAttachments()); + List attachments = new ArrayList<>(target.getAttachments()); for (UUID attachmentId : attachments) { Permanent attachment = game.getPermanent(attachmentId); if (attachment != null && attachment.getSubtype(game).contains("Equipment")) { diff --git a/Mage.Sets/src/mage/cards/b/BorderlandExplorer.java b/Mage.Sets/src/mage/cards/b/BorderlandExplorer.java index c45fe1d49ad..45d4e97e353 100644 --- a/Mage.Sets/src/mage/cards/b/BorderlandExplorer.java +++ b/Mage.Sets/src/mage/cards/b/BorderlandExplorer.java @@ -44,6 +44,7 @@ import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetDiscard; import java.util.HashMap; +import java.util.Map; import java.util.UUID; /** @@ -95,9 +96,9 @@ class BorderlandExplorerEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); // Store for each player the cards to discard, that's important because all discard shall happen at the same time - HashMap cardsToDiscard = new HashMap<>(); + Map cardsToDiscard = new HashMap<>(); // Store for each player the lands to reveal, that's important because all reveals shall happen at the same time - HashMap cardsToReveal = new HashMap<>(); + Map cardsToReveal = new HashMap<>(); if (controller != null) { // choose cards to discard for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { diff --git a/Mage.Sets/src/mage/cards/c/CallToTheKindred.java b/Mage.Sets/src/mage/cards/c/CallToTheKindred.java index 7e2d3a616ec..84aefe9db62 100644 --- a/Mage.Sets/src/mage/cards/c/CallToTheKindred.java +++ b/Mage.Sets/src/mage/cards/c/CallToTheKindred.java @@ -27,8 +27,6 @@ */ package mage.cards.c; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.OnEventTriggeredAbility; @@ -53,6 +51,10 @@ import mage.target.TargetCard; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author North @@ -122,7 +124,7 @@ class CallToTheKindredEffect extends OneShotEffect { if (!creature.getAbilities().contains(ChangelingAbility.getInstance())) { StringBuilder sb = new StringBuilder("creature card with at least one subtype from: "); - ArrayList> subtypes = new ArrayList<>(); + List> subtypes = new ArrayList<>(); for (SubType subtype : creature.getSubtype(game)) { subtypes.add(new SubtypePredicate(subtype)); sb.append(subtype).append(", "); diff --git a/Mage.Sets/src/mage/cards/c/CapriciousEfreet.java b/Mage.Sets/src/mage/cards/c/CapriciousEfreet.java index 08ef7263b5c..3e271eb297c 100644 --- a/Mage.Sets/src/mage/cards/c/CapriciousEfreet.java +++ b/Mage.Sets/src/mage/cards/c/CapriciousEfreet.java @@ -27,8 +27,6 @@ */ package mage.cards.c; -import java.util.ArrayList; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; @@ -45,6 +43,10 @@ import mage.game.permanent.Permanent; import mage.target.TargetPermanent; import mage.util.RandomUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author North @@ -101,7 +103,7 @@ class CapriciousEfreetEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - ArrayList targetPermanents = new ArrayList<>(); + List targetPermanents = new ArrayList<>(); Permanent permanent = game.getPermanent(source.getTargets().get(0).getFirstTarget()); if (permanent != null) { targetPermanents.add(permanent); diff --git a/Mage.Sets/src/mage/cards/c/CarpetOfFlowers.java b/Mage.Sets/src/mage/cards/c/CarpetOfFlowers.java index 3471e7dd525..d320f00f067 100644 --- a/Mage.Sets/src/mage/cards/c/CarpetOfFlowers.java +++ b/Mage.Sets/src/mage/cards/c/CarpetOfFlowers.java @@ -27,8 +27,6 @@ */ package mage.cards.c; -import java.util.LinkedHashSet; -import java.util.UUID; import mage.Mana; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; @@ -50,6 +48,10 @@ import mage.game.events.GameEvent.EventType; import mage.players.Player; import mage.target.common.TargetOpponent; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Plopman @@ -163,7 +165,7 @@ class CarpetOfFlowersEffect extends ManaEffect { } int countMax = game.getBattlefield().count(filter, source.getSourceId(), source.getTargets().getFirstTarget(), game); ChoiceImpl choiceCount = new ChoiceImpl(true); - LinkedHashSet set = new LinkedHashSet<>(countMax + 1); + Set set = new LinkedHashSet<>(countMax + 1); for (int i = 0; i <= countMax; i++) { set.add(Integer.toString(i)); } diff --git a/Mage.Sets/src/mage/cards/c/Counterlash.java b/Mage.Sets/src/mage/cards/c/Counterlash.java index 802ae542bde..b1ad8d92250 100644 --- a/Mage.Sets/src/mage/cards/c/Counterlash.java +++ b/Mage.Sets/src/mage/cards/c/Counterlash.java @@ -27,8 +27,6 @@ */ package mage.cards.c; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; @@ -47,6 +45,10 @@ import mage.players.Player; import mage.target.TargetSpell; import mage.target.common.TargetCardInHand; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author BetaSteward @@ -96,7 +98,7 @@ class CounterlashEffect extends OneShotEffect { game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game); if (player.chooseUse(Outcome.PutCardInPlay, "Cast a nonland card in your hand that shares a card type with that spell without paying its mana cost?", source, game)) { FilterCard filter = new FilterCard(); - ArrayList> types = new ArrayList<>(); + List> types = new ArrayList<>(); for (CardType type: stackObject.getCardType()) { if (type != CardType.LAND) { types.add(new CardTypePredicate(type)); diff --git a/Mage.Sets/src/mage/cards/c/CracklingDoom.java b/Mage.Sets/src/mage/cards/c/CracklingDoom.java index 4642bf780b5..2b0f5b81874 100644 --- a/Mage.Sets/src/mage/cards/c/CracklingDoom.java +++ b/Mage.Sets/src/mage/cards/c/CracklingDoom.java @@ -27,8 +27,6 @@ */ package mage.cards.c; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamagePlayersEffect; @@ -47,6 +45,10 @@ import mage.players.Player; import mage.target.Target; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -92,7 +94,7 @@ class CracklingDoomEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - ArrayList toSacrifice = new ArrayList<>(); + List toSacrifice = new ArrayList<>(); for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { if (controller.hasOpponent(playerId, game)) { Player opponent = game.getPlayer(playerId); diff --git a/Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java b/Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java index 649261c106f..ffd18b00e59 100644 --- a/Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java +++ b/Mage.Sets/src/mage/cards/c/CryptOfTheEternals.java @@ -1,7 +1,5 @@ package mage.cards.c; -import java.util.ArrayList; -import java.util.UUID; import mage.Mana; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.costs.common.TapSourceCost; @@ -14,6 +12,10 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + public class CryptOfTheEternals extends CardImpl { public CryptOfTheEternals(UUID ownerId, CardSetInfo setInfo) { @@ -26,7 +28,7 @@ public class CryptOfTheEternals extends CardImpl { this.addAbility(new ColorlessManaAbility()); // {1}, {T}: Add {U}, {B}, or {R} to your mana pool. - ArrayList list = new ArrayList() {{ + List list = new ArrayList() {{ add(Mana.BlueMana(1)); add(Mana.BlackMana(1)); add(Mana.RedMana(1)); diff --git a/Mage.Sets/src/mage/cards/c/CrypticGateway.java b/Mage.Sets/src/mage/cards/c/CrypticGateway.java index 475caa9114f..8c17e28e5d1 100644 --- a/Mage.Sets/src/mage/cards/c/CrypticGateway.java +++ b/Mage.Sets/src/mage/cards/c/CrypticGateway.java @@ -27,9 +27,6 @@ */ package mage.cards.c; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.Cost; @@ -55,6 +52,10 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetControlledPermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author spjspj @@ -199,7 +200,7 @@ class CrypticGatewayEffect extends OneShotEffect { changeling2 = true; } - ArrayList subtypes = new ArrayList<>(); + List subtypes = new ArrayList<>(); for (SubType subtype : creature.getSubtype(game)) { if (creature2.getSubtype(game).contains(subtype) || changeling2) { diff --git a/Mage.Sets/src/mage/cards/c/CustodiSquire.java b/Mage.Sets/src/mage/cards/c/CustodiSquire.java index 6e8df4337ab..ef9e3e62520 100644 --- a/Mage.Sets/src/mage/cards/c/CustodiSquire.java +++ b/Mage.Sets/src/mage/cards/c/CustodiSquire.java @@ -27,8 +27,6 @@ */ package mage.cards.c; -import java.util.HashMap; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -45,6 +43,10 @@ import mage.game.Game; import mage.players.Player; import mage.target.TargetCard; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * * @author LevelX2 @@ -105,7 +107,7 @@ class CustodiSquireVoteEffect extends OneShotEffect { Cards possibleCards = new CardsImpl(); possibleCards.addAll(controller.getGraveyard().getCards(filter, game)); if (!possibleCards.isEmpty()) { - HashMap cardCounter = new HashMap<>(); + Map cardCounter = new HashMap<>(); TargetCard target = new TargetCard(1, 1, Zone.GRAVEYARD, filter); int maxCount = 1; for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { diff --git a/Mage.Sets/src/mage/cards/d/DeadlyTempest.java b/Mage.Sets/src/mage/cards/d/DeadlyTempest.java index 2ebdd3028fa..c7ee54d48c8 100644 --- a/Mage.Sets/src/mage/cards/d/DeadlyTempest.java +++ b/Mage.Sets/src/mage/cards/d/DeadlyTempest.java @@ -27,8 +27,6 @@ */ package mage.cards.d; -import java.util.HashMap; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -40,6 +38,10 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * * @author LevelX2 @@ -83,15 +85,15 @@ class DeadlyTempestEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - HashMap destroyedCreatures = new HashMap<>(); + Map destroyedCreatures = new HashMap<>(); for (Permanent permanent : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, source.getControllerId(), source.getSourceId(), game)) { if (permanent.destroy(source.getSourceId(), game, false)) { - int count = destroyedCreatures.containsKey(permanent.getControllerId()) ? destroyedCreatures.get(permanent.getControllerId()) : 0; + int count = destroyedCreatures.getOrDefault(permanent.getControllerId(), 0); destroyedCreatures.put(permanent.getControllerId(), count + 1); } } for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) { - int count = destroyedCreatures.containsKey(playerId) ? destroyedCreatures.get(playerId) : 0; + int count = destroyedCreatures.getOrDefault(playerId, 0); if (count > 0) { Player player = game.getPlayer(playerId); if (player != null) { diff --git a/Mage.Sets/src/mage/cards/d/DescentOfTheDragons.java b/Mage.Sets/src/mage/cards/d/DescentOfTheDragons.java index 4367a6a7b0e..da4c02d0cd1 100644 --- a/Mage.Sets/src/mage/cards/d/DescentOfTheDragons.java +++ b/Mage.Sets/src/mage/cards/d/DescentOfTheDragons.java @@ -27,8 +27,6 @@ */ package mage.cards.d; -import java.util.HashMap; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -42,6 +40,10 @@ import mage.players.Player; import mage.target.Target; import mage.target.common.TargetCreaturePermanent; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * @author jeffwadsworth */ @@ -86,7 +88,7 @@ class DescentOfTheDragonsEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - HashMap playersWithTargets = new HashMap<>(); + Map playersWithTargets = new HashMap<>(); for (Target target : source.getTargets()) { for (UUID permanentId : target.getTargets()) { Permanent permanent = game.getPermanent(permanentId); diff --git a/Mage.Sets/src/mage/cards/d/DroidFactory.java b/Mage.Sets/src/mage/cards/d/DroidFactory.java index 3078de3ca5b..e24e4ab60b6 100644 --- a/Mage.Sets/src/mage/cards/d/DroidFactory.java +++ b/Mage.Sets/src/mage/cards/d/DroidFactory.java @@ -27,8 +27,6 @@ */ package mage.cards.d; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.ActivatedAbilityImpl; import mage.abilities.costs.common.SacrificeSourceCost; @@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.mageobject.SupertypePredicate; import mage.target.common.TargetCardInLibrary; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Styxo @@ -84,7 +86,7 @@ public class DroidFactory extends CardImpl { addCost(new SacrificeSourceCost()); FilterCard filter = new FilterCard("basic Plains, Island or Swamp"); filter.add(new CardTypePredicate(CardType.LAND)); - ArrayList> subtypePredicates = new ArrayList<>(); + List> subtypePredicates = new ArrayList<>(); subtypePredicates.add(new SubtypePredicate(SubType.SWAMP)); subtypePredicates.add(new SubtypePredicate(SubType.PLAINS)); subtypePredicates.add(new SubtypePredicate(SubType.ISLAND)); diff --git a/Mage.Sets/src/mage/cards/d/DwarvenArmorer.java b/Mage.Sets/src/mage/cards/d/DwarvenArmorer.java index e0080af8131..2fe3a19de7c 100644 --- a/Mage.Sets/src/mage/cards/d/DwarvenArmorer.java +++ b/Mage.Sets/src/mage/cards/d/DwarvenArmorer.java @@ -27,8 +27,6 @@ */ package mage.cards.d; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -52,6 +50,10 @@ import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LoneFox @@ -84,7 +86,7 @@ public class DwarvenArmorer extends CardImpl { class DwarvenArmorerEffect extends OneShotEffect { - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); static { choices.add("+0/+1"); diff --git a/Mage.Sets/src/mage/cards/e/EmptyShrineKannushi.java b/Mage.Sets/src/mage/cards/e/EmptyShrineKannushi.java index 22927ff883f..5c76c4c55ba 100644 --- a/Mage.Sets/src/mage/cards/e/EmptyShrineKannushi.java +++ b/Mage.Sets/src/mage/cards/e/EmptyShrineKannushi.java @@ -27,8 +27,6 @@ */ package mage.cards.e; -import java.util.ArrayList; -import java.util.UUID; import mage.MageInt; import mage.MageObject; import mage.ObjectColor; @@ -45,6 +43,10 @@ import mage.filter.predicate.mageobject.ColorPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -113,7 +115,7 @@ class EmptyShrineKannushiProtectionAbility extends ProtectionAbility { } } - ArrayList> colorPredicates = new ArrayList<>(); + List> colorPredicates = new ArrayList<>(); if (color.isBlack()) { colorPredicates.add(new ColorPredicate(ObjectColor.BLACK)); } diff --git a/Mage.Sets/src/mage/cards/e/EndHostilities.java b/Mage.Sets/src/mage/cards/e/EndHostilities.java index 2f21308aca2..e3ec1656e4f 100644 --- a/Mage.Sets/src/mage/cards/e/EndHostilities.java +++ b/Mage.Sets/src/mage/cards/e/EndHostilities.java @@ -27,8 +27,6 @@ */ package mage.cards.e; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -39,6 +37,10 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -83,7 +85,7 @@ class EndHostilitiesEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - ArrayList toDestroy = new ArrayList<>(); + List toDestroy = new ArrayList<>(); for (Permanent permanent : game.getBattlefield().getActivePermanents(controller.getId(), game)) { if (permanent.isCreature()) { toDestroy.add(permanent); diff --git a/Mage.Sets/src/mage/cards/e/ErdwalIlluminator.java b/Mage.Sets/src/mage/cards/e/ErdwalIlluminator.java index a44bf45d044..0f7112442b9 100644 --- a/Mage.Sets/src/mage/cards/e/ErdwalIlluminator.java +++ b/Mage.Sets/src/mage/cards/e/ErdwalIlluminator.java @@ -27,8 +27,6 @@ */ package mage.cards.e; -import java.util.HashMap; -import java.util.UUID; import mage.MageInt; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.keyword.InvestigateEffect; @@ -43,6 +41,10 @@ import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; import mage.watchers.Watcher; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * @author LevelX2 */ @@ -106,7 +108,7 @@ class ErdwalIlluminatorTriggeredAbility extends TriggeredAbilityImpl { class InvestigatedWatcher extends Watcher { - private final HashMap timesInvestigated = new HashMap<>(); + private final Map timesInvestigated = new HashMap<>(); public InvestigatedWatcher() { super(InvestigatedWatcher.class.getSimpleName(), WatcherScope.GAME); diff --git a/Mage.Sets/src/mage/cards/e/EyeOfSingularity.java b/Mage.Sets/src/mage/cards/e/EyeOfSingularity.java index 18fae6cbd0d..229c7ae338f 100644 --- a/Mage.Sets/src/mage/cards/e/EyeOfSingularity.java +++ b/Mage.Sets/src/mage/cards/e/EyeOfSingularity.java @@ -27,9 +27,6 @@ */ package mage.cards.e; -import java.util.HashMap; -import java.util.Objects; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -49,6 +46,11 @@ import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; +import java.util.UUID; + /** * * @author spjspj @@ -101,8 +103,8 @@ class EyeOfSingularityETBEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - HashMap cardNames = new HashMap<>(); - HashMap toDestroy = new HashMap<>(); + Map cardNames = new HashMap<>(); + Map toDestroy = new HashMap<>(); for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { String cardName = permanent.getName(); @@ -183,7 +185,7 @@ class EyeOfSingularityTriggeredEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - HashMap toDestroy = new HashMap<>(); + Map toDestroy = new HashMap<>(); Permanent etbPermanent = game.getPermanentOrLKIBattlefield(getTargetPointer().getFirst(game, source)); if (etbPermanent == null) { diff --git a/Mage.Sets/src/mage/cards/f/FaithsReward.java b/Mage.Sets/src/mage/cards/f/FaithsReward.java index f0015b4a7fd..fb413646831 100644 --- a/Mage.Sets/src/mage/cards/f/FaithsReward.java +++ b/Mage.Sets/src/mage/cards/f/FaithsReward.java @@ -27,8 +27,6 @@ */ package mage.cards.f; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; @@ -43,6 +41,10 @@ import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; import mage.watchers.Watcher; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Loki @@ -101,7 +103,7 @@ class FaithsRewardEffect extends OneShotEffect { } class FaithsRewardWatcher extends Watcher { - ArrayList cards = new ArrayList<>(); + List cards = new ArrayList<>(); public FaithsRewardWatcher() { super(FaithsRewardWatcher.class.getSimpleName(), WatcherScope.GAME); diff --git a/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java b/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java index d249cf59642..cd3d3c33079 100644 --- a/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java +++ b/Mage.Sets/src/mage/cards/f/FalkenrathGorger.java @@ -27,8 +27,6 @@ */ package mage.cards.f; -import java.util.HashMap; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; @@ -43,6 +41,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; import mage.players.Player; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * * @author LevelX2 @@ -90,7 +92,7 @@ class FalkenrathGorgerEffect extends ContinuousEffectImpl { } - HashMap madnessAbilities = new HashMap<>(); // reuse the same ability for the same object + Map madnessAbilities = new HashMap<>(); // reuse the same ability for the same object public FalkenrathGorgerEffect() { super(Duration.WhileOnBattlefield, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); @@ -111,7 +113,7 @@ class FalkenrathGorgerEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - HashMap usedMadnessAbilities = new HashMap<>(); + Map usedMadnessAbilities = new HashMap<>(); // hand for (Card card : controller.getHand().getCards(filter, game)) { addMadnessToCard(game, card, usedMadnessAbilities); @@ -136,7 +138,7 @@ class FalkenrathGorgerEffect extends ContinuousEffectImpl { return false; } - private void addMadnessToCard(Game game, Card card, HashMap usedMadnessAbilities) { + private void addMadnessToCard(Game game, Card card, Map usedMadnessAbilities) { MadnessAbility ability = madnessAbilities.get(card.getId()); if (ability == null) { ability = new MadnessAbility(card, card.getSpellAbility().getManaCosts()); diff --git a/Mage.Sets/src/mage/cards/f/Fatespinner.java b/Mage.Sets/src/mage/cards/f/Fatespinner.java index ae7794fb38c..e14082372bb 100644 --- a/Mage.Sets/src/mage/cards/f/Fatespinner.java +++ b/Mage.Sets/src/mage/cards/f/Fatespinner.java @@ -27,8 +27,6 @@ */ package mage.cards.f; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; @@ -44,6 +42,10 @@ import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LoneFox @@ -74,7 +76,7 @@ public class Fatespinner extends CardImpl { class FatespinnerChooseEffect extends OneShotEffect { - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); static { choices.add("Draw step"); diff --git a/Mage.Sets/src/mage/cards/f/FiveAlarmFire.java b/Mage.Sets/src/mage/cards/f/FiveAlarmFire.java index 9340a64f307..e78f9ce457e 100644 --- a/Mage.Sets/src/mage/cards/f/FiveAlarmFire.java +++ b/Mage.Sets/src/mage/cards/f/FiveAlarmFire.java @@ -27,8 +27,6 @@ */ package mage.cards.f; -import java.util.HashSet; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.common.SimpleActivatedAbility; @@ -48,6 +46,10 @@ import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.target.common.TargetCreatureOrPlayer; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Plopman @@ -82,7 +84,7 @@ class FiveAlarmFireTriggeredAbility extends TriggeredAbilityImpl { // Because a creature that is blocked by multiple creatures it deals damage to, only causes to add one counter to , // it's neccessary to remember which creature already triggered - HashSet triggeringCreatures = new HashSet<>(); + Set triggeringCreatures = new HashSet<>(); private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent(); diff --git a/Mage.Sets/src/mage/cards/f/FlowstoneSculpture.java b/Mage.Sets/src/mage/cards/f/FlowstoneSculpture.java index 69507915eeb..0d80865b79f 100644 --- a/Mage.Sets/src/mage/cards/f/FlowstoneSculpture.java +++ b/Mage.Sets/src/mage/cards/f/FlowstoneSculpture.java @@ -27,8 +27,6 @@ */ package mage.cards.f; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -52,6 +50,10 @@ import mage.counters.CounterType; import mage.game.Game; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LoneFox @@ -82,7 +84,7 @@ public class FlowstoneSculpture extends CardImpl { class FlowstoneSculptureEffect extends OneShotEffect { - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); static { choices.add("+1/+1 counter"); diff --git a/Mage.Sets/src/mage/cards/f/ForgottenAncient.java b/Mage.Sets/src/mage/cards/f/ForgottenAncient.java index 7513d62d574..e8fd0ea9749 100644 --- a/Mage.Sets/src/mage/cards/f/ForgottenAncient.java +++ b/Mage.Sets/src/mage/cards/f/ForgottenAncient.java @@ -27,8 +27,6 @@ */ package mage.cards.f; -import java.util.ArrayList; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; @@ -51,6 +49,10 @@ import mage.players.Player; import mage.target.Target; import mage.target.common.TargetCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Blinke @@ -116,7 +118,7 @@ public class ForgottenAncient extends CardImpl { } int numCounters = sourcePermanent.getCounters(game).getCount(CounterType.P1P1); - ArrayList counterMovements = new ArrayList<>(); + List counterMovements = new ArrayList<>(); do { Target target = new TargetCreaturePermanent(1, 1, filter, true); diff --git a/Mage.Sets/src/mage/cards/g/GazeOfTheGorgon.java b/Mage.Sets/src/mage/cards/g/GazeOfTheGorgon.java index 574af0a47a6..201d44b02bd 100644 --- a/Mage.Sets/src/mage/cards/g/GazeOfTheGorgon.java +++ b/Mage.Sets/src/mage/cards/g/GazeOfTheGorgon.java @@ -27,8 +27,6 @@ */ package mage.cards.g; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheEndOfCombatDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -45,6 +43,10 @@ import mage.players.Player; import mage.target.common.TargetCreaturePermanent; import mage.watchers.common.BlockedAttackerWatcher; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -96,7 +98,7 @@ class GazeOfTheGorgonEffect extends OneShotEffect { if (controller != null && targetCreature != null) { BlockedAttackerWatcher watcher = (BlockedAttackerWatcher) game.getState().getWatchers().get(BlockedAttackerWatcher.class.getSimpleName()); if (watcher != null) { - ArrayList toDestroy = new ArrayList<>(); + List toDestroy = new ArrayList<>(); for (Permanent creature : game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURE, source.getControllerId(), source.getSourceId(), game)) { if (!creature.getId().equals(targetCreature.getId())) { if (watcher.creatureHasBlockedAttacker(creature, targetCreature, game) || watcher.creatureHasBlockedAttacker(targetCreature, creature, game)) { diff --git a/Mage.Sets/src/mage/cards/g/GhastlyConscription.java b/Mage.Sets/src/mage/cards/g/GhastlyConscription.java index 7db5f358670..cb18627fe33 100644 --- a/Mage.Sets/src/mage/cards/g/GhastlyConscription.java +++ b/Mage.Sets/src/mage/cards/g/GhastlyConscription.java @@ -27,7 +27,6 @@ */ package mage.cards.g; -import java.util.*; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.costs.mana.ManaCosts; @@ -47,6 +46,8 @@ import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; +import java.util.*; + /** * * @author LevelX2 @@ -92,7 +93,7 @@ class GhastlyConscriptionEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); Player targetPlayer = game.getPlayer(getTargetPointer().getFirst(game, source)); if (controller != null && targetPlayer != null) { - ArrayList cardsToManifest = new ArrayList<>(); + List cardsToManifest = new ArrayList<>(); for (Card card : targetPlayer.getGraveyard().getCards(new FilterCreatureCard(), game)) { cardsToManifest.add(card); controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.GRAVEYARD, true); diff --git a/Mage.Sets/src/mage/cards/h/HarmonicConvergence.java b/Mage.Sets/src/mage/cards/h/HarmonicConvergence.java index d62687d8362..a88d888181a 100644 --- a/Mage.Sets/src/mage/cards/h/HarmonicConvergence.java +++ b/Mage.Sets/src/mage/cards/h/HarmonicConvergence.java @@ -42,10 +42,7 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetCard; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; +import java.util.*; /** * @@ -94,7 +91,7 @@ class HarmonicConvergenceEffect extends OneShotEffect { source.getSourceId(), game); - HashMap> moveList = new HashMap<>(); + Map> moveList = new HashMap<>(); for (Permanent permanent : enchantments) { List list = moveList.computeIfAbsent(permanent.getControllerId(), k -> new ArrayList<>()); list.add(permanent); diff --git a/Mage.Sets/src/mage/cards/h/HedonistsTrove.java b/Mage.Sets/src/mage/cards/h/HedonistsTrove.java index 0be70c68bb9..a024d4458a2 100644 --- a/Mage.Sets/src/mage/cards/h/HedonistsTrove.java +++ b/Mage.Sets/src/mage/cards/h/HedonistsTrove.java @@ -27,8 +27,6 @@ */ package mage.cards.h; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -38,17 +36,17 @@ import mage.abilities.effects.OneShotEffect; import mage.cards.Card; 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.constants.Zone; +import mage.constants.*; import mage.game.ExileZone; import mage.game.Game; import mage.players.Player; import mage.target.common.TargetOpponent; import mage.util.CardUtil; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -100,7 +98,7 @@ class HedonistsTroveExileEffect extends OneShotEffect { MageObject sourceObject = source.getSourceObject(game); if (controller != null && targetPlayer != null && sourceObject != null) { UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); - ArrayList graveyard = new ArrayList<>(targetPlayer.getGraveyard()); + List graveyard = new ArrayList<>(targetPlayer.getGraveyard()); for (UUID cardId : graveyard) { Card card = game.getCard(cardId); if (card != null) { diff --git a/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java b/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java index cbbf3d80927..733e4d19c40 100644 --- a/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java +++ b/Mage.Sets/src/mage/cards/i/IndomitableCreativity.java @@ -27,19 +27,11 @@ */ package mage.cards.i; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Set; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.SpellAbility; 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.cards.*; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; @@ -52,6 +44,8 @@ import mage.players.Library; import mage.players.Player; import mage.target.TargetPermanent; +import java.util.*; + /** * * @author LevelX2 @@ -112,7 +106,7 @@ class IndomitableCreativityEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = source.getSourceObject(game); if (controller != null && sourceObject != null) { - ArrayList destroyedPermanents = new ArrayList<>(); + List destroyedPermanents = new ArrayList<>(); for (UUID targetId : getTargetPointer().getTargets(game, source)) { Permanent target = game.getPermanent(targetId); if (target != null) { @@ -121,7 +115,7 @@ class IndomitableCreativityEffect extends OneShotEffect { } } } - HashMap cardsToReveal = new HashMap<>(); + Map cardsToReveal = new HashMap<>(); for (Permanent permanent : destroyedPermanents) { Player controllerOfDestroyedCreature = game.getPlayer(permanent.getControllerId()); diff --git a/Mage.Sets/src/mage/cards/j/JediEnclave.java b/Mage.Sets/src/mage/cards/j/JediEnclave.java index d14aeee4e44..3d8de85f884 100644 --- a/Mage.Sets/src/mage/cards/j/JediEnclave.java +++ b/Mage.Sets/src/mage/cards/j/JediEnclave.java @@ -27,8 +27,6 @@ */ package mage.cards.j; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.ActivatedAbilityImpl; import mage.abilities.costs.common.SacrificeSourceCost; @@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.mageobject.SupertypePredicate; import mage.target.common.TargetCardInLibrary; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Styxo @@ -84,7 +86,7 @@ public class JediEnclave extends CardImpl { addCost(new SacrificeSourceCost()); FilterCard filter = new FilterCard("basic Forest, Plains or Island"); filter.add(new CardTypePredicate(CardType.LAND)); - ArrayList> subtypePredicates = new ArrayList<>(); + List> subtypePredicates = new ArrayList<>(); subtypePredicates.add(new SubtypePredicate(SubType.FOREST)); subtypePredicates.add(new SubtypePredicate(SubType.PLAINS)); subtypePredicates.add(new SubtypePredicate(SubType.ISLAND)); diff --git a/Mage.Sets/src/mage/cards/j/JodahsAvenger.java b/Mage.Sets/src/mage/cards/j/JodahsAvenger.java index 688c4132a62..f8aa0ac350b 100644 --- a/Mage.Sets/src/mage/cards/j/JodahsAvenger.java +++ b/Mage.Sets/src/mage/cards/j/JodahsAvenger.java @@ -27,8 +27,6 @@ */ package mage.cards.j; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; @@ -44,16 +42,15 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.choices.Choice; import mage.choices.ChoiceImpl; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Styxo @@ -83,7 +80,7 @@ public class JodahsAvenger extends CardImpl { class JodahsAvengerEffect extends ContinuousEffectImpl { - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); private Ability gainedAbility; static { diff --git a/Mage.Sets/src/mage/cards/j/JungleVillage.java b/Mage.Sets/src/mage/cards/j/JungleVillage.java index ef0485f7977..de3d303fc07 100644 --- a/Mage.Sets/src/mage/cards/j/JungleVillage.java +++ b/Mage.Sets/src/mage/cards/j/JungleVillage.java @@ -27,8 +27,6 @@ */ package mage.cards.j; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.ActivatedAbilityImpl; import mage.abilities.costs.common.SacrificeSourceCost; @@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.mageobject.SupertypePredicate; import mage.target.common.TargetCardInLibrary; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Styxo @@ -84,7 +86,7 @@ public class JungleVillage extends CardImpl { addCost(new SacrificeSourceCost()); FilterCard filter = new FilterCard("basic Mountain, Forest or Plains"); filter.add(new CardTypePredicate(CardType.LAND)); - ArrayList> subtypePredicates = new ArrayList<>(); + List> subtypePredicates = new ArrayList<>(); subtypePredicates.add(new SubtypePredicate(SubType.PLAINS)); subtypePredicates.add(new SubtypePredicate(SubType.MOUNTAIN)); subtypePredicates.add(new SubtypePredicate(SubType.FAERIE)); diff --git a/Mage.Sets/src/mage/cards/k/KillingWave.java b/Mage.Sets/src/mage/cards/k/KillingWave.java index b5518f9d6ec..5624f39f0cc 100644 --- a/Mage.Sets/src/mage/cards/k/KillingWave.java +++ b/Mage.Sets/src/mage/cards/k/KillingWave.java @@ -27,10 +27,6 @@ */ package mage.cards.k; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.effects.OneShotEffect; @@ -43,6 +39,8 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.*; + /** * * @author North @@ -92,8 +90,8 @@ class KillingWaveEffect extends OneShotEffect { int amount = (new ManacostVariableValue()).calculate(game, source, this); if (amount > 0) { - LinkedList sacrifices = new LinkedList<>(); - HashMap lifePaidAmounts = new HashMap<>(); + List sacrifices = new LinkedList<>(); + Map lifePaidAmounts = new HashMap<>(); FilterCreaturePermanent filter = new FilterCreaturePermanent(); for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { diff --git a/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java b/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java index 7bc07d76160..08e51eed354 100644 --- a/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java +++ b/Mage.Sets/src/mage/cards/k/KynaiosAndTiroOfMeletis.java @@ -27,9 +27,6 @@ */ package mage.cards.k; -import java.util.ArrayList; -import java.util.Objects; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfEndStepTriggeredAbility; @@ -46,6 +43,11 @@ import mage.players.PlayerList; import mage.target.Target; import mage.target.common.TargetCardInHand; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + /** * @author spjspj */ @@ -104,7 +106,7 @@ class KynaiosAndTirosEffect extends OneShotEffect { Player currentPlayer = game.getPlayer(playerList.get()); UUID firstInactivePlayer = null; Target target = new TargetCardInHand(filter); - ArrayList noLandPlayers = new ArrayList<>(); + List noLandPlayers = new ArrayList<>(); while (controller.canRespond()) { if (currentPlayer != null && currentPlayer.canRespond() && game.getState().getPlayersInRange(controller.getId(), game).contains(currentPlayer.getId())) { diff --git a/Mage.Sets/src/mage/cards/l/LunarAvenger.java b/Mage.Sets/src/mage/cards/l/LunarAvenger.java index 232b503747b..898c98f150f 100644 --- a/Mage.Sets/src/mage/cards/l/LunarAvenger.java +++ b/Mage.Sets/src/mage/cards/l/LunarAvenger.java @@ -27,8 +27,6 @@ */ package mage.cards.l; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -51,6 +49,10 @@ import mage.counters.CounterType; import mage.game.Game; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LoneFox @@ -82,7 +84,7 @@ public class LunarAvenger extends CardImpl { class LunarAvengerEffect extends OneShotEffect { - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); static { choices.add("Flying"); diff --git a/Mage.Sets/src/mage/cards/m/MaintenanceDroid.java b/Mage.Sets/src/mage/cards/m/MaintenanceDroid.java index 3838f98de75..d609df426f4 100644 --- a/Mage.Sets/src/mage/cards/m/MaintenanceDroid.java +++ b/Mage.Sets/src/mage/cards/m/MaintenanceDroid.java @@ -27,8 +27,6 @@ */ package mage.cards.m; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -51,6 +49,10 @@ import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInYourGraveyard; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Styxo @@ -90,7 +92,7 @@ public class MaintenanceDroid extends CardImpl { class MaintenanceDroidEffect extends OneShotEffect { - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); static { choices.add("Remove a repair counter"); diff --git a/Mage.Sets/src/mage/cards/m/MarchOfSouls.java b/Mage.Sets/src/mage/cards/m/MarchOfSouls.java index 95a5389873a..85c5f0b9224 100644 --- a/Mage.Sets/src/mage/cards/m/MarchOfSouls.java +++ b/Mage.Sets/src/mage/cards/m/MarchOfSouls.java @@ -27,9 +27,6 @@ */ package mage.cards.m; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -41,6 +38,11 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.game.permanent.token.SpiritWhiteToken; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; + /** * * @author LoneFox @@ -85,7 +87,7 @@ class MarchOfSoulsEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { List creatures = game.getBattlefield().getActivePermanents(StaticFilters.FILTER_PERMANENT_CREATURES, source.getControllerId(), source.getSourceId(), game); - HashMap playersWithCreatures = new HashMap<>(); + Map playersWithCreatures = new HashMap<>(); for(Permanent p : creatures) { UUID controllerId = p.getControllerId(); if(p.destroy(source.getSourceId(), game, true)) { diff --git a/Mage.Sets/src/mage/cards/m/MartyrsBond.java b/Mage.Sets/src/mage/cards/m/MartyrsBond.java index 0e59377abdd..a453d4c548a 100644 --- a/Mage.Sets/src/mage/cards/m/MartyrsBond.java +++ b/Mage.Sets/src/mage/cards/m/MartyrsBond.java @@ -27,9 +27,6 @@ */ package mage.cards.m; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; @@ -51,6 +48,10 @@ import mage.players.Player; import mage.target.common.TargetControlledPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author spjspj @@ -143,7 +144,7 @@ class MartyrsBondEffect extends OneShotEffect { String message = "permanent with type ("; boolean firstType = true; - ArrayList cardTypes = new ArrayList<>(); + List cardTypes = new ArrayList<>(); for (CardType type : saccedPermanent.getCardType()) { cardTypes.add(new CardTypePredicate(type)); diff --git a/Mage.Sets/src/mage/cards/m/MenacingOgre.java b/Mage.Sets/src/mage/cards/m/MenacingOgre.java index 8e35302ace0..8b87182ea86 100644 --- a/Mage.Sets/src/mage/cards/m/MenacingOgre.java +++ b/Mage.Sets/src/mage/cards/m/MenacingOgre.java @@ -27,8 +27,6 @@ */ package mage.cards.m; -import java.util.HashMap; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -44,6 +42,10 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * * @author jeffwadsworth @@ -100,7 +102,7 @@ class MenacingOgreEffect extends OneShotEffect { int number = 0; Permanent menacingOgre = game.getPermanent(source.getSourceId()); String message = "Choose a number."; - HashMap numberChosen = new HashMap<>(); + Map numberChosen = new HashMap<>(); //players choose numbers for (Player player : game.getPlayers().values()) { diff --git a/Mage.Sets/src/mage/cards/m/Mindblaze.java b/Mage.Sets/src/mage/cards/m/Mindblaze.java index 6bb549849ba..4745590f119 100644 --- a/Mage.Sets/src/mage/cards/m/Mindblaze.java +++ b/Mage.Sets/src/mage/cards/m/Mindblaze.java @@ -27,8 +27,6 @@ */ package mage.cards.m; -import java.util.HashSet; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -46,6 +44,10 @@ import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Loki @@ -95,7 +97,7 @@ class MindblazeEffect extends OneShotEffect { cardChoice.clearChoice(); Choice numberChoice = new ChoiceImpl(); numberChoice.setMessage("Choose a number greater than 0"); - HashSet numbers = new HashSet<>(); + Set numbers = new HashSet<>(); for (int i = 1; i <= 4; i++) { numbers.add(Integer.toString(i)); } diff --git a/Mage.Sets/src/mage/cards/m/MitoticManipulation.java b/Mage.Sets/src/mage/cards/m/MitoticManipulation.java index f22f373c828..350ea417fc2 100644 --- a/Mage.Sets/src/mage/cards/m/MitoticManipulation.java +++ b/Mage.Sets/src/mage/cards/m/MitoticManipulation.java @@ -27,9 +27,6 @@ */ package mage.cards.m; -import java.util.HashSet; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.*; @@ -43,6 +40,11 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetCard; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + /** * * @author North @@ -85,7 +87,7 @@ class MitoticManipulationEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { List permanents = game.getBattlefield().getActivePermanents(source.getControllerId(), game); - HashSet permanentNames = new HashSet<>(); + Set permanentNames = new HashSet<>(); FilterCard filter = new FilterCard("card to put onto the battlefield"); for (Permanent permanent : permanents) { permanentNames.add(permanent.getName()); diff --git a/Mage.Sets/src/mage/cards/m/MultiformWonder.java b/Mage.Sets/src/mage/cards/m/MultiformWonder.java index 0dfc1af1f13..565a14d7cfd 100644 --- a/Mage.Sets/src/mage/cards/m/MultiformWonder.java +++ b/Mage.Sets/src/mage/cards/m/MultiformWonder.java @@ -27,8 +27,6 @@ */ package mage.cards.m; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; @@ -46,16 +44,15 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.choices.Choice; import mage.choices.ChoiceImpl; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LevelX2 @@ -90,7 +87,7 @@ public class MultiformWonder extends CardImpl { class MultiformWonderEffect extends OneShotEffect { - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); static { choices.add("Flying"); diff --git a/Mage.Sets/src/mage/cards/n/NecromanticSelection.java b/Mage.Sets/src/mage/cards/n/NecromanticSelection.java index f7145aea873..028bb54964b 100644 --- a/Mage.Sets/src/mage/cards/n/NecromanticSelection.java +++ b/Mage.Sets/src/mage/cards/n/NecromanticSelection.java @@ -27,19 +27,13 @@ */ package mage.cards.n; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileSpellEffect; import mage.abilities.effects.common.continuous.BecomesBlackZombieAdditionEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; +import mage.cards.*; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; @@ -56,6 +50,10 @@ import mage.target.Target; import mage.target.common.TargetCardInGraveyard; import mage.target.targetpointer.FixedTarget; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -110,7 +108,7 @@ class NecromanticSelectionEffect extends OneShotEffect { } } FilterCard filter = new FilterCreatureCard("creature card put into a graveyard with " + sourceObject.getLogName()); - ArrayList> cardIdPredicates = new ArrayList<>(); + List> cardIdPredicates = new ArrayList<>(); for (UUID cardId : cards) { cardIdPredicates.add(new CardIdPredicate(cardId)); } diff --git a/Mage.Sets/src/mage/cards/n/NicolBolasGodPharaoh.java b/Mage.Sets/src/mage/cards/n/NicolBolasGodPharaoh.java index 376063b826e..8d66444e481 100644 --- a/Mage.Sets/src/mage/cards/n/NicolBolasGodPharaoh.java +++ b/Mage.Sets/src/mage/cards/n/NicolBolasGodPharaoh.java @@ -27,8 +27,6 @@ */ package mage.cards.n; -import java.util.HashMap; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; @@ -38,17 +36,8 @@ import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.ExileAllEffect; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; -import mage.constants.AsThoughEffectType; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.cards.*; +import mage.constants.*; import mage.filter.FilterCard; import mage.filter.FilterPermanent; import mage.filter.common.FilterNonlandPermanent; @@ -62,6 +51,10 @@ import mage.target.common.TargetCreatureOrPlayer; import mage.target.common.TargetOpponent; import mage.target.targetpointer.FixedTarget; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * * @author Will @@ -126,7 +119,7 @@ class NicolBolasGodPharaohPlusOneEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { // Store for each player the cards to exile, that's important because all exile shall happen at the same time - HashMap cardsToExile = new HashMap<>(); + Map cardsToExile = new HashMap<>(); // Each player chooses 2 cards to discard for (UUID playerId : game.getOpponents(source.getControllerId())) { Player player = game.getPlayer(playerId); diff --git a/Mage.Sets/src/mage/cards/n/NoRestForTheWicked.java b/Mage.Sets/src/mage/cards/n/NoRestForTheWicked.java index 553cc5bf112..f51889150a8 100644 --- a/Mage.Sets/src/mage/cards/n/NoRestForTheWicked.java +++ b/Mage.Sets/src/mage/cards/n/NoRestForTheWicked.java @@ -27,17 +27,11 @@ */ package mage.cards.n; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; 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.cards.*; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.WatcherScope; @@ -48,6 +42,10 @@ import mage.game.events.ZoneChangeEvent; import mage.players.Player; import mage.watchers.Watcher; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author anonymous @@ -115,7 +113,7 @@ class NoRestForTheWickedEffect extends OneShotEffect { class NoRestForTheWickedWatcher extends Watcher { - ArrayList cards; + List cards; public NoRestForTheWickedWatcher() { super(NoRestForTheWickedWatcher.class.getSimpleName(), WatcherScope.GAME); diff --git a/Mage.Sets/src/mage/cards/n/NyleasPresence.java b/Mage.Sets/src/mage/cards/n/NyleasPresence.java index cf1df00d1b8..9e02f48aeba 100644 --- a/Mage.Sets/src/mage/cards/n/NyleasPresence.java +++ b/Mage.Sets/src/mage/cards/n/NyleasPresence.java @@ -27,9 +27,6 @@ */ package mage.cards.n; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.UUID; import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -38,25 +35,19 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.keyword.EnchantAbility; -import mage.abilities.mana.BasicManaAbility; -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.abilities.mana.*; 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.SubLayer; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPermanent; import mage.target.common.TargetLandPermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -77,7 +68,7 @@ public class NyleasPresence extends CardImpl { // When Nylea's Presence enters the battlefield, draw a card. this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1))); // Enchanted land is every basic land type in addition to its other types. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NyleasPresenceLandTypeEffect("Swamp", "Mountain", "Forest", "Island", "Plains"))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new NyleasPresenceLandTypeEffect())); } @@ -93,11 +84,11 @@ public class NyleasPresence extends CardImpl { class NyleasPresenceLandTypeEffect extends ContinuousEffectImpl { - protected ArrayList landTypes = new ArrayList<>(); + protected List landTypes = new ArrayList<>(); - public NyleasPresenceLandTypeEffect(String... landNames) { + public NyleasPresenceLandTypeEffect() { super(Duration.WhileOnBattlefield, Outcome.Detriment); - landTypes.addAll(Arrays.asList(landNames)); + landTypes.addAll(SubType.getBasicLands(false)); this.staticText = "Enchanted land is every basic land type in addition to its other types"; } @@ -132,24 +123,24 @@ class NyleasPresenceLandTypeEffect extends ContinuousEffectImpl { } } } - if (mana.getGreen() == 0 && landTypes.contains("Forest")) { + if (mana.getGreen() == 0 && landTypes.contains(SubType.FOREST)) { land.addAbility(new GreenManaAbility(), source.getSourceId(), game); } - if (mana.getRed() == 0 && landTypes.contains("Mountain")) { + if (mana.getRed() == 0 && landTypes.contains(SubType.MOUNTAIN)) { land.addAbility(new RedManaAbility(), source.getSourceId(), game); } - if (mana.getBlue() == 0 && landTypes.contains("Island")) { + if (mana.getBlue() == 0 && landTypes.contains(SubType.ISLAND)) { land.addAbility(new BlueManaAbility(), source.getSourceId(), game); } - if (mana.getWhite() == 0 && landTypes.contains("Plains")) { + if (mana.getWhite() == 0 && landTypes.contains(SubType.PLAINS)) { land.addAbility(new WhiteManaAbility(), source.getSourceId(), game); } - if (mana.getBlack() == 0 && landTypes.contains("Swamp")) { + if (mana.getBlack() == 0 && landTypes.contains(SubType.SWAMP)) { land.addAbility(new BlackManaAbility(), source.getSourceId(), game); } break; case TypeChangingEffects_4: - for (String subtype : landTypes) { + for (SubType subtype : landTypes) { if (!land.getSubtype(game).contains(subtype)) { land.getSubtype(game).add(subtype); } diff --git a/Mage.Sets/src/mage/cards/o/OrzhovAdvokist.java b/Mage.Sets/src/mage/cards/o/OrzhovAdvokist.java index 1bd58d36a19..831f9cf3e66 100644 --- a/Mage.Sets/src/mage/cards/o/OrzhovAdvokist.java +++ b/Mage.Sets/src/mage/cards/o/OrzhovAdvokist.java @@ -27,9 +27,6 @@ */ package mage.cards.o; -import java.util.ArrayList; -import java.util.Objects; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; @@ -51,6 +48,11 @@ import mage.players.Player; import mage.target.Target; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + /** * * @author LevelX2 @@ -100,8 +102,8 @@ class OrzhovAdvokistEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - ArrayList players = new ArrayList<>(); - ArrayList creatures = new ArrayList<>(); + List players = new ArrayList<>(); + List creatures = new ArrayList<>(); for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { diff --git a/Mage.Sets/src/mage/cards/p/PlanarOverlay.java b/Mage.Sets/src/mage/cards/p/PlanarOverlay.java index e51c8ae44cd..33e52bc2353 100644 --- a/Mage.Sets/src/mage/cards/p/PlanarOverlay.java +++ b/Mage.Sets/src/mage/cards/p/PlanarOverlay.java @@ -27,9 +27,6 @@ */ package mage.cards.p; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; @@ -44,6 +41,10 @@ import mage.players.Player; import mage.target.Target; import mage.target.common.TargetLandPermanent; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Styxo @@ -91,9 +92,9 @@ class PlanarOverlayEffect extends OneShotEffect { for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { - for (String landName : SubType.getBasicLands(false)) { + for (SubType landName : SubType.getBasicLands(false)) { FilterLandPermanent filter = new FilterLandPermanent(landName + " to return to hand"); - filter.add(new SubtypePredicate(SubType.byDescription(landName))); + filter.add(new SubtypePredicate(landName)); filter.add(new ControllerPredicate(TargetController.YOU)); Target target = new TargetLandPermanent(1, 1, filter, true); if (target.canChoose(source.getSourceId(), player.getId(), game)) { diff --git a/Mage.Sets/src/mage/cards/p/PrismaticOmen.java b/Mage.Sets/src/mage/cards/p/PrismaticOmen.java index c89e0f27b3b..a3b9fc199cc 100644 --- a/Mage.Sets/src/mage/cards/p/PrismaticOmen.java +++ b/Mage.Sets/src/mage/cards/p/PrismaticOmen.java @@ -27,31 +27,22 @@ */ package mage.cards.p; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.UUID; import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousEffectImpl; -import mage.abilities.mana.BasicManaAbility; -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.abilities.mana.*; 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.SubLayer; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterLandPermanent; import mage.game.Game; import mage.game.permanent.Permanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -77,11 +68,11 @@ public class PrismaticOmen extends CardImpl { class BecomesBasicLandTypeAllEffect extends ContinuousEffectImpl { - protected ArrayList landTypes = new ArrayList<>(); + protected List landTypes = new ArrayList<>(); public BecomesBasicLandTypeAllEffect(String... landNames) { super(Duration.WhileOnBattlefield, Outcome.Detriment); - landTypes.addAll(Arrays.asList(landNames)); + landTypes.addAll(SubType.getBasicLands(false)); this.staticText = "Lands you control are every basic land type in addition to their other types"; } @@ -114,24 +105,24 @@ class BecomesBasicLandTypeAllEffect extends ContinuousEffectImpl { } } } - if (mana.getGreen() == 0 && landTypes.contains("Forest")) { + if (mana.getGreen() == 0 && landTypes.contains(SubType.FOREST)) { land.addAbility(new GreenManaAbility(), source.getSourceId(), game); } - if (mana.getRed() == 0 && landTypes.contains("Mountain")) { + if (mana.getRed() == 0 && landTypes.contains(SubType.MOUNTAIN)) { land.addAbility(new RedManaAbility(), source.getSourceId(), game); } - if (mana.getBlue() == 0 && landTypes.contains("Island")) { + if (mana.getBlue() == 0 && landTypes.contains(SubType.ISLAND)) { land.addAbility(new BlueManaAbility(), source.getSourceId(), game); } - if (mana.getWhite() == 0 && landTypes.contains("Plains")) { + if (mana.getWhite() == 0 && landTypes.contains(SubType.PLAINS)) { land.addAbility(new WhiteManaAbility(), source.getSourceId(), game); } - if (mana.getBlack() == 0 && landTypes.contains("Swamp")) { + if (mana.getBlack() == 0 && landTypes.contains(SubType.SWAMP)) { land.addAbility(new BlackManaAbility(), source.getSourceId(), game); } break; case TypeChangingEffects_4: - for (String subtype : landTypes) { + for (SubType subtype : landTypes) { if (!land.getSubtype(game).contains(subtype)) { land.getSubtype(game).add(subtype); } diff --git a/Mage.Sets/src/mage/cards/r/RallyTheAncestors.java b/Mage.Sets/src/mage/cards/r/RallyTheAncestors.java index 2c92b01fbde..e7c777104f1 100644 --- a/Mage.Sets/src/mage/cards/r/RallyTheAncestors.java +++ b/Mage.Sets/src/mage/cards/r/RallyTheAncestors.java @@ -27,9 +27,6 @@ */ package mage.cards.r; -import java.util.ArrayList; -import java.util.Set; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.common.delayed.AtTheBeginOfYourNextUpkeepDelayedTriggeredAbility; @@ -51,6 +48,11 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.targetpointer.FixedTargets; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.UUID; + /** * * @author emerald000 @@ -101,7 +103,7 @@ class RallyTheAncestorsEffect extends OneShotEffect { filter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, xValue + 1)); Set cards = player.getGraveyard().getCards(filter, game); player.moveCards(cards, Zone.BATTLEFIELD, source, game); - ArrayList toExile = new ArrayList<>(cards.size()); + List toExile = new ArrayList<>(cards.size()); for (Card card : cards) { if (card != null) { Permanent permanent = game.getPermanent(card.getId()); diff --git a/Mage.Sets/src/mage/cards/r/ReapIntellect.java b/Mage.Sets/src/mage/cards/r/ReapIntellect.java index b6f858ca0cb..e495fc89f75 100644 --- a/Mage.Sets/src/mage/cards/r/ReapIntellect.java +++ b/Mage.Sets/src/mage/cards/r/ReapIntellect.java @@ -27,17 +27,10 @@ */ package mage.cards.r; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; 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.cards.SplitCard; +import mage.cards.*; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; @@ -52,6 +45,10 @@ import mage.target.common.TargetCardInHand; import mage.target.common.TargetCardInLibrary; import mage.target.common.TargetOpponent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author jeffwadsworth @@ -122,7 +119,7 @@ class ReapIntellectEffect extends OneShotEffect { if (!exiledCards.isEmpty()) { // Building a card filter with all names - ArrayList names = new ArrayList<>(); + List names = new ArrayList<>(); FilterCard filterNamedCards = new FilterCard(); for (Card card : exiledCards.getCards(game)) { if (exiledCards.size() == 1) { diff --git a/Mage.Sets/src/mage/cards/r/ReinsOfTheVinesteed.java b/Mage.Sets/src/mage/cards/r/ReinsOfTheVinesteed.java index 86c6e555bd8..636e937c4bb 100644 --- a/Mage.Sets/src/mage/cards/r/ReinsOfTheVinesteed.java +++ b/Mage.Sets/src/mage/cards/r/ReinsOfTheVinesteed.java @@ -27,8 +27,6 @@ */ package mage.cards.r; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.DiesAttachedTriggeredAbility; @@ -51,6 +49,10 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author jeffwadsworth @@ -110,7 +112,7 @@ class ReinsOfTheVinesteedEffect extends OneShotEffect { } FilterCreaturePermanent FILTER = new FilterCreaturePermanent(); StringBuilder sb = new StringBuilder("creature that shares a creature type with the formerly attached creature: "); - ArrayList> subtypes = new ArrayList<>(); + List> subtypes = new ArrayList<>(); for (SubType subtype : lastStateCreature.getSubtype(game)) { subtypes.add(new SubtypePredicate(subtype)); sb.append(subtype).append(", "); diff --git a/Mage.Sets/src/mage/cards/r/RestoreBalance.java b/Mage.Sets/src/mage/cards/r/RestoreBalance.java index c9ff1505573..8569f782235 100644 --- a/Mage.Sets/src/mage/cards/r/RestoreBalance.java +++ b/Mage.Sets/src/mage/cards/r/RestoreBalance.java @@ -27,17 +27,11 @@ */ package mage.cards.r; -import java.util.HashMap; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.costs.mana.ColoredManaCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.keyword.SuspendAbility; -import mage.cards.Card; -import mage.cards.CardImpl; -import mage.cards.CardSetInfo; -import mage.cards.Cards; -import mage.cards.CardsImpl; +import mage.cards.*; import mage.constants.CardType; import mage.constants.ColoredManaSymbol; import mage.constants.Outcome; @@ -50,6 +44,10 @@ import mage.players.Player; import mage.target.common.TargetCardInHand; import mage.target.common.TargetControlledPermanent; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * * @author Plopman @@ -168,7 +166,7 @@ class RestoreBalanceEffect extends OneShotEffect { //Cards in hand int minCard = Integer.MAX_VALUE; - HashMap cardsToDiscard = new HashMap<>(2); + Map cardsToDiscard = new HashMap<>(2); for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { diff --git a/Mage.Sets/src/mage/cards/r/RiteOfRuin.java b/Mage.Sets/src/mage/cards/r/RiteOfRuin.java index c9c587c80d5..a2bb5c27ebe 100644 --- a/Mage.Sets/src/mage/cards/r/RiteOfRuin.java +++ b/Mage.Sets/src/mage/cards/r/RiteOfRuin.java @@ -27,9 +27,6 @@ */ package mage.cards.r; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -44,6 +41,8 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetControlledPermanent; +import java.util.*; + /** * * @author North @@ -91,7 +90,7 @@ class RiteOfRuinEffect extends OneShotEffect { return false; } - HashSet choices = new HashSet<>(); + Set choices = new HashSet<>(); choices.add("Artifacts"); choices.add("Creatures"); choices.add("Lands"); @@ -106,7 +105,7 @@ class RiteOfRuinEffect extends OneShotEffect { } order.add(getCardType(choices.iterator().next())); - LinkedList sacrifices = new LinkedList<>(); + List sacrifices = new LinkedList<>(); int count = 1; for (CardType cardType : order) { FilterControlledPermanent filter = new FilterControlledPermanent(cardType + " permanent you control"); diff --git a/Mage.Sets/src/mage/cards/s/SavageSummoning.java b/Mage.Sets/src/mage/cards/s/SavageSummoning.java index 38a715d4387..e4bc8585389 100644 --- a/Mage.Sets/src/mage/cards/s/SavageSummoning.java +++ b/Mage.Sets/src/mage/cards/s/SavageSummoning.java @@ -27,12 +27,6 @@ */ package mage.cards.s; -import java.util.HashSet; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.CantBeCounteredAbility; @@ -42,11 +36,7 @@ import mage.abilities.effects.ReplacementEffectImpl; import mage.cards.Card; 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.constants.WatcherScope; +import mage.constants.*; import mage.counters.CounterType; import mage.game.Game; import mage.game.command.Commander; @@ -57,6 +47,9 @@ import mage.game.permanent.Permanent; import mage.game.stack.Spell; import mage.watchers.Watcher; +import java.util.*; +import java.util.Map.Entry; + /** * * @author LevelX2 @@ -200,7 +193,7 @@ class SavageSummoningWatcher extends Watcher { public boolean isSpellCastWithThisSavageSummoning(UUID spellId, UUID cardId, int zoneChangeCounter) { String cardKey = new StringBuilder(cardId.toString()).append('_').append(zoneChangeCounter).toString(); - HashSet savageSpells = (HashSet) spellsCastWithSavageSummoning.get(spellId); + Set savageSpells = spellsCastWithSavageSummoning.get(spellId); return savageSpells != null && savageSpells.contains(cardKey); } @@ -208,7 +201,7 @@ class SavageSummoningWatcher extends Watcher { String creatureCardKey = card.getId().toString() + '_' + (card.getZoneChangeCounter(game)); // add one because card is now gone to battlefield as creature String cardKey = cardId.toString() + '_' + zoneChangeCounter; - HashSet savageSpells = (HashSet) cardsCastWithSavageSummoning.get(creatureCardKey); + Set savageSpells = cardsCastWithSavageSummoning.get(creatureCardKey); return savageSpells != null && savageSpells.contains(cardKey); } diff --git a/Mage.Sets/src/mage/cards/s/ScytheSpecter.java b/Mage.Sets/src/mage/cards/s/ScytheSpecter.java index 04a9d91a440..8e776201cc1 100644 --- a/Mage.Sets/src/mage/cards/s/ScytheSpecter.java +++ b/Mage.Sets/src/mage/cards/s/ScytheSpecter.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.HashMap; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility; @@ -46,6 +44,10 @@ import mage.players.Player; import mage.target.Target; import mage.target.common.TargetDiscard; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * * @author jeffwadsworth @@ -90,8 +92,8 @@ class ScytheSpecterEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - HashMap cardDiscarded = new HashMap<>(); - HashMap discardedCheck = new HashMap<>(); + Map cardDiscarded = new HashMap<>(); + Map discardedCheck = new HashMap<>(); Integer highestCMC = 0; Integer currentCMC = 0; Player controller = game.getPlayer(source.getControllerId()); diff --git a/Mage.Sets/src/mage/cards/s/SecondSunrise.java b/Mage.Sets/src/mage/cards/s/SecondSunrise.java index 80302d0aae0..8940e37f197 100644 --- a/Mage.Sets/src/mage/cards/s/SecondSunrise.java +++ b/Mage.Sets/src/mage/cards/s/SecondSunrise.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; @@ -43,6 +41,10 @@ import mage.game.events.GameEvent; import mage.game.events.ZoneChangeEvent; import mage.watchers.Watcher; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -103,7 +105,7 @@ class SecondSunriseEffect extends OneShotEffect { } class SecondSunriseWatcher extends Watcher { - ArrayList cards = new ArrayList<>(); + List cards = new ArrayList<>(); public SecondSunriseWatcher() { super(SecondSunriseWatcher.class.getSimpleName(), WatcherScope.GAME); diff --git a/Mage.Sets/src/mage/cards/s/Shapeshifter.java b/Mage.Sets/src/mage/cards/s/Shapeshifter.java index b803ce72bcd..b935c9dae8c 100644 --- a/Mage.Sets/src/mage/cards/s/Shapeshifter.java +++ b/Mage.Sets/src/mage/cards/s/Shapeshifter.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; @@ -41,18 +39,16 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.choices.Choice; import mage.choices.ChoiceImpl; -import mage.constants.CardType; -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.constants.*; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.util.CardUtil; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author MarcoMarin / HCrescent @@ -101,21 +97,21 @@ class ShapeshifterEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player Controller = game.getPlayer(source.getControllerId()); + Player controller = game.getPlayer(source.getControllerId()); MageObject mageObject = game.getPermanentEntering(source.getSourceId()); if (mageObject == null) { mageObject = game.getPermanent(source.getSourceId()); } - if (Controller != null) { + if (controller != null) { Choice numberChoice = new ChoiceImpl(); numberChoice.setMessage("Choose a number beween 0 and 7"); - HashSet numbers = new HashSet<>(); + Set numbers = new HashSet<>(); for (int i = 0; i <= 7; i++) { numbers.add(Integer.toString(i)); } numberChoice.setChoices(numbers); - while (!Controller.choose(Outcome.Neutral, numberChoice, game)) { - if (!Controller.canRespond()) { + while (!controller.choose(Outcome.Neutral, numberChoice, game)) { + if (!controller.canRespond()) { return false; } } diff --git a/Mage.Sets/src/mage/cards/s/SharedAnimosity.java b/Mage.Sets/src/mage/cards/s/SharedAnimosity.java index 96d0bfb6779..fd6b7dc2e62 100644 --- a/Mage.Sets/src/mage/cards/s/SharedAnimosity.java +++ b/Mage.Sets/src/mage/cards/s/SharedAnimosity.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.Mode; @@ -47,6 +45,10 @@ import mage.filter.predicate.permanent.PermanentIdPredicate; import mage.game.Game; import mage.game.permanent.Permanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Plopman @@ -109,7 +111,7 @@ class SharedAnimosityEffect extends ContinuousEffectImpl { } } if(!allCreatureTypes){ - ArrayList> predicateList = new ArrayList<>(); + List> predicateList = new ArrayList<>(); for(SubType subtype : permanent.getSubtype(game)){ predicateList.add(new SubtypePredicate(subtype)); } diff --git a/Mage.Sets/src/mage/cards/s/SilenceTheBelievers.java b/Mage.Sets/src/mage/cards/s/SilenceTheBelievers.java index 9d6a3cf974d..6ec74cc10a9 100644 --- a/Mage.Sets/src/mage/cards/s/SilenceTheBelievers.java +++ b/Mage.Sets/src/mage/cards/s/SilenceTheBelievers.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.abilityword.StriveAbility; import mage.abilities.effects.OneShotEffect; @@ -42,6 +40,10 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** @@ -95,7 +97,7 @@ class SilenceTheBelieversExileEffect extends OneShotEffect { for (UUID targetId: this.getTargetPointer().getTargets(game, source)) { Permanent creature = game.getPermanent(targetId); if (creature != null) { - ArrayList attachments = new ArrayList<>(creature.getAttachments()); + List attachments = new ArrayList<>(creature.getAttachments()); for (UUID attachmentId: attachments) { Permanent attachment = game.getPermanent(attachmentId); if (attachment != null && attachment.getSubtype(game).contains("Aura")) { diff --git a/Mage.Sets/src/mage/cards/s/SithEvoker.java b/Mage.Sets/src/mage/cards/s/SithEvoker.java index 93224d1460e..a1e836de18d 100644 --- a/Mage.Sets/src/mage/cards/s/SithEvoker.java +++ b/Mage.Sets/src/mage/cards/s/SithEvoker.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; @@ -51,6 +49,10 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Styxo @@ -84,7 +86,7 @@ public class SithEvoker extends CardImpl { class SithEvokerEffect extends OneShotEffect { - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); static { choices.add("Gain life equal to creature's power"); diff --git a/Mage.Sets/src/mage/cards/s/SithRuins.java b/Mage.Sets/src/mage/cards/s/SithRuins.java index 588d0fc082c..05be1f30abe 100644 --- a/Mage.Sets/src/mage/cards/s/SithRuins.java +++ b/Mage.Sets/src/mage/cards/s/SithRuins.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.ActivatedAbilityImpl; import mage.abilities.costs.common.SacrificeSourceCost; @@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.mageobject.SupertypePredicate; import mage.target.common.TargetCardInLibrary; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Styxo @@ -84,7 +86,7 @@ public class SithRuins extends CardImpl { addCost(new SacrificeSourceCost()); FilterCard filter = new FilterCard("basic Island, Swamp or Mountain"); filter.add(new CardTypePredicate(CardType.LAND)); - ArrayList> subtypePredicates = new ArrayList<>(); + List> subtypePredicates = new ArrayList<>(); subtypePredicates.add(new SubtypePredicate(SubType.SWAMP)); subtypePredicates.add(new SubtypePredicate(SubType.MOUNTAIN)); subtypePredicates.add(new SubtypePredicate(SubType.ISLAND)); diff --git a/Mage.Sets/src/mage/cards/s/SoulOfRavnica.java b/Mage.Sets/src/mage/cards/s/SoulOfRavnica.java index e454cf2391a..667cf8469d0 100644 --- a/Mage.Sets/src/mage/cards/s/SoulOfRavnica.java +++ b/Mage.Sets/src/mage/cards/s/SoulOfRavnica.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; @@ -46,6 +44,10 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LevelX2 @@ -100,7 +102,7 @@ class SoulOfRavnicaEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - HashSet colors = new HashSet<>(); + Set colors = new HashSet<>(); for (Permanent permanent : game.getBattlefield().getAllActivePermanents(controller.getId())) { if (permanent.getColor(game).isBlack()) { colors.add(ObjectColor.BLACK); diff --git a/Mage.Sets/src/mage/cards/s/SpiritOfResistance.java b/Mage.Sets/src/mage/cards/s/SpiritOfResistance.java index 74994905286..2432fe360ea 100644 --- a/Mage.Sets/src/mage/cards/s/SpiritOfResistance.java +++ b/Mage.Sets/src/mage/cards/s/SpiritOfResistance.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.HashSet; -import java.util.UUID; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; @@ -45,6 +43,10 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * @author Quercitron */ @@ -79,7 +81,7 @@ enum SpiritOfResistanceCondition implements Condition { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - HashSet colors = new HashSet<>(); + Set colors = new HashSet<>(); for (Permanent permanent : game.getBattlefield().getAllActivePermanents(controller.getId())) { if (permanent.getColor(game).isBlack()) { colors.add(ObjectColor.BLACK); diff --git a/Mage.Sets/src/mage/cards/s/SpiritOfTheLabyrinth.java b/Mage.Sets/src/mage/cards/s/SpiritOfTheLabyrinth.java index 8f00bfe51f7..09298315216 100644 --- a/Mage.Sets/src/mage/cards/s/SpiritOfTheLabyrinth.java +++ b/Mage.Sets/src/mage/cards/s/SpiritOfTheLabyrinth.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; @@ -40,6 +38,10 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.watchers.Watcher; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * @@ -71,7 +73,7 @@ public class SpiritOfTheLabyrinth extends CardImpl { class SpiritOfTheLabyrinthWatcher extends Watcher { - private final HashSet playersThatDrewCard; + private final Set playersThatDrewCard; public SpiritOfTheLabyrinthWatcher() { super(SpiritOfTheLabyrinthWatcher.class.getSimpleName(), WatcherScope.GAME); diff --git a/Mage.Sets/src/mage/cards/s/StorageMatrix.java b/Mage.Sets/src/mage/cards/s/StorageMatrix.java index 74575b5b110..45c40eb7eee 100644 --- a/Mage.Sets/src/mage/cards/s/StorageMatrix.java +++ b/Mage.Sets/src/mage/cards/s/StorageMatrix.java @@ -27,8 +27,6 @@ */ package mage.cards.s; -import java.util.HashSet; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.RestrictionEffect; @@ -44,6 +42,10 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LevelX2 @@ -71,7 +73,7 @@ class StorageMatrixRestrictionEffect extends RestrictionEffect { private int turn; private boolean applies; - private static final HashSet choice = new HashSet<>(); + private static final Set choice = new HashSet<>(); static { choice.add(CardType.ARTIFACT.toString()); diff --git a/Mage.Sets/src/mage/cards/s/SunderingTitan.java b/Mage.Sets/src/mage/cards/s/SunderingTitan.java index f67ef096204..ac9dc94ff5a 100644 --- a/Mage.Sets/src/mage/cards/s/SunderingTitan.java +++ b/Mage.Sets/src/mage/cards/s/SunderingTitan.java @@ -27,9 +27,6 @@ */ package mage.cards.s; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldOrLeavesSourceTriggeredAbility; @@ -47,6 +44,10 @@ import mage.players.Player; import mage.target.Target; import mage.target.common.TargetLandPermanent; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LevelX2 @@ -96,9 +97,9 @@ class SunderingTitanDestroyLandEffect extends OneShotEffect { Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId()); Set lands = new HashSet<>(); if (controller != null && sourcePermanent != null) { - for (String landName : SubType.getBasicLands(false)) { + for (SubType landName : SubType.getBasicLands(false)) { FilterLandPermanent filter = new FilterLandPermanent(landName + " to destroy"); - filter.add(new SubtypePredicate(SubType.byDescription(landName))); + filter.add(new SubtypePredicate(landName)); Target target = new TargetLandPermanent(1, 1, filter, true); if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { controller.chooseTarget(outcome, target, source, game); diff --git a/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java b/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java index 5ed5279fd90..aa64e272467 100644 --- a/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java +++ b/Mage.Sets/src/mage/cards/t/TamiyoFieldResearcher.java @@ -27,9 +27,6 @@ */ package mage.cards.t; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; @@ -58,6 +55,10 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -123,7 +124,7 @@ class TamiyoFieldResearcherEffect1 extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - ArrayList creatures = new ArrayList<>(); + List creatures = new ArrayList<>(); for (UUID uuid : getTargetPointer().getTargets(game, source)) { creatures.add(new MageObjectReference(uuid, game)); } diff --git a/Mage.Sets/src/mage/cards/t/Tarmogoyf.java b/Mage.Sets/src/mage/cards/t/Tarmogoyf.java index ee2be7559f8..ed9392855ce 100644 --- a/Mage.Sets/src/mage/cards/t/Tarmogoyf.java +++ b/Mage.Sets/src/mage/cards/t/Tarmogoyf.java @@ -27,8 +27,6 @@ */ package mage.cards.t; -import java.util.HashSet; -import java.util.UUID; import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; @@ -37,15 +35,14 @@ import mage.abilities.effects.ContinuousEffectImpl; import mage.cards.Card; 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.SubLayer; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.players.Player; +import java.util.EnumSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Plopman @@ -95,7 +92,7 @@ class TarmogoyfEffect extends ContinuousEffectImpl { if (controller != null) { MageObject target = game.getObject(source.getSourceId()); if (target != null) { - HashSet foundCardTypes = new HashSet<>(); + Set foundCardTypes = EnumSet.noneOf(CardType.class); for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { diff --git a/Mage.Sets/src/mage/cards/t/TeferisRealm.java b/Mage.Sets/src/mage/cards/t/TeferisRealm.java index 1e5dcf732b9..d74b69fcb16 100644 --- a/Mage.Sets/src/mage/cards/t/TeferisRealm.java +++ b/Mage.Sets/src/mage/cards/t/TeferisRealm.java @@ -27,8 +27,6 @@ */ package mage.cards.t; -import java.util.HashSet; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -46,6 +44,10 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author LevelX2 @@ -76,7 +78,7 @@ class TeferisRealmEffect extends OneShotEffect { private static final String CREATURE = "Creature"; private static final String LAND = "Land"; private static final String NON_AURA_ENCHANTMENT = "Non-Aura enchantment"; - private static final HashSet choices = new HashSet<>(); + private static final Set choices = new HashSet<>(); static { choices.add(ARTIFACT); diff --git a/Mage.Sets/src/mage/cards/t/Terastodon.java b/Mage.Sets/src/mage/cards/t/Terastodon.java index c5abdf6bcd2..5dc9734eedb 100644 --- a/Mage.Sets/src/mage/cards/t/Terastodon.java +++ b/Mage.Sets/src/mage/cards/t/Terastodon.java @@ -27,9 +27,6 @@ */ package mage.cards.t; -import java.util.HashMap; -import java.util.Map.Entry; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -47,6 +44,11 @@ import mage.game.permanent.Permanent; import mage.game.permanent.token.ElephantToken; import mage.target.TargetPermanent; +import java.util.HashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.UUID; + /** * * @author jeffwadsworth @@ -100,7 +102,7 @@ class TerastodonEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - HashMap destroyedPermanents = new HashMap<>(); + Map destroyedPermanents = new HashMap<>(); for (UUID targetID : this.targetPointer.getTargets(game, source)) { Permanent permanent = game.getPermanent(targetID); if (permanent != null) { diff --git a/Mage.Sets/src/mage/cards/t/ThatcherRevolt.java b/Mage.Sets/src/mage/cards/t/ThatcherRevolt.java index 416907dea27..39b4fcbdac1 100644 --- a/Mage.Sets/src/mage/cards/t/ThatcherRevolt.java +++ b/Mage.Sets/src/mage/cards/t/ThatcherRevolt.java @@ -27,8 +27,6 @@ */ package mage.cards.t; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.delayed.AtTheBeginOfNextEndStepDelayedTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -42,6 +40,10 @@ import mage.game.permanent.Permanent; import mage.game.permanent.token.ThatcherHumanToken; import mage.target.targetpointer.FixedTargets; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author North @@ -85,7 +87,7 @@ class ThatcherRevoltEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { ThatcherHumanToken token = new ThatcherHumanToken(); token.putOntoBattlefield(3, game, source.getSourceId(), source.getControllerId()); - ArrayList toSacrifice = new ArrayList<>(); + List toSacrifice = new ArrayList<>(); for (UUID tokenId : token.getLastAddedTokenIds()) { Permanent tokenPermanent = game.getPermanent(tokenId); if (tokenPermanent != null) { diff --git a/Mage.Sets/src/mage/cards/t/ThranTurbine.java b/Mage.Sets/src/mage/cards/t/ThranTurbine.java index d3575db0803..b2480d4a6d4 100644 --- a/Mage.Sets/src/mage/cards/t/ThranTurbine.java +++ b/Mage.Sets/src/mage/cards/t/ThranTurbine.java @@ -27,8 +27,6 @@ */ package mage.cards.t; -import java.util.HashSet; -import java.util.UUID; import mage.ConditionalMana; import mage.Mana; import mage.abilities.Ability; @@ -52,6 +50,10 @@ import mage.game.permanent.Permanent; import mage.game.stack.Spell; import mage.players.Player; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author spjspjs @@ -97,7 +99,7 @@ class ThranTurbineEffect extends OneShotEffect { if (player != null) { Choice numberChoice = new ChoiceImpl(); - HashSet numbers = new HashSet<>(); + Set numbers = new HashSet<>(); numbers.add(Integer.toString(1)); numbers.add(Integer.toString(2)); numberChoice.setChoices(numbers); diff --git a/Mage.Sets/src/mage/cards/t/Turnabout.java b/Mage.Sets/src/mage/cards/t/Turnabout.java index 45aaa8cc2dc..e15011b9e42 100644 --- a/Mage.Sets/src/mage/cards/t/Turnabout.java +++ b/Mage.Sets/src/mage/cards/t/Turnabout.java @@ -27,8 +27,6 @@ */ package mage.cards.t; -import java.util.HashSet; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; @@ -46,6 +44,10 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPlayer; +import java.util.HashSet; +import java.util.Set; +import java.util.UUID; + /** * * @author Plopman @@ -73,7 +75,7 @@ public class Turnabout extends CardImpl { class TurnaboutEffect extends OneShotEffect { - private static final HashSet choice = new HashSet<>(); + private static final Set choice = new HashSet<>(); static { choice.add(CardType.ARTIFACT.toString()); @@ -81,7 +83,7 @@ class TurnaboutEffect extends OneShotEffect { choice.add(CardType.LAND.toString()); } - private static final HashSet choice2 = new HashSet<>(); + private static final Set choice2 = new HashSet<>(); static { choice2.add("Untap"); diff --git a/Mage.Sets/src/mage/cards/t/Twinflame.java b/Mage.Sets/src/mage/cards/t/Twinflame.java index 46cb4855962..565e9b91b3f 100644 --- a/Mage.Sets/src/mage/cards/t/Twinflame.java +++ b/Mage.Sets/src/mage/cards/t/Twinflame.java @@ -27,8 +27,6 @@ */ package mage.cards.t; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.abilityword.StriveAbility; @@ -48,6 +46,10 @@ import mage.target.common.TargetControlledCreaturePermanent; import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTargets; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -95,7 +97,7 @@ class TwinflameCopyEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - ArrayList toExile = new ArrayList<>(); + List toExile = new ArrayList<>(); for (UUID creatureId : this.getTargetPointer().getTargets(game, source)) { Permanent creature = game.getPermanentOrLKIBattlefield(creatureId); if (creature != null) { diff --git a/Mage.Sets/src/mage/cards/t/TymnaTheWeaver.java b/Mage.Sets/src/mage/cards/t/TymnaTheWeaver.java index 015816d825e..1ed1d1883d2 100644 --- a/Mage.Sets/src/mage/cards/t/TymnaTheWeaver.java +++ b/Mage.Sets/src/mage/cards/t/TymnaTheWeaver.java @@ -27,10 +27,6 @@ */ package mage.cards.t; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfPostCombatMainTriggeredAbility; @@ -49,6 +45,8 @@ import mage.game.events.GameEvent.EventType; import mage.players.Player; import mage.watchers.Watcher; +import java.util.*; + /** * * @author LevelX2 @@ -122,7 +120,7 @@ class TymnaTheWeaverEffect extends OneShotEffect { class TymnaTheWeaverWatcher extends Watcher { // private final Set players = new HashSet<>(); - private final HashMap> players = new HashMap<>(); + private final Map> players = new HashMap<>(); public TymnaTheWeaverWatcher() { super(TymnaTheWeaverWatcher.class.getSimpleName(), WatcherScope.GAME); @@ -131,7 +129,7 @@ class TymnaTheWeaverWatcher extends Watcher { public TymnaTheWeaverWatcher(final TymnaTheWeaverWatcher watcher) { super(watcher); for (UUID playerId : watcher.players.keySet()) { - HashSet opponents = new HashSet<>(); + Set opponents = new HashSet<>(); opponents.addAll(watcher.players.get(playerId)); players.put(playerId, opponents); } diff --git a/Mage.Sets/src/mage/cards/u/UbaMask.java b/Mage.Sets/src/mage/cards/u/UbaMask.java index 32f7a1a1732..7581d6bb08c 100644 --- a/Mage.Sets/src/mage/cards/u/UbaMask.java +++ b/Mage.Sets/src/mage/cards/u/UbaMask.java @@ -27,10 +27,6 @@ */ package mage.cards.u; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.UUID; import mage.MageObject; import mage.MageObjectReference; import mage.abilities.Ability; @@ -40,17 +36,14 @@ import mage.abilities.effects.ReplacementEffectImpl; import mage.cards.Card; 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.constants.WatcherScope; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; import mage.players.Player; import mage.watchers.Watcher; +import java.util.*; + /** * * @author LevelX2 @@ -162,7 +155,7 @@ class UbaMaskPlayEffect extends AsThoughEffectImpl { class UbaMaskExiledCardsWatcher extends Watcher { - private final HashMap> exiledCards = new HashMap<>(); + private final Map> exiledCards = new HashMap<>(); public UbaMaskExiledCardsWatcher() { super(UbaMaskExiledCardsWatcher.class.getSimpleName(), WatcherScope.GAME); diff --git a/Mage.Sets/src/mage/cards/u/UnderworldSlums.java b/Mage.Sets/src/mage/cards/u/UnderworldSlums.java index 7b2ef7a4b10..1a31ec8e0fd 100644 --- a/Mage.Sets/src/mage/cards/u/UnderworldSlums.java +++ b/Mage.Sets/src/mage/cards/u/UnderworldSlums.java @@ -27,8 +27,6 @@ */ package mage.cards.u; -import java.util.ArrayList; -import java.util.UUID; import mage.MageObject; import mage.abilities.ActivatedAbilityImpl; import mage.abilities.costs.common.SacrificeSourceCost; @@ -46,6 +44,10 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.mageobject.SupertypePredicate; import mage.target.common.TargetCardInLibrary; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author Styxo @@ -84,7 +86,7 @@ public class UnderworldSlums extends CardImpl { addCost(new SacrificeSourceCost()); FilterCard filter = new FilterCard("basic Swamp, Mountain or Forest"); filter.add(new CardTypePredicate(CardType.LAND)); - ArrayList> subtypePredicates = new ArrayList<>(); + List> subtypePredicates = new ArrayList<>(); subtypePredicates.add(new SubtypePredicate(SubType.SWAMP)); subtypePredicates.add(new SubtypePredicate(SubType.MOUNTAIN)); subtypePredicates.add(new SubtypePredicate(SubType.FOREST)); diff --git a/Mage.Sets/src/mage/cards/u/UrzasMiter.java b/Mage.Sets/src/mage/cards/u/UrzasMiter.java index 2a80ece079a..17e5068e76b 100644 --- a/Mage.Sets/src/mage/cards/u/UrzasMiter.java +++ b/Mage.Sets/src/mage/cards/u/UrzasMiter.java @@ -27,8 +27,6 @@ */ package mage.cards.u; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.ZoneChangeAllTriggeredAbility; import mage.abilities.costs.Cost; @@ -46,6 +44,10 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.watchers.Watcher; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author MarcoMarin @@ -95,7 +97,7 @@ class UrzasMiterDoIfCostPaid extends DoIfCostPaid { class UrzasMiterWatcher extends Watcher { - ArrayList cards; + List cards; public UrzasMiterWatcher() { super(UrzasMiterWatcher.class.getSimpleName(), WatcherScope.PLAYER); diff --git a/Mage.Sets/src/mage/cards/v/VileRedeemer.java b/Mage.Sets/src/mage/cards/v/VileRedeemer.java index 41661d91c38..505f8920134 100644 --- a/Mage.Sets/src/mage/cards/v/VileRedeemer.java +++ b/Mage.Sets/src/mage/cards/v/VileRedeemer.java @@ -27,8 +27,6 @@ */ package mage.cards.v; -import java.util.HashMap; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.costs.mana.ManaCostsImpl; @@ -51,6 +49,10 @@ import mage.game.permanent.token.EldraziScionToken; import mage.players.Player; import mage.watchers.Watcher; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + /** * @author LevelX2 */ @@ -117,7 +119,7 @@ class VileRedeemerEffect extends OneShotEffect { class VileRedeemerNonTokenCreaturesDiedWatcher extends Watcher { - private final HashMap amountOfCreaturesThatDied = new HashMap<>(); + private final Map amountOfCreaturesThatDied = new HashMap<>(); public VileRedeemerNonTokenCreaturesDiedWatcher() { super(VileRedeemerNonTokenCreaturesDiedWatcher.class.getSimpleName(), WatcherScope.GAME); diff --git a/Mage.Sets/src/mage/cards/v/VoraciousDragon.java b/Mage.Sets/src/mage/cards/v/VoraciousDragon.java index b2738dd0f49..152e1ca10b3 100644 --- a/Mage.Sets/src/mage/cards/v/VoraciousDragon.java +++ b/Mage.Sets/src/mage/cards/v/VoraciousDragon.java @@ -27,8 +27,6 @@ */ package mage.cards.v; -import java.util.ArrayList; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -46,6 +44,9 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.common.TargetCreatureOrPlayer; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -93,7 +94,7 @@ class TwiceDevouredGoblins implements DynamicValue { if (abilityEffect instanceof DevourEffect) { DevourEffect devourEffect = (DevourEffect) abilityEffect; int amountGoblins = 0; - for (ArrayList subtypesItem :devourEffect.getSubtypes(game, sourcePermanent.getId())) { + for (List subtypesItem :devourEffect.getSubtypes(game, sourcePermanent.getId())) { if (subtypesItem.contains("Goblin")) { ++amountGoblins; } diff --git a/Mage.Sets/src/mage/cards/w/WakeTheDead.java b/Mage.Sets/src/mage/cards/w/WakeTheDead.java index 725b1ea4ba1..10a11edab4e 100644 --- a/Mage.Sets/src/mage/cards/w/WakeTheDead.java +++ b/Mage.Sets/src/mage/cards/w/WakeTheDead.java @@ -27,8 +27,6 @@ */ package mage.cards.w; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.DelayedTriggeredAbility; import mage.abilities.SpellAbility; @@ -53,6 +51,10 @@ import mage.players.Player; import mage.target.common.TargetCardInYourGraveyard; import mage.target.targetpointer.FixedTargets; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author LevelX2 @@ -111,7 +113,7 @@ class WakeTheDeadReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEff if (controller != null) { Cards cards = new CardsImpl(getTargetPointer().getTargets(game, source)); controller.moveCards(cards, Zone.BATTLEFIELD, source, game); - ArrayList toSacrifice = new ArrayList<>(cards.size()); + List toSacrifice = new ArrayList<>(cards.size()); for (UUID targetId : cards) { Permanent creature = game.getPermanent(targetId); if (creature != null) { diff --git a/Mage.Sets/src/mage/cards/w/WitchbaneOrb.java b/Mage.Sets/src/mage/cards/w/WitchbaneOrb.java index 6757e42704a..2eeb027bb3e 100644 --- a/Mage.Sets/src/mage/cards/w/WitchbaneOrb.java +++ b/Mage.Sets/src/mage/cards/w/WitchbaneOrb.java @@ -27,8 +27,6 @@ */ package mage.cards.w; -import java.util.ArrayList; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; @@ -44,6 +42,10 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** * * @author BetaSteward @@ -86,7 +88,7 @@ class WitchbaneOrbEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - ArrayList toDestroy = new ArrayList<>(); + List toDestroy = new ArrayList<>(); for (UUID attachmentId : controller.getAttachments()) { Permanent attachment = game.getPermanent(attachmentId); if (attachment != null && attachment.getSubtype(game).contains("Curse")) { diff --git a/Mage.Sets/src/mage/cards/w/WorldQueller.java b/Mage.Sets/src/mage/cards/w/WorldQueller.java index a96b5742980..ede1c4738b0 100644 --- a/Mage.Sets/src/mage/cards/w/WorldQueller.java +++ b/Mage.Sets/src/mage/cards/w/WorldQueller.java @@ -27,11 +27,6 @@ */ package mage.cards.w; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; @@ -52,6 +47,8 @@ import mage.players.Player; import mage.target.TargetPermanent; import mage.target.common.TargetControlledPermanent; +import java.util.*; + /** * * @author jeffwadsworth @@ -82,7 +79,7 @@ public class WorldQueller extends CardImpl { class WorldQuellerEffect extends OneShotEffect { - private static final HashSet choice = new LinkedHashSet<>(); + private static final Set choice = new LinkedHashSet<>(); static { choice.add(CardType.ARTIFACT.toString()); diff --git a/Mage/src/main/java/mage/constants/SubType.java b/Mage/src/main/java/mage/constants/SubType.java index efe2eca536f..bb7a8e8f9b9 100644 --- a/Mage/src/main/java/mage/constants/SubType.java +++ b/Mage/src/main/java/mage/constants/SubType.java @@ -1,9 +1,10 @@ package mage.constants; +import mage.util.SubTypeList; + import java.util.Arrays; import java.util.Set; import java.util.stream.Collectors; -import mage.util.SubTypeList; public enum SubType { @@ -427,8 +428,8 @@ public enum SubType { return subTypes; } - public static Set getBasicLands(boolean customSet) { - return Arrays.stream(values()).filter(s -> s.customSet == customSet).filter(p -> p.getSubTypeSet() == SubTypeSet.BasicLandType).map(SubType::getDescription).collect(Collectors.toSet()); + public static Set getBasicLands(boolean customSet) { + return Arrays.stream(values()).filter(s -> s.customSet == customSet).filter(p -> p.getSubTypeSet() == SubTypeSet.BasicLandType).collect(Collectors.toSet()); } public static SubTypeList getLandTypes(boolean customSet) { diff --git a/Mage/src/main/java/mage/filter/StaticFilters.java b/Mage/src/main/java/mage/filter/StaticFilters.java index 46a58672999..6cfc22b324c 100644 --- a/Mage/src/main/java/mage/filter/StaticFilters.java +++ b/Mage/src/main/java/mage/filter/StaticFilters.java @@ -7,9 +7,12 @@ package mage.filter; import mage.constants.CardType; import mage.constants.SubType; +import mage.constants.SuperType; import mage.filter.common.*; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.filter.predicate.mageobject.SupertypePredicate; import mage.filter.predicate.permanent.AnotherPredicate; import mage.filter.predicate.permanent.AttackingPredicate; import mage.filter.predicate.permanent.TokenPredicate; @@ -64,6 +67,26 @@ public final class StaticFilters { public static final FilterPermanent FILTER_ATTACKING_CREATURES = new FilterCreaturePermanent("attacking creatures"); + + + public static final FilterPermanent FILTER_AURA = new FilterPermanent(); + public static final FilterPermanent FILTER_EQUIPMENT = new FilterPermanent(); + public static final FilterPermanent FILTER_FORTIFICATION = new FilterPermanent(); + public static final FilterPermanent FILTER_LEGENDARY = new FilterPermanent(); + + static { + FILTER_AURA.add(new CardTypePredicate(CardType.ENCHANTMENT)); + FILTER_AURA.add(new SubtypePredicate(SubType.AURA)); + + FILTER_EQUIPMENT.add(new CardTypePredicate(CardType.ARTIFACT)); + FILTER_EQUIPMENT.add(new SubtypePredicate(SubType.EQUIPMENT)); + + FILTER_FORTIFICATION.add(new CardTypePredicate(CardType.ARTIFACT)); + FILTER_FORTIFICATION.add(new SubtypePredicate(SubType.FORTIFICATION)); + + FILTER_LEGENDARY.add(new SupertypePredicate(SuperType.LEGENDARY)); + } + static { FILTER_CONTROLLED_PERMANENT_NON_LAND.add( Predicates.not(new CardTypePredicate(CardType.LAND))); diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index bf327ab6786..41d2996498a 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -54,9 +54,9 @@ import mage.designations.Monarch; import mage.filter.Filter; import mage.filter.FilterCard; import mage.filter.FilterPermanent; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterPlaneswalkerPermanent; -import mage.filter.predicate.mageobject.CardTypePredicate; import mage.filter.predicate.mageobject.NamePredicate; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.mageobject.SupertypePredicate; @@ -103,24 +103,6 @@ public abstract class GameImpl implements Game, Serializable { private static final Logger logger = Logger.getLogger(GameImpl.class); - private static final FilterPermanent FILTER_AURA = new FilterPermanent(); - private static final FilterPermanent FILTER_EQUIPMENT = new FilterPermanent(); - private static final FilterPermanent FILTER_FORTIFICATION = new FilterPermanent(); - private static final FilterPermanent FILTER_LEGENDARY = new FilterPermanent(); - - static { - FILTER_AURA.add(new CardTypePredicate(CardType.ENCHANTMENT)); - FILTER_AURA.add(new SubtypePredicate(SubType.AURA)); - - FILTER_EQUIPMENT.add(new CardTypePredicate(CardType.ARTIFACT)); - FILTER_EQUIPMENT.add(new SubtypePredicate(SubType.EQUIPMENT)); - - FILTER_FORTIFICATION.add(new CardTypePredicate(CardType.ARTIFACT)); - FILTER_FORTIFICATION.add(new SubtypePredicate(SubType.FORTIFICATION)); - - FILTER_LEGENDARY.add(new SupertypePredicate(SuperType.LEGENDARY)); - } - private transient Object customData; protected boolean simulation = false; @@ -1784,7 +1766,7 @@ public abstract class GameImpl implements Game, Serializable { if (perm.isWorld()) { worldEnchantment.add(perm); } - if (FILTER_AURA.match(perm, this)) { + if (StaticFilters.FILTER_AURA.match(perm, this)) { //20091005 - 704.5n, 702.14c if (perm.getAttachedTo() == null) { Card card = this.getCard(perm.getId()); @@ -1862,10 +1844,10 @@ public abstract class GameImpl implements Game, Serializable { } } } - if (this.getState().isLegendaryRuleActive() && FILTER_LEGENDARY.match(perm, this)) { + if (this.getState().isLegendaryRuleActive() && StaticFilters.FILTER_LEGENDARY.match(perm, this)) { legendary.add(perm); } - if (FILTER_EQUIPMENT.match(perm, this)) { + if (StaticFilters.FILTER_EQUIPMENT.match(perm, this)) { //20091005 - 704.5p, 702.14d if (perm.getAttachedTo() != null) { Permanent attachedTo = getPermanent(perm.getAttachedTo()); @@ -1890,7 +1872,7 @@ public abstract class GameImpl implements Game, Serializable { } } } - if (FILTER_FORTIFICATION.match(perm, this)) { + if (StaticFilters.FILTER_FORTIFICATION.match(perm, this)) { if (perm.getAttachedTo() != null) { Permanent land = getPermanent(perm.getAttachedTo()); if (land == null || !land.getAttachments().contains(perm.getId())) {