From d024d59626dbe3e81ebb97e3502f151112d6cbf9 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 27 Aug 2017 00:31:52 +0200 Subject: [PATCH 1/5] * Some changes to chat and user handling. --- .../src/main/java/mage/utils/MageVersion.java | 2 +- .../main/java/mage/server/ChatManager.java | 22 +++++++++---------- .../src/main/java/mage/server/User.java | 2 ++ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Mage.Common/src/main/java/mage/utils/MageVersion.java b/Mage.Common/src/main/java/mage/utils/MageVersion.java index be588e85f2..5d12136081 100644 --- a/Mage.Common/src/main/java/mage/utils/MageVersion.java +++ b/Mage.Common/src/main/java/mage/utils/MageVersion.java @@ -41,7 +41,7 @@ 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 = 26; - public final static String MAGE_VERSION_MINOR_PATCH = "V1"; + public final static String MAGE_VERSION_MINOR_PATCH = "V2"; public final static String MAGE_VERSION_INFO = ""; private final int major; diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java index ac5f818ee7..1fdebab217 100644 --- a/Mage.Server/src/main/java/mage/server/ChatManager.java +++ b/Mage.Server/src/main/java/mage/server/ChatManager.java @@ -86,19 +86,17 @@ public enum ChatManager { if (chatId != null) { ChatSession chatSession = chatSessions.get(chatId); if (chatSession != null) { - synchronized (chatSession) { - if (chatSessions.containsKey(chatId)) { - final Lock w = lock.writeLock(); - w.lock(); - try { - chatSessions.remove(chatId); - } finally { - w.unlock(); - } - logger.trace("Chat removed - chatId: " + chatId); - } else { - logger.trace("Chat to destroy does not exist - chatId: " + chatId); + if (chatSessions.containsKey(chatId)) { + final Lock w = lock.writeLock(); + w.lock(); + try { + chatSessions.remove(chatId); + } finally { + w.unlock(); } + logger.trace("Chat removed - chatId: " + chatId); + } else { + logger.trace("Chat to destroy does not exist - chatId: " + chatId); } } } diff --git a/Mage.Server/src/main/java/mage/server/User.java b/Mage.Server/src/main/java/mage/server/User.java index a176a9bd04..817ad3b313 100644 --- a/Mage.Server/src/main/java/mage/server/User.java +++ b/Mage.Server/src/main/java/mage/server/User.java @@ -386,6 +386,8 @@ public class User { if (controller.isPresent()) { ccSideboard(entry.getValue(), entry.getKey(), controller.get().getRemainingTime(), controller.get().getOptions().isLimited()); } else { + // Table is missing after connection was lost during sideboard. + // Means other players were removed or conceded the game? logger.error("sideboarding id not found : " + entry.getKey()); } } From f35eee935cd222dfbfeaf0ad09d380ef5103dccc Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 27 Aug 2017 08:04:18 +0200 Subject: [PATCH 2/5] * XMage 1.4.26V2 --- Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java | 6 +++--- .../src/main/java/mage/cards/repository/CardRepository.java | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java b/Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java index ba80466b1c..6a039d3def 100644 --- a/Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java +++ b/Mage.Sets/src/mage/cards/s/StarfieldOfNyx.java @@ -76,7 +76,7 @@ public class StarfieldOfNyx extends CardImpl { } public StarfieldOfNyx(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{4}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{4}{W}"); // At the beginning of your upkeep, you may return target enchantment card from your graveyard to the battlefield. Ability ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, @@ -112,7 +112,7 @@ class StarfieldOfNyxEffect extends ContinuousEffectImpl { public StarfieldOfNyxEffect() { super(Duration.WhileOnBattlefield, Outcome.BecomeCreature); - staticText = "Each other non-Aura enchantment is a creature in addition to its other types and has base power and toughness each equal to its converted mana cost"; + staticText = "Each other non-Aura enchantment you control is a creature in addition to its other types and has base power and toughness each equal to its converted mana cost"; } public StarfieldOfNyxEffect(final StarfieldOfNyxEffect effect) { @@ -162,7 +162,7 @@ class StarfieldOfNyxEffect extends ContinuousEffectImpl { public Set isDependentTo(List allEffectsInLayer) { return allEffectsInLayer .stream() - .filter(effect->effect.getDependencyTypes().contains(DependencyType.AuraAddingRemoving)) + .filter(effect -> effect.getDependencyTypes().contains(DependencyType.AuraAddingRemoving)) .map(Effect::getId) .collect(Collectors.toSet()); diff --git a/Mage/src/main/java/mage/cards/repository/CardRepository.java b/Mage/src/main/java/mage/cards/repository/CardRepository.java index 8f48467e91..7889341d5a 100644 --- a/Mage/src/main/java/mage/cards/repository/CardRepository.java +++ b/Mage/src/main/java/mage/cards/repository/CardRepository.java @@ -58,8 +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 = 87; - private final TreeSet landTypes = new TreeSet<>(); + private static final long CARD_CONTENT_VERSION = 89; private Dao cardDao; private Set classNames; From 884b6919c4a8b865445e73b91415c07096d274b2 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 27 Aug 2017 10:14:46 +0200 Subject: [PATCH 3/5] * Bloodforge Battle-Axe (C17) - Fixed wrong card name renamed Bloodforge War Axe to Bloodforge Battle-Axe. --- ...dWarAxe.java => BloodforgedBattleAxe.java} | 22 +- Mage.Sets/src/mage/sets/Commander2017.java | 206 +++++++++--------- 2 files changed, 114 insertions(+), 114 deletions(-) rename Mage.Sets/src/mage/cards/b/{BloodforgedWarAxe.java => BloodforgedBattleAxe.java} (85%) diff --git a/Mage.Sets/src/mage/cards/b/BloodforgedWarAxe.java b/Mage.Sets/src/mage/cards/b/BloodforgedBattleAxe.java similarity index 85% rename from Mage.Sets/src/mage/cards/b/BloodforgedWarAxe.java rename to Mage.Sets/src/mage/cards/b/BloodforgedBattleAxe.java index d71f0f9cd1..500f03a6d2 100644 --- a/Mage.Sets/src/mage/cards/b/BloodforgedWarAxe.java +++ b/Mage.Sets/src/mage/cards/b/BloodforgedBattleAxe.java @@ -48,9 +48,9 @@ import mage.game.permanent.Permanent; * * @author TheElk801 */ -public class BloodforgedWarAxe extends CardImpl { +public class BloodforgedBattleAxe extends CardImpl { - public BloodforgedWarAxe(UUID ownerId, CardSetInfo setInfo) { + public BloodforgedBattleAxe(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{1}"); this.subtype.add("Equipment"); @@ -59,36 +59,36 @@ public class BloodforgedWarAxe extends CardImpl { this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEquippedEffect(2, 0))); // Whenever equipped creature deals combat damage to a player, create a token that's a copy of Bloodforged War Axe. - this.addAbility(new BloodforgedWarAxeAbility()); + this.addAbility(new BloodforgedBattleAxeAbility()); // Equip 2 this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(2))); } - public BloodforgedWarAxe(final BloodforgedWarAxe card) { + public BloodforgedBattleAxe(final BloodforgedBattleAxe card) { super(card); } @Override - public BloodforgedWarAxe copy() { - return new BloodforgedWarAxe(this); + public BloodforgedBattleAxe copy() { + return new BloodforgedBattleAxe(this); } } -class BloodforgedWarAxeAbility extends TriggeredAbilityImpl { +class BloodforgedBattleAxeAbility extends TriggeredAbilityImpl { - public BloodforgedWarAxeAbility() { + public BloodforgedBattleAxeAbility() { super(Zone.BATTLEFIELD, new PutTokenOntoBattlefieldCopySourceEffect()); } - public BloodforgedWarAxeAbility(final BloodforgedWarAxeAbility ability) { + public BloodforgedBattleAxeAbility(final BloodforgedBattleAxeAbility ability) { super(ability); } @Override - public BloodforgedWarAxeAbility copy() { - return new BloodforgedWarAxeAbility(this); + public BloodforgedBattleAxeAbility copy() { + return new BloodforgedBattleAxeAbility(this); } @Override diff --git a/Mage.Sets/src/mage/sets/Commander2017.java b/Mage.Sets/src/mage/sets/Commander2017.java index 3f26ef6785..85676e74e0 100644 --- a/Mage.Sets/src/mage/sets/Commander2017.java +++ b/Mage.Sets/src/mage/sets/Commander2017.java @@ -1,103 +1,103 @@ -/* - * 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.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author fireshoes - */ -public class Commander2017 extends ExpansionSet { - - private static final Commander2017 instance = new Commander2017(); - - public static Commander2017 getInstance() { - return instance; - } - - private Commander2017() { - super("Commander 2017 Edition", "C17", ExpansionSet.buildDate(2017, 8, 25), SetType.SUPPLEMENTAL); - this.blockName = "Command Zone"; - - cards.add(new SetCardInfo("Arahbo, Roar of the World", 35, Rarity.MYTHIC, mage.cards.a.ArahboRoarOfTheWorld.class)); - cards.add(new SetCardInfo("Balan, Wandering Knight", 2, Rarity.RARE, mage.cards.b.BalanWanderingKnight.class)); - cards.add(new SetCardInfo("Bloodforged War Axe", 50, Rarity.RARE, mage.cards.b.BloodforgedWarAxe.class)); - cards.add(new SetCardInfo("Bloodline Necromancer", 14, Rarity.UNCOMMON, mage.cards.b.BloodlineNecromancer.class)); - cards.add(new SetCardInfo("Bloodsworn Steward", 22, Rarity.RARE, mage.cards.b.BloodswornSteward.class)); - cards.add(new SetCardInfo("Boneyard Scourge", 15, Rarity.RARE, mage.cards.b.BoneyardScourge.class)); - cards.add(new SetCardInfo("Crimson Honor Guard", 23, Rarity.RARE, mage.cards.c.CrimsonHonorGuard.class)); - cards.add(new SetCardInfo("Curse of Bounty", 30, Rarity.UNCOMMON, mage.cards.c.CurseOfBounty.class)); - cards.add(new SetCardInfo("Curse of Disturbance", 16, Rarity.UNCOMMON, mage.cards.c.CurseOfDisturbance.class)); - cards.add(new SetCardInfo("Curse of Opulence", 24, Rarity.UNCOMMON, mage.cards.c.CurseOfOpulence.class)); - cards.add(new SetCardInfo("Curse of Verbosity", 9, Rarity.UNCOMMON, mage.cards.c.CurseOfVerbosity.class)); - cards.add(new SetCardInfo("Curse of Vitality", 3, Rarity.UNCOMMON, mage.cards.c.CurseOfVitality.class)); - cards.add(new SetCardInfo("Disrupt Decorum", 25, Rarity.RARE, mage.cards.d.DisruptDecorum.class)); - cards.add(new SetCardInfo("Edgar Markov", 36, Rarity.MYTHIC, mage.cards.e.EdgarMarkov.class)); - cards.add(new SetCardInfo("Fortunate Few", 4, Rarity.RARE, mage.cards.f.FortunateFew.class)); - cards.add(new SetCardInfo("Fractured Identity", 37, Rarity.RARE, mage.cards.f.FracturedIdentity.class)); - cards.add(new SetCardInfo("Galecaster Colossus", 10, Rarity.RARE, mage.cards.g.GalecasterColossus.class)); - cards.add(new SetCardInfo("Hammer of Nazahn", 51, Rarity.RARE, mage.cards.h.HammerOfNazahn.class)); - cards.add(new SetCardInfo("Herald's Horn", 53, Rarity.UNCOMMON, mage.cards.h.HeraldsHorn.class)); - cards.add(new SetCardInfo("Heirloom Blade", 52, Rarity.UNCOMMON, mage.cards.h.HeirloomBlade.class)); - cards.add(new SetCardInfo("Hungry Lynx", 31, Rarity.RARE, mage.cards.h.HungryLynx.class)); - cards.add(new SetCardInfo("Inalla, Archmage Ritualist", 38, Rarity.MYTHIC, mage.cards.i.InallaArchmageRitualist.class)); - cards.add(new SetCardInfo("Izzet Chemister", 26, Rarity.RARE, mage.cards.i.IzzetChemister.class)); - cards.add(new SetCardInfo("Kess, Dissident Mage", 39, Rarity.MYTHIC, mage.cards.k.KessDissidentMage.class)); - cards.add(new SetCardInfo("Kheru Mind-Eater", 17, Rarity.RARE, mage.cards.k.KheruMindEater.class)); - cards.add(new SetCardInfo("Kindred Boon", 5, Rarity.RARE, mage.cards.k.KindredBoon.class)); - cards.add(new SetCardInfo("Kindred Charge", 27, Rarity.RARE, mage.cards.k.KindredCharge.class)); - cards.add(new SetCardInfo("Kindred Discovery", 11, Rarity.RARE, mage.cards.k.KindredDiscovery.class)); - cards.add(new SetCardInfo("Kindred Dominance", 18, Rarity.RARE, mage.cards.k.KindredDominance.class)); - cards.add(new SetCardInfo("Kindred Summons", 32, Rarity.RARE, mage.cards.k.KindredSummons.class)); - cards.add(new SetCardInfo("Licia, Sanguine Tribune", 40, Rarity.MYTHIC, mage.cards.l.LiciaSanguineTribune.class)); - cards.add(new SetCardInfo("Magus of the Mind", 12, Rarity.RARE, mage.cards.m.MagusOfTheMind.class)); - cards.add(new SetCardInfo("Mairsil, the Pretender", 41, Rarity.MYTHIC, mage.cards.m.MairsilThePretender.class)); - cards.add(new SetCardInfo("Mathas, Fiend Seeker", 42, Rarity.MYTHIC, mage.cards.m.MathasFiendSeeker.class)); - cards.add(new SetCardInfo("Mirri, Weatherlight Duelist", 43, Rarity.MYTHIC, mage.cards.m.MirriWeatherlightDuelist.class)); - cards.add(new SetCardInfo("Mirror of the Forebears", 54, Rarity.UNCOMMON, mage.cards.m.MirrorOfTheForebears.class)); - cards.add(new SetCardInfo("Nazahn, Revered Bladesmith", 44, Rarity.MYTHIC, mage.cards.n.NazahnReveredBladesmith.class)); - cards.add(new SetCardInfo("O-Kagachi, Vengeful Kami", 45, Rarity.MYTHIC, mage.cards.o.OKagachiVengefulKami.class)); - cards.add(new SetCardInfo("Path of Ancestry", 56, Rarity.COMMON, mage.cards.p.PathOfAncestry.class)); - cards.add(new SetCardInfo("Patron of the Vein", 20, Rarity.RARE, mage.cards.p.PatronOfTheVein.class)); - cards.add(new SetCardInfo("Qasali Slingers", 33, Rarity.RARE, mage.cards.q.QasaliSlingers.class)); - cards.add(new SetCardInfo("Ramos, Dragon Engine", 55, Rarity.MYTHIC, mage.cards.r.RamosDragonEngine.class)); - cards.add(new SetCardInfo("Scalelord Reckoner", 6, Rarity.RARE, mage.cards.s.ScalelordReckoner.class)); - cards.add(new SetCardInfo("Shifting Shadow", 28, Rarity.RARE, mage.cards.s.ShiftingShadow.class)); - cards.add(new SetCardInfo("Taigam, Ojutai Master", 46, Rarity.MYTHIC, mage.cards.t.TaigamOjutaiMaster.class)); - cards.add(new SetCardInfo("Taigam, Sidisi's Hand", 47, Rarity.RARE, mage.cards.t.TaigamSidisisHand.class)); - cards.add(new SetCardInfo("Teferi's Protection", 8, Rarity.RARE, mage.cards.t.TeferisProtection.class)); - cards.add(new SetCardInfo("Territorial Hellkite", 29, Rarity.RARE, mage.cards.t.TerritorialHellkite.class)); - cards.add(new SetCardInfo("The Ur-Dragon", 48, Rarity.MYTHIC, mage.cards.t.TheUrDragon.class)); - cards.add(new SetCardInfo("Traverse the Outlands", 34, Rarity.RARE, mage.cards.t.TraverseTheOutlands.class)); - cards.add(new SetCardInfo("Vindictive Lich", 21, Rarity.RARE, mage.cards.v.VindictiveLich.class)); - cards.add(new SetCardInfo("Wasitora, Nekoru Queen", 49, Rarity.MYTHIC, mage.cards.w.WasitoraNekoruQueen.class)); - } -} \ No newline at end of file +/* + * 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.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author fireshoes + */ +public class Commander2017 extends ExpansionSet { + + private static final Commander2017 instance = new Commander2017(); + + public static Commander2017 getInstance() { + return instance; + } + + private Commander2017() { + super("Commander 2017 Edition", "C17", ExpansionSet.buildDate(2017, 8, 25), SetType.SUPPLEMENTAL); + this.blockName = "Command Zone"; + + cards.add(new SetCardInfo("Arahbo, Roar of the World", 35, Rarity.MYTHIC, mage.cards.a.ArahboRoarOfTheWorld.class)); + cards.add(new SetCardInfo("Balan, Wandering Knight", 2, Rarity.RARE, mage.cards.b.BalanWanderingKnight.class)); + cards.add(new SetCardInfo("Bloodforged Battle-Axe", 50, Rarity.RARE, mage.cards.b.BloodforgedBattleAxe.class)); + cards.add(new SetCardInfo("Bloodline Necromancer", 14, Rarity.UNCOMMON, mage.cards.b.BloodlineNecromancer.class)); + cards.add(new SetCardInfo("Bloodsworn Steward", 22, Rarity.RARE, mage.cards.b.BloodswornSteward.class)); + cards.add(new SetCardInfo("Boneyard Scourge", 15, Rarity.RARE, mage.cards.b.BoneyardScourge.class)); + cards.add(new SetCardInfo("Crimson Honor Guard", 23, Rarity.RARE, mage.cards.c.CrimsonHonorGuard.class)); + cards.add(new SetCardInfo("Curse of Bounty", 30, Rarity.UNCOMMON, mage.cards.c.CurseOfBounty.class)); + cards.add(new SetCardInfo("Curse of Disturbance", 16, Rarity.UNCOMMON, mage.cards.c.CurseOfDisturbance.class)); + cards.add(new SetCardInfo("Curse of Opulence", 24, Rarity.UNCOMMON, mage.cards.c.CurseOfOpulence.class)); + cards.add(new SetCardInfo("Curse of Verbosity", 9, Rarity.UNCOMMON, mage.cards.c.CurseOfVerbosity.class)); + cards.add(new SetCardInfo("Curse of Vitality", 3, Rarity.UNCOMMON, mage.cards.c.CurseOfVitality.class)); + cards.add(new SetCardInfo("Disrupt Decorum", 25, Rarity.RARE, mage.cards.d.DisruptDecorum.class)); + cards.add(new SetCardInfo("Edgar Markov", 36, Rarity.MYTHIC, mage.cards.e.EdgarMarkov.class)); + cards.add(new SetCardInfo("Fortunate Few", 4, Rarity.RARE, mage.cards.f.FortunateFew.class)); + cards.add(new SetCardInfo("Fractured Identity", 37, Rarity.RARE, mage.cards.f.FracturedIdentity.class)); + cards.add(new SetCardInfo("Galecaster Colossus", 10, Rarity.RARE, mage.cards.g.GalecasterColossus.class)); + cards.add(new SetCardInfo("Hammer of Nazahn", 51, Rarity.RARE, mage.cards.h.HammerOfNazahn.class)); + cards.add(new SetCardInfo("Herald's Horn", 53, Rarity.UNCOMMON, mage.cards.h.HeraldsHorn.class)); + cards.add(new SetCardInfo("Heirloom Blade", 52, Rarity.UNCOMMON, mage.cards.h.HeirloomBlade.class)); + cards.add(new SetCardInfo("Hungry Lynx", 31, Rarity.RARE, mage.cards.h.HungryLynx.class)); + cards.add(new SetCardInfo("Inalla, Archmage Ritualist", 38, Rarity.MYTHIC, mage.cards.i.InallaArchmageRitualist.class)); + cards.add(new SetCardInfo("Izzet Chemister", 26, Rarity.RARE, mage.cards.i.IzzetChemister.class)); + cards.add(new SetCardInfo("Kess, Dissident Mage", 39, Rarity.MYTHIC, mage.cards.k.KessDissidentMage.class)); + cards.add(new SetCardInfo("Kheru Mind-Eater", 17, Rarity.RARE, mage.cards.k.KheruMindEater.class)); + cards.add(new SetCardInfo("Kindred Boon", 5, Rarity.RARE, mage.cards.k.KindredBoon.class)); + cards.add(new SetCardInfo("Kindred Charge", 27, Rarity.RARE, mage.cards.k.KindredCharge.class)); + cards.add(new SetCardInfo("Kindred Discovery", 11, Rarity.RARE, mage.cards.k.KindredDiscovery.class)); + cards.add(new SetCardInfo("Kindred Dominance", 18, Rarity.RARE, mage.cards.k.KindredDominance.class)); + cards.add(new SetCardInfo("Kindred Summons", 32, Rarity.RARE, mage.cards.k.KindredSummons.class)); + cards.add(new SetCardInfo("Licia, Sanguine Tribune", 40, Rarity.MYTHIC, mage.cards.l.LiciaSanguineTribune.class)); + cards.add(new SetCardInfo("Magus of the Mind", 12, Rarity.RARE, mage.cards.m.MagusOfTheMind.class)); + cards.add(new SetCardInfo("Mairsil, the Pretender", 41, Rarity.MYTHIC, mage.cards.m.MairsilThePretender.class)); + cards.add(new SetCardInfo("Mathas, Fiend Seeker", 42, Rarity.MYTHIC, mage.cards.m.MathasFiendSeeker.class)); + cards.add(new SetCardInfo("Mirri, Weatherlight Duelist", 43, Rarity.MYTHIC, mage.cards.m.MirriWeatherlightDuelist.class)); + cards.add(new SetCardInfo("Mirror of the Forebears", 54, Rarity.UNCOMMON, mage.cards.m.MirrorOfTheForebears.class)); + cards.add(new SetCardInfo("Nazahn, Revered Bladesmith", 44, Rarity.MYTHIC, mage.cards.n.NazahnReveredBladesmith.class)); + cards.add(new SetCardInfo("O-Kagachi, Vengeful Kami", 45, Rarity.MYTHIC, mage.cards.o.OKagachiVengefulKami.class)); + cards.add(new SetCardInfo("Path of Ancestry", 56, Rarity.COMMON, mage.cards.p.PathOfAncestry.class)); + cards.add(new SetCardInfo("Patron of the Vein", 20, Rarity.RARE, mage.cards.p.PatronOfTheVein.class)); + cards.add(new SetCardInfo("Qasali Slingers", 33, Rarity.RARE, mage.cards.q.QasaliSlingers.class)); + cards.add(new SetCardInfo("Ramos, Dragon Engine", 55, Rarity.MYTHIC, mage.cards.r.RamosDragonEngine.class)); + cards.add(new SetCardInfo("Scalelord Reckoner", 6, Rarity.RARE, mage.cards.s.ScalelordReckoner.class)); + cards.add(new SetCardInfo("Shifting Shadow", 28, Rarity.RARE, mage.cards.s.ShiftingShadow.class)); + cards.add(new SetCardInfo("Taigam, Ojutai Master", 46, Rarity.MYTHIC, mage.cards.t.TaigamOjutaiMaster.class)); + cards.add(new SetCardInfo("Taigam, Sidisi's Hand", 47, Rarity.RARE, mage.cards.t.TaigamSidisisHand.class)); + cards.add(new SetCardInfo("Teferi's Protection", 8, Rarity.RARE, mage.cards.t.TeferisProtection.class)); + cards.add(new SetCardInfo("Territorial Hellkite", 29, Rarity.RARE, mage.cards.t.TerritorialHellkite.class)); + cards.add(new SetCardInfo("The Ur-Dragon", 48, Rarity.MYTHIC, mage.cards.t.TheUrDragon.class)); + cards.add(new SetCardInfo("Traverse the Outlands", 34, Rarity.RARE, mage.cards.t.TraverseTheOutlands.class)); + cards.add(new SetCardInfo("Vindictive Lich", 21, Rarity.RARE, mage.cards.v.VindictiveLich.class)); + cards.add(new SetCardInfo("Wasitora, Nekoru Queen", 49, Rarity.MYTHIC, mage.cards.w.WasitoraNekoruQueen.class)); + } +} From 7e8dcef1204d50c5242d89d975b5f904b434cf5d Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 27 Aug 2017 10:57:14 +0200 Subject: [PATCH 4/5] C17 added Seth's Tiger. --- Mage.Sets/src/mage/cards/f/FaithsShield.java | 32 +- Mage.Sets/src/mage/cards/s/SehtsTiger.java | 125 +++++ Mage.Sets/src/mage/sets/FutureSight.java | 445 +++++++++--------- .../main/java/mage/players/PlayerImpl.java | 2 +- 4 files changed, 366 insertions(+), 238 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/s/SehtsTiger.java diff --git a/Mage.Sets/src/mage/cards/f/FaithsShield.java b/Mage.Sets/src/mage/cards/f/FaithsShield.java index 1d290833c4..f1465e3820 100644 --- a/Mage.Sets/src/mage/cards/f/FaithsShield.java +++ b/Mage.Sets/src/mage/cards/f/FaithsShield.java @@ -28,6 +28,7 @@ package mage.cards.f; import java.util.UUID; +import mage.MageObject; import mage.abilities.Ability; import mage.abilities.condition.common.FatefulHourCondition; import mage.abilities.effects.OneShotEffect; @@ -54,11 +55,9 @@ import mage.target.common.TargetControlledPermanent; public class FaithsShield extends CardImpl { public FaithsShield(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.INSTANT},"{W}"); - + super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{W}"); // Target permanent you control gains protection from the color of your choice until end of turn. - // Fateful hour - If you have 5 or less life, instead you and each permanent you control gain protection from the color of your choice until end of turn. this.getSpellAbility().addEffect(new FaithsShieldEffect()); this.getSpellAbility().addTarget(new TargetControlledPermanent()); @@ -79,7 +78,7 @@ class FaithsShieldEffect extends OneShotEffect { public FaithsShieldEffect() { super(Outcome.Protect); staticText = "Target permanent you control gains protection from the color of your choice until end of turn." - + "

Fateful hour - If you have 5 or less life, instead you and each permanent you control gain protection from the color of your choice until end of turn"; + + "

Fateful hour - If you have 5 or less life, instead you and each permanent you control gain protection from the color of your choice until end of turn"; } public FaithsShieldEffect(final FaithsShieldEffect effect) { @@ -89,7 +88,8 @@ class FaithsShieldEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { + MageObject mageObject = game.getObject(source.getSourceId()); + if (controller != null && mageObject != null) { if (FatefulHourCondition.instance.apply(game, source)) { ChoiceColor choice = new ChoiceColor(); while (!choice.isChosen()) { @@ -98,18 +98,20 @@ class FaithsShieldEffect extends OneShotEffect { return false; } } - FilterCard filter = new FilterCard(); - filter.add(new ColorPredicate(choice.getColor())); - filter.setMessage(choice.getChoice()); - - Ability ability = new ProtectionAbility(filter) ; - game.addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn), source); - game.addEffect(new GainAbilityControllerEffect(ability, Duration.EndOfTurn), source); - } - else { + if (choice.getColor() != null) { + game.informPlayers(mageObject.getLogName() + ": " + controller.getLogName() + " has chosen " + choice.getChoice()); + FilterCard filter = new FilterCard(); + filter.add(new ColorPredicate(choice.getColor())); + filter.setMessage(choice.getChoice()); + Ability ability = new ProtectionAbility(filter); + game.addEffect(new GainAbilityControlledEffect(ability, Duration.EndOfTurn), source); + game.addEffect(new GainAbilityControllerEffect(ability, Duration.EndOfTurn), source); + return true; + } + } else { game.addEffect(new GainProtectionFromColorTargetEffect(Duration.EndOfTurn), source); + return true; } - return true; } return false; diff --git a/Mage.Sets/src/mage/cards/s/SehtsTiger.java b/Mage.Sets/src/mage/cards/s/SehtsTiger.java new file mode 100644 index 0000000000..c04c8ebbb8 --- /dev/null +++ b/Mage.Sets/src/mage/cards/s/SehtsTiger.java @@ -0,0 +1,125 @@ +/* + * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of BetaSteward_at_googlemail.com. + */ +package mage.cards.s; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.GainAbilityControllerEffect; +import mage.abilities.keyword.FlashAbility; +import mage.abilities.keyword.ProtectionAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.choices.ChoiceColor; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.SubType; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author LevelX2 + */ +public class SehtsTiger extends CardImpl { + + public SehtsTiger(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); + + this.subtype.add(SubType.CAT); + this.power = new MageInt(3); + this.toughness = new MageInt(3); + + // Flash + this.addAbility(FlashAbility.getInstance()); + + // When Seht's Tiger enters the battlefield, you gain protection from the color of your choice until end of turn. + // (You can't be targeted, dealt damage, or enchanted by anything of the chosen color.) + this.addAbility(new EntersBattlefieldTriggeredAbility(new SehtsTigerEffect(), false)); + + } + + public SehtsTiger(final SehtsTiger card) { + super(card); + } + + @Override + public SehtsTiger copy() { + return new SehtsTiger(this); + } +} + +class SehtsTigerEffect extends OneShotEffect { + + public SehtsTigerEffect() { + super(Outcome.Protect); + staticText = "you gain protection from the color of your choice until end of turn (You can't be targeted, dealt damage, or enchanted by anything of the chosen color.)"; + } + + public SehtsTigerEffect(final SehtsTigerEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject mageObject = game.getObject(source.getSourceId()); + if (controller != null && mageObject != null) { + ChoiceColor choice = new ChoiceColor(); + while (!choice.isChosen()) { + controller.choose(Outcome.Protect, choice, game); + if (!controller.canRespond()) { + return false; + } + } + if (choice.getColor() != null) { + game.informPlayers(mageObject.getLogName() + ": " + controller.getLogName() + " has chosen " + choice.getChoice()); + FilterCard filter = new FilterCard(); + filter.add(new ColorPredicate(choice.getColor())); + filter.setMessage(choice.getChoice()); + Ability ability = new ProtectionAbility(filter); + game.addEffect(new GainAbilityControllerEffect(ability, Duration.EndOfTurn), source); + return true; + } + + } + return false; + } + + @Override + public SehtsTigerEffect copy() { + return new SehtsTigerEffect(this); + } + +} diff --git a/Mage.Sets/src/mage/sets/FutureSight.java b/Mage.Sets/src/mage/sets/FutureSight.java index 067096f78a..b36d3af419 100644 --- a/Mage.Sets/src/mage/sets/FutureSight.java +++ b/Mage.Sets/src/mage/sets/FutureSight.java @@ -1,224 +1,225 @@ -/* - * 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.sets; - -import mage.cards.ExpansionSet; -import mage.constants.Rarity; -import mage.constants.SetType; - -/** - * - * @author North - */ -public class FutureSight extends ExpansionSet { - - private static final FutureSight instance = new FutureSight(); - - public static FutureSight getInstance() { - return instance; - } - - private FutureSight() { - super("Future Sight", "FUT", ExpansionSet.buildDate(2007, 4, 4), SetType.EXPANSION); - this.blockName = "Time Spiral"; - this.parentSet = TimeSpiral.getInstance(); - this.hasBasicLands = false; - this.hasBoosters = true; - this.numBoosterLands = 0; - this.numBoosterCommon = 11; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 0; - cards.add(new SetCardInfo("Akroma's Memorial", 159, Rarity.RARE, mage.cards.a.AkromasMemorial.class)); - cards.add(new SetCardInfo("Angel of Salvation", 1, Rarity.RARE, mage.cards.a.AngelOfSalvation.class)); - cards.add(new SetCardInfo("Arcanum Wings", 48, Rarity.UNCOMMON, mage.cards.a.ArcanumWings.class)); - cards.add(new SetCardInfo("Arc Blade", 94, Rarity.UNCOMMON, mage.cards.a.ArcBlade.class)); - cards.add(new SetCardInfo("Augur il-Vec", 2, Rarity.COMMON, mage.cards.a.AugurIlVec.class)); - cards.add(new SetCardInfo("Augur of Skulls", 63, Rarity.COMMON, mage.cards.a.AugurOfSkulls.class)); - cards.add(new SetCardInfo("Aven Augur", 32, Rarity.COMMON, mage.cards.a.AvenAugur.class)); - cards.add(new SetCardInfo("Aven Mindcensor", 18, Rarity.UNCOMMON, mage.cards.a.AvenMindcensor.class)); - cards.add(new SetCardInfo("Barren Glory", 3, Rarity.RARE, mage.cards.b.BarrenGlory.class)); - cards.add(new SetCardInfo("Baru, Fist of Krosa", 142, Rarity.RARE, mage.cards.b.BaruFistOfKrosa.class)); - cards.add(new SetCardInfo("Bitter Ordeal", 80, Rarity.RARE, mage.cards.b.BitterOrdeal.class)); - cards.add(new SetCardInfo("Blade of the Sixth Pride", 19, Rarity.COMMON, mage.cards.b.BladeOfTheSixthPride.class)); - cards.add(new SetCardInfo("Blind Phantasm", 49, Rarity.COMMON, mage.cards.b.BlindPhantasm.class)); - cards.add(new SetCardInfo("Bloodshot Trainee", 110, Rarity.UNCOMMON, mage.cards.b.BloodshotTrainee.class)); - cards.add(new SetCardInfo("Bogardan Lancer", 95, Rarity.COMMON, mage.cards.b.BogardanLancer.class)); - cards.add(new SetCardInfo("Boldwyr Intimidator", 111, Rarity.UNCOMMON, mage.cards.b.BoldwyrIntimidator.class)); - cards.add(new SetCardInfo("Bonded Fetch", 50, Rarity.UNCOMMON, mage.cards.b.BondedFetch.class)); - cards.add(new SetCardInfo("Bound in Silence", 20, Rarity.UNCOMMON, mage.cards.b.BoundInSilence.class)); - cards.add(new SetCardInfo("Bridge from Below", 81, Rarity.RARE, mage.cards.b.BridgeFromBelow.class)); - cards.add(new SetCardInfo("Centaur Omenreader", 143, Rarity.UNCOMMON, mage.cards.c.CentaurOmenreader.class)); - cards.add(new SetCardInfo("Char-Rumbler", 96, Rarity.UNCOMMON, mage.cards.c.CharRumbler.class)); - cards.add(new SetCardInfo("Chronomantic Escape", 4, Rarity.UNCOMMON, mage.cards.c.ChronomanticEscape.class)); - cards.add(new SetCardInfo("Cloud Key", 160, Rarity.RARE, mage.cards.c.CloudKey.class)); - cards.add(new SetCardInfo("Cloudseeder", 33, Rarity.UNCOMMON, mage.cards.c.Cloudseeder.class)); - cards.add(new SetCardInfo("Coalition Relic", 161, Rarity.RARE, mage.cards.c.CoalitionRelic.class)); - cards.add(new SetCardInfo("Cryptic Annelid", 34, Rarity.UNCOMMON, mage.cards.c.CrypticAnnelid.class)); - cards.add(new SetCardInfo("Cutthroat il-Dal", 64, Rarity.COMMON, mage.cards.c.CutthroatIlDal.class)); - cards.add(new SetCardInfo("Cyclical Evolution", 125, Rarity.UNCOMMON, mage.cards.c.CyclicalEvolution.class)); - cards.add(new SetCardInfo("Dakmor Salvage", 169, Rarity.UNCOMMON, mage.cards.d.DakmorSalvage.class)); +/* + * 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.sets; + +import mage.cards.ExpansionSet; +import mage.constants.Rarity; +import mage.constants.SetType; + +/** + * + * @author North + */ +public class FutureSight extends ExpansionSet { + + private static final FutureSight instance = new FutureSight(); + + public static FutureSight getInstance() { + return instance; + } + + private FutureSight() { + super("Future Sight", "FUT", ExpansionSet.buildDate(2007, 4, 4), SetType.EXPANSION); + this.blockName = "Time Spiral"; + this.parentSet = TimeSpiral.getInstance(); + this.hasBasicLands = false; + this.hasBoosters = true; + this.numBoosterLands = 0; + this.numBoosterCommon = 11; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 0; + cards.add(new SetCardInfo("Akroma's Memorial", 159, Rarity.RARE, mage.cards.a.AkromasMemorial.class)); + cards.add(new SetCardInfo("Angel of Salvation", 1, Rarity.RARE, mage.cards.a.AngelOfSalvation.class)); + cards.add(new SetCardInfo("Arcanum Wings", 48, Rarity.UNCOMMON, mage.cards.a.ArcanumWings.class)); + cards.add(new SetCardInfo("Arc Blade", 94, Rarity.UNCOMMON, mage.cards.a.ArcBlade.class)); + cards.add(new SetCardInfo("Augur il-Vec", 2, Rarity.COMMON, mage.cards.a.AugurIlVec.class)); + cards.add(new SetCardInfo("Augur of Skulls", 63, Rarity.COMMON, mage.cards.a.AugurOfSkulls.class)); + cards.add(new SetCardInfo("Aven Augur", 32, Rarity.COMMON, mage.cards.a.AvenAugur.class)); + cards.add(new SetCardInfo("Aven Mindcensor", 18, Rarity.UNCOMMON, mage.cards.a.AvenMindcensor.class)); + cards.add(new SetCardInfo("Barren Glory", 3, Rarity.RARE, mage.cards.b.BarrenGlory.class)); + cards.add(new SetCardInfo("Baru, Fist of Krosa", 142, Rarity.RARE, mage.cards.b.BaruFistOfKrosa.class)); + cards.add(new SetCardInfo("Bitter Ordeal", 80, Rarity.RARE, mage.cards.b.BitterOrdeal.class)); + cards.add(new SetCardInfo("Blade of the Sixth Pride", 19, Rarity.COMMON, mage.cards.b.BladeOfTheSixthPride.class)); + cards.add(new SetCardInfo("Blind Phantasm", 49, Rarity.COMMON, mage.cards.b.BlindPhantasm.class)); + cards.add(new SetCardInfo("Bloodshot Trainee", 110, Rarity.UNCOMMON, mage.cards.b.BloodshotTrainee.class)); + cards.add(new SetCardInfo("Bogardan Lancer", 95, Rarity.COMMON, mage.cards.b.BogardanLancer.class)); + cards.add(new SetCardInfo("Boldwyr Intimidator", 111, Rarity.UNCOMMON, mage.cards.b.BoldwyrIntimidator.class)); + cards.add(new SetCardInfo("Bonded Fetch", 50, Rarity.UNCOMMON, mage.cards.b.BondedFetch.class)); + cards.add(new SetCardInfo("Bound in Silence", 20, Rarity.UNCOMMON, mage.cards.b.BoundInSilence.class)); + cards.add(new SetCardInfo("Bridge from Below", 81, Rarity.RARE, mage.cards.b.BridgeFromBelow.class)); + cards.add(new SetCardInfo("Centaur Omenreader", 143, Rarity.UNCOMMON, mage.cards.c.CentaurOmenreader.class)); + cards.add(new SetCardInfo("Char-Rumbler", 96, Rarity.UNCOMMON, mage.cards.c.CharRumbler.class)); + cards.add(new SetCardInfo("Chronomantic Escape", 4, Rarity.UNCOMMON, mage.cards.c.ChronomanticEscape.class)); + cards.add(new SetCardInfo("Cloud Key", 160, Rarity.RARE, mage.cards.c.CloudKey.class)); + cards.add(new SetCardInfo("Cloudseeder", 33, Rarity.UNCOMMON, mage.cards.c.Cloudseeder.class)); + cards.add(new SetCardInfo("Coalition Relic", 161, Rarity.RARE, mage.cards.c.CoalitionRelic.class)); + cards.add(new SetCardInfo("Cryptic Annelid", 34, Rarity.UNCOMMON, mage.cards.c.CrypticAnnelid.class)); + cards.add(new SetCardInfo("Cutthroat il-Dal", 64, Rarity.COMMON, mage.cards.c.CutthroatIlDal.class)); + cards.add(new SetCardInfo("Cyclical Evolution", 125, Rarity.UNCOMMON, mage.cards.c.CyclicalEvolution.class)); + cards.add(new SetCardInfo("Dakmor Salvage", 169, Rarity.UNCOMMON, mage.cards.d.DakmorSalvage.class)); cards.add(new SetCardInfo("Darksteel Garrison", 167, Rarity.RARE, mage.cards.d.DarksteelGarrison.class)); - cards.add(new SetCardInfo("Daybreak Coronet", 21, Rarity.RARE, mage.cards.d.DaybreakCoronet.class)); - cards.add(new SetCardInfo("Death Rattle", 82, Rarity.COMMON, mage.cards.d.DeathRattle.class)); - cards.add(new SetCardInfo("Deepcavern Imp", 83, Rarity.COMMON, mage.cards.d.DeepcavernImp.class)); - cards.add(new SetCardInfo("Delay", 35, Rarity.UNCOMMON, mage.cards.d.Delay.class)); - cards.add(new SetCardInfo("Dryad Arbor", 174, Rarity.UNCOMMON, mage.cards.d.DryadArbor.class)); - cards.add(new SetCardInfo("Dust of Moments", 5, Rarity.UNCOMMON, mage.cards.d.DustOfMoments.class)); - cards.add(new SetCardInfo("Edge of Autumn", 144, Rarity.COMMON, mage.cards.e.EdgeOfAutumn.class)); - cards.add(new SetCardInfo("Emberwilde Augur", 97, Rarity.COMMON, mage.cards.e.EmberwildeAugur.class)); - cards.add(new SetCardInfo("Emblem of the Warmind", 112, Rarity.UNCOMMON, mage.cards.e.EmblemOfTheWarmind.class)); - cards.add(new SetCardInfo("Epochrasite", 162, Rarity.RARE, mage.cards.e.Epochrasite.class)); + cards.add(new SetCardInfo("Daybreak Coronet", 21, Rarity.RARE, mage.cards.d.DaybreakCoronet.class)); + cards.add(new SetCardInfo("Death Rattle", 82, Rarity.COMMON, mage.cards.d.DeathRattle.class)); + cards.add(new SetCardInfo("Deepcavern Imp", 83, Rarity.COMMON, mage.cards.d.DeepcavernImp.class)); + cards.add(new SetCardInfo("Delay", 35, Rarity.UNCOMMON, mage.cards.d.Delay.class)); + cards.add(new SetCardInfo("Dryad Arbor", 174, Rarity.UNCOMMON, mage.cards.d.DryadArbor.class)); + cards.add(new SetCardInfo("Dust of Moments", 5, Rarity.UNCOMMON, mage.cards.d.DustOfMoments.class)); + cards.add(new SetCardInfo("Edge of Autumn", 144, Rarity.COMMON, mage.cards.e.EdgeOfAutumn.class)); + cards.add(new SetCardInfo("Emberwilde Augur", 97, Rarity.COMMON, mage.cards.e.EmberwildeAugur.class)); + cards.add(new SetCardInfo("Emblem of the Warmind", 112, Rarity.UNCOMMON, mage.cards.e.EmblemOfTheWarmind.class)); + cards.add(new SetCardInfo("Epochrasite", 162, Rarity.RARE, mage.cards.e.Epochrasite.class)); cards.add(new SetCardInfo("Fatal Attraction", 98, Rarity.COMMON, mage.cards.f.FatalAttraction.class)); - cards.add(new SetCardInfo("Festering March", 65, Rarity.UNCOMMON, mage.cards.f.FesteringMarch.class)); - cards.add(new SetCardInfo("Fleshwrither", 84, Rarity.UNCOMMON, mage.cards.f.Fleshwrither.class)); - cards.add(new SetCardInfo("Flowstone Embrace", 113, Rarity.COMMON, mage.cards.f.FlowstoneEmbrace.class)); - cards.add(new SetCardInfo("Fomori Nomad", 114, Rarity.COMMON, mage.cards.f.FomoriNomad.class)); - cards.add(new SetCardInfo("Force of Savagery", 126, Rarity.RARE, mage.cards.f.ForceOfSavagery.class)); - cards.add(new SetCardInfo("Foresee", 36, Rarity.COMMON, mage.cards.f.Foresee.class)); - cards.add(new SetCardInfo("Frenzy Sliver", 85, Rarity.COMMON, mage.cards.f.FrenzySliver.class)); - cards.add(new SetCardInfo("Gathan Raiders", 99, Rarity.COMMON, mage.cards.g.GathanRaiders.class)); - cards.add(new SetCardInfo("Ghostfire", 115, Rarity.COMMON, mage.cards.g.Ghostfire.class)); - cards.add(new SetCardInfo("Gibbering Descent", 66, Rarity.RARE, mage.cards.g.GibberingDescent.class)); - cards.add(new SetCardInfo("Glittering Wish", 156, Rarity.RARE, mage.cards.g.GlitteringWish.class)); - cards.add(new SetCardInfo("Goldmeadow Lookout", 22, Rarity.UNCOMMON, mage.cards.g.GoldmeadowLookout.class)); - cards.add(new SetCardInfo("Graven Cairns", 175, Rarity.RARE, mage.cards.g.GravenCairns.class)); - cards.add(new SetCardInfo("Grave Peril", 67, Rarity.COMMON, mage.cards.g.GravePeril.class)); - cards.add(new SetCardInfo("Grave Scrabbler", 86, Rarity.COMMON, mage.cards.g.GraveScrabbler.class)); - cards.add(new SetCardInfo("Grinning Ignus", 116, Rarity.COMMON, mage.cards.g.GrinningIgnus.class)); - cards.add(new SetCardInfo("Grove of the Burnwillows", 176, Rarity.RARE, mage.cards.g.GroveOfTheBurnwillows.class)); - cards.add(new SetCardInfo("Haze of Rage", 100, Rarity.UNCOMMON, mage.cards.h.HazeOfRage.class)); - cards.add(new SetCardInfo("Heartwood Storyteller", 127, Rarity.RARE, mage.cards.h.HeartwoodStoryteller.class)); - cards.add(new SetCardInfo("Henchfiend of Ukor", 117, Rarity.COMMON, mage.cards.h.HenchfiendOfUkor.class)); - cards.add(new SetCardInfo("Homing Sliver", 118, Rarity.COMMON, mage.cards.h.HomingSliver.class)); - cards.add(new SetCardInfo("Horizon Canopy", 177, Rarity.RARE, mage.cards.h.HorizonCanopy.class)); - cards.add(new SetCardInfo("Ichor Slick", 68, Rarity.COMMON, mage.cards.i.IchorSlick.class)); - cards.add(new SetCardInfo("Imperiosaur", 145, Rarity.UNCOMMON, mage.cards.i.Imperiosaur.class)); - cards.add(new SetCardInfo("Infiltrator il-Kor", 37, Rarity.COMMON, mage.cards.i.InfiltratorIlKor.class)); - cards.add(new SetCardInfo("Intervention Pact", 8, Rarity.RARE, mage.cards.i.InterventionPact.class)); - cards.add(new SetCardInfo("Jhoira of the Ghitu", 157, Rarity.RARE, mage.cards.j.JhoiraOfTheGhitu.class)); - cards.add(new SetCardInfo("Judge Unworthy", 9, Rarity.COMMON, mage.cards.j.JudgeUnworthy.class)); - cards.add(new SetCardInfo("Kavu Primarch", 128, Rarity.COMMON, mage.cards.k.KavuPrimarch.class)); - cards.add(new SetCardInfo("Keldon Megaliths", 170, Rarity.UNCOMMON, mage.cards.k.KeldonMegaliths.class)); - cards.add(new SetCardInfo("Knight of Sursi", 10, Rarity.COMMON, mage.cards.k.KnightOfSursi.class)); - cards.add(new SetCardInfo("Korlash, Heir to Blackblade", 87, Rarity.RARE, mage.cards.k.KorlashHeirToBlackblade.class)); - cards.add(new SetCardInfo("Leaden Fists", 38, Rarity.COMMON, mage.cards.l.LeadenFists.class)); - cards.add(new SetCardInfo("Linessa, Zephyr Mage", 51, Rarity.RARE, mage.cards.l.LinessaZephyrMage.class)); - cards.add(new SetCardInfo("Llanowar Augur", 129, Rarity.COMMON, mage.cards.l.LlanowarAugur.class)); - cards.add(new SetCardInfo("Llanowar Empath", 130, Rarity.COMMON, mage.cards.l.LlanowarEmpath.class)); - cards.add(new SetCardInfo("Llanowar Mentor", 131, Rarity.UNCOMMON, mage.cards.l.LlanowarMentor.class)); - cards.add(new SetCardInfo("Llanowar Reborn", 171, Rarity.UNCOMMON, mage.cards.l.LlanowarReborn.class)); - cards.add(new SetCardInfo("Logic Knot", 52, Rarity.COMMON, mage.cards.l.LogicKnot.class)); - cards.add(new SetCardInfo("Lost Auramancers", 11, Rarity.UNCOMMON, mage.cards.l.LostAuramancers.class)); - cards.add(new SetCardInfo("Lucent Liminid", 24, Rarity.COMMON, mage.cards.l.LucentLiminid.class)); - cards.add(new SetCardInfo("Lumithread Field", 25, Rarity.COMMON, mage.cards.l.LumithreadField.class)); - cards.add(new SetCardInfo("Lymph Sliver", 26, Rarity.COMMON, mage.cards.l.LymphSliver.class)); - cards.add(new SetCardInfo("Maelstrom Djinn", 39, Rarity.RARE, mage.cards.m.MaelstromDjinn.class)); - cards.add(new SetCardInfo("Magus of the Abyss", 70, Rarity.RARE, mage.cards.m.MagusOfTheAbyss.class)); - cards.add(new SetCardInfo("Magus of the Future", 40, Rarity.RARE, mage.cards.m.MagusOfTheFuture.class)); - cards.add(new SetCardInfo("Magus of the Moat", 12, Rarity.RARE, mage.cards.m.MagusOfTheMoat.class)); - cards.add(new SetCardInfo("Magus of the Moon", 101, Rarity.RARE, mage.cards.m.MagusOfTheMoon.class)); - cards.add(new SetCardInfo("Magus of the Vineyard", 132, Rarity.RARE, mage.cards.m.MagusOfTheVineyard.class)); - cards.add(new SetCardInfo("Marshaling Cry", 13, Rarity.COMMON, mage.cards.m.MarshalingCry.class)); - cards.add(new SetCardInfo("Mass of Ghouls", 88, Rarity.COMMON, mage.cards.m.MassOfGhouls.class)); - cards.add(new SetCardInfo("Mesmeric Sliver", 53, Rarity.COMMON, mage.cards.m.MesmericSliver.class)); - cards.add(new SetCardInfo("Minions' Murmurs", 71, Rarity.UNCOMMON, mage.cards.m.MinionsMurmurs.class)); - cards.add(new SetCardInfo("Mistmeadow Skulk", 27, Rarity.UNCOMMON, mage.cards.m.MistmeadowSkulk.class)); - cards.add(new SetCardInfo("Molten Disaster", 102, Rarity.RARE, mage.cards.m.MoltenDisaster.class)); - cards.add(new SetCardInfo("Muraganda Petroglyphs", 146, Rarity.RARE, mage.cards.m.MuragandaPetroglyphs.class)); - cards.add(new SetCardInfo("Mystic Speculation", 41, Rarity.UNCOMMON, mage.cards.m.MysticSpeculation.class)); - cards.add(new SetCardInfo("Nacatl War-Pride", 147, Rarity.UNCOMMON, mage.cards.n.NacatlWarPride.class)); - cards.add(new SetCardInfo("Narcomoeba", 54, Rarity.UNCOMMON, mage.cards.n.Narcomoeba.class)); - cards.add(new SetCardInfo("Nessian Courser", 148, Rarity.COMMON, mage.cards.n.NessianCourser.class)); - cards.add(new SetCardInfo("New Benalia", 172, Rarity.UNCOMMON, mage.cards.n.NewBenalia.class)); - cards.add(new SetCardInfo("Nihilith", 72, Rarity.RARE, mage.cards.n.Nihilith.class)); - cards.add(new SetCardInfo("Nimbus Maze", 178, Rarity.RARE, mage.cards.n.NimbusMaze.class)); - cards.add(new SetCardInfo("Nix", 55, Rarity.RARE, mage.cards.n.Nix.class)); - cards.add(new SetCardInfo("Oblivion Crown", 73, Rarity.COMMON, mage.cards.o.OblivionCrown.class)); - cards.add(new SetCardInfo("Oriss, Samite Guardian", 28, Rarity.RARE, mage.cards.o.OrissSamiteGuardian.class)); - cards.add(new SetCardInfo("Pact of Negation", 42, Rarity.RARE, mage.cards.p.PactOfNegation.class)); - cards.add(new SetCardInfo("Pact of the Titan", 103, Rarity.RARE, mage.cards.p.PactOfTheTitan.class)); - cards.add(new SetCardInfo("Patrician's Scorn", 29, Rarity.COMMON, mage.cards.p.PatriciansScorn.class)); - cards.add(new SetCardInfo("Petrified Plating", 133, Rarity.COMMON, mage.cards.p.PetrifiedPlating.class)); - cards.add(new SetCardInfo("Phosphorescent Feast", 149, Rarity.UNCOMMON, mage.cards.p.PhosphorescentFeast.class)); - cards.add(new SetCardInfo("Pooling Venom", 74, Rarity.UNCOMMON, mage.cards.p.PoolingVenom.class)); - cards.add(new SetCardInfo("Pyromancer's Swath", 104, Rarity.RARE, mage.cards.p.PyromancersSwath.class)); - cards.add(new SetCardInfo("Quagnoth", 150, Rarity.RARE, mage.cards.q.Quagnoth.class)); - cards.add(new SetCardInfo("Quiet Disrepair", 134, Rarity.COMMON, mage.cards.q.QuietDisrepair.class)); - cards.add(new SetCardInfo("Ramosian Revivalist", 30, Rarity.UNCOMMON, mage.cards.r.RamosianRevivalist.class)); - cards.add(new SetCardInfo("Ravaging Riftwurm", 135, Rarity.UNCOMMON, mage.cards.r.RavagingRiftwurm.class)); - cards.add(new SetCardInfo("Reality Strobe", 43, Rarity.UNCOMMON, mage.cards.r.RealityStrobe.class)); - cards.add(new SetCardInfo("Riddle of Lightning", 105, Rarity.COMMON, mage.cards.r.RiddleOfLightning.class)); - cards.add(new SetCardInfo("Rift Elemental", 106, Rarity.COMMON, mage.cards.r.RiftElemental.class)); - cards.add(new SetCardInfo("Riftsweeper", 136, Rarity.UNCOMMON, mage.cards.r.Riftsweeper.class)); - cards.add(new SetCardInfo("Rites of Flourishing", 137, Rarity.RARE, mage.cards.r.RitesOfFlourishing.class)); - cards.add(new SetCardInfo("River of Tears", 179, Rarity.RARE, mage.cards.r.RiverOfTears.class)); - cards.add(new SetCardInfo("Saltskitter", 14, Rarity.COMMON, mage.cards.s.Saltskitter.class)); - cards.add(new SetCardInfo("Sarcomite Myr", 56, Rarity.COMMON, mage.cards.s.SarcomiteMyr.class)); - cards.add(new SetCardInfo("Scourge of Kher Ridges", 107, Rarity.RARE, mage.cards.s.ScourgeOfKherRidges.class)); - cards.add(new SetCardInfo("Scout's Warning", 16, Rarity.RARE, mage.cards.s.ScoutsWarning.class)); - cards.add(new SetCardInfo("Second Wind", 57, Rarity.UNCOMMON, mage.cards.s.SecondWind.class)); - cards.add(new SetCardInfo("Shapeshifter's Marrow", 58, Rarity.RARE, mage.cards.s.ShapeshiftersMarrow.class)); - cards.add(new SetCardInfo("Shimian Specter", 76, Rarity.RARE, mage.cards.s.ShimianSpecter.class)); - cards.add(new SetCardInfo("Skirk Ridge Exhumer", 77, Rarity.UNCOMMON, mage.cards.s.SkirkRidgeExhumer.class)); - cards.add(new SetCardInfo("Skizzik Surger", 120, Rarity.UNCOMMON, mage.cards.s.SkizzikSurger.class)); - cards.add(new SetCardInfo("Slaughter Pact", 78, Rarity.RARE, mage.cards.s.SlaughterPact.class)); - cards.add(new SetCardInfo("Sliver Legion", 158, Rarity.RARE, mage.cards.s.SliverLegion.class)); - cards.add(new SetCardInfo("Sliversmith", 163, Rarity.UNCOMMON, mage.cards.s.Sliversmith.class)); - cards.add(new SetCardInfo("Snake Cult Initiation", 89, Rarity.UNCOMMON, mage.cards.s.SnakeCultInitiation.class)); - cards.add(new SetCardInfo("Soultether Golem", 164, Rarity.UNCOMMON, mage.cards.s.SoultetherGolem.class)); - cards.add(new SetCardInfo("Sparkspitter", 109, Rarity.UNCOMMON, mage.cards.s.Sparkspitter.class)); - cards.add(new SetCardInfo("Spin into Myth", 60, Rarity.UNCOMMON, mage.cards.s.SpinIntoMyth.class)); - cards.add(new SetCardInfo("Spirit en-Dal", 17, Rarity.UNCOMMON, mage.cards.s.SpiritEnDal.class)); - cards.add(new SetCardInfo("Sporoloth Ancient", 152, Rarity.COMMON, mage.cards.s.SporolothAncient.class)); - cards.add(new SetCardInfo("Sprout Swarm", 138, Rarity.COMMON, mage.cards.s.SproutSwarm.class)); - cards.add(new SetCardInfo("Storm Entity", 122, Rarity.UNCOMMON, mage.cards.s.StormEntity.class)); - cards.add(new SetCardInfo("Street Wraith", 90, Rarity.UNCOMMON, mage.cards.s.StreetWraith.class)); - cards.add(new SetCardInfo("Stronghold Rats", 79, Rarity.UNCOMMON, mage.cards.s.StrongholdRats.class)); - cards.add(new SetCardInfo("Summoner's Pact", 139, Rarity.RARE, mage.cards.s.SummonersPact.class)); - cards.add(new SetCardInfo("Sword of the Meek", 165, Rarity.UNCOMMON, mage.cards.s.SwordOfTheMeek.class)); - cards.add(new SetCardInfo("Take Possession", 44, Rarity.RARE, mage.cards.t.TakePossession.class)); - cards.add(new SetCardInfo("Tarmogoyf", 153, Rarity.RARE, mage.cards.t.Tarmogoyf.class)); - cards.add(new SetCardInfo("Tarox Bladewing", 123, Rarity.RARE, mage.cards.t.TaroxBladewing.class)); - cards.add(new SetCardInfo("Thornweald Archer", 154, Rarity.COMMON, mage.cards.t.ThornwealdArcher.class)); - cards.add(new SetCardInfo("Tolaria West", 173, Rarity.UNCOMMON, mage.cards.t.TolariaWest.class)); - cards.add(new SetCardInfo("Tombstalker", 91, Rarity.RARE, mage.cards.t.Tombstalker.class)); - cards.add(new SetCardInfo("Unblinking Bleb", 45, Rarity.COMMON, mage.cards.u.UnblinkingBleb.class)); - cards.add(new SetCardInfo("Utopia Mycon", 140, Rarity.UNCOMMON, mage.cards.u.UtopiaMycon.class)); - cards.add(new SetCardInfo("Vedalken Aethermage", 61, Rarity.COMMON, mage.cards.v.VedalkenAethermage.class)); - cards.add(new SetCardInfo("Veilstone Amulet", 166, Rarity.RARE, mage.cards.v.VeilstoneAmulet.class)); - cards.add(new SetCardInfo("Venser, Shaper Savant", 46, Rarity.RARE, mage.cards.v.VenserShaperSavant.class)); - cards.add(new SetCardInfo("Virulent Sliver", 155, Rarity.COMMON, mage.cards.v.VirulentSliver.class)); - cards.add(new SetCardInfo("Whetwheel", 168, Rarity.RARE, mage.cards.w.Whetwheel.class)); - cards.add(new SetCardInfo("Whip-Spine Drake", 62, Rarity.COMMON, mage.cards.w.WhipSpineDrake.class)); - cards.add(new SetCardInfo("Witch's Mist", 92, Rarity.UNCOMMON, mage.cards.w.WitchsMist.class)); - cards.add(new SetCardInfo("Wrap in Vigor", 141, Rarity.COMMON, mage.cards.w.WrapInVigor.class)); - cards.add(new SetCardInfo("Yixlid Jailer", 93, Rarity.UNCOMMON, mage.cards.y.YixlidJailer.class)); - cards.add(new SetCardInfo("Zoetic Cavern", 180, Rarity.UNCOMMON, mage.cards.z.ZoeticCavern.class)); - } -} + cards.add(new SetCardInfo("Festering March", 65, Rarity.UNCOMMON, mage.cards.f.FesteringMarch.class)); + cards.add(new SetCardInfo("Fleshwrither", 84, Rarity.UNCOMMON, mage.cards.f.Fleshwrither.class)); + cards.add(new SetCardInfo("Flowstone Embrace", 113, Rarity.COMMON, mage.cards.f.FlowstoneEmbrace.class)); + cards.add(new SetCardInfo("Fomori Nomad", 114, Rarity.COMMON, mage.cards.f.FomoriNomad.class)); + cards.add(new SetCardInfo("Force of Savagery", 126, Rarity.RARE, mage.cards.f.ForceOfSavagery.class)); + cards.add(new SetCardInfo("Foresee", 36, Rarity.COMMON, mage.cards.f.Foresee.class)); + cards.add(new SetCardInfo("Frenzy Sliver", 85, Rarity.COMMON, mage.cards.f.FrenzySliver.class)); + cards.add(new SetCardInfo("Gathan Raiders", 99, Rarity.COMMON, mage.cards.g.GathanRaiders.class)); + cards.add(new SetCardInfo("Ghostfire", 115, Rarity.COMMON, mage.cards.g.Ghostfire.class)); + cards.add(new SetCardInfo("Gibbering Descent", 66, Rarity.RARE, mage.cards.g.GibberingDescent.class)); + cards.add(new SetCardInfo("Glittering Wish", 156, Rarity.RARE, mage.cards.g.GlitteringWish.class)); + cards.add(new SetCardInfo("Goldmeadow Lookout", 22, Rarity.UNCOMMON, mage.cards.g.GoldmeadowLookout.class)); + cards.add(new SetCardInfo("Graven Cairns", 175, Rarity.RARE, mage.cards.g.GravenCairns.class)); + cards.add(new SetCardInfo("Grave Peril", 67, Rarity.COMMON, mage.cards.g.GravePeril.class)); + cards.add(new SetCardInfo("Grave Scrabbler", 86, Rarity.COMMON, mage.cards.g.GraveScrabbler.class)); + cards.add(new SetCardInfo("Grinning Ignus", 116, Rarity.COMMON, mage.cards.g.GrinningIgnus.class)); + cards.add(new SetCardInfo("Grove of the Burnwillows", 176, Rarity.RARE, mage.cards.g.GroveOfTheBurnwillows.class)); + cards.add(new SetCardInfo("Haze of Rage", 100, Rarity.UNCOMMON, mage.cards.h.HazeOfRage.class)); + cards.add(new SetCardInfo("Heartwood Storyteller", 127, Rarity.RARE, mage.cards.h.HeartwoodStoryteller.class)); + cards.add(new SetCardInfo("Henchfiend of Ukor", 117, Rarity.COMMON, mage.cards.h.HenchfiendOfUkor.class)); + cards.add(new SetCardInfo("Homing Sliver", 118, Rarity.COMMON, mage.cards.h.HomingSliver.class)); + cards.add(new SetCardInfo("Horizon Canopy", 177, Rarity.RARE, mage.cards.h.HorizonCanopy.class)); + cards.add(new SetCardInfo("Ichor Slick", 68, Rarity.COMMON, mage.cards.i.IchorSlick.class)); + cards.add(new SetCardInfo("Imperiosaur", 145, Rarity.UNCOMMON, mage.cards.i.Imperiosaur.class)); + cards.add(new SetCardInfo("Infiltrator il-Kor", 37, Rarity.COMMON, mage.cards.i.InfiltratorIlKor.class)); + cards.add(new SetCardInfo("Intervention Pact", 8, Rarity.RARE, mage.cards.i.InterventionPact.class)); + cards.add(new SetCardInfo("Jhoira of the Ghitu", 157, Rarity.RARE, mage.cards.j.JhoiraOfTheGhitu.class)); + cards.add(new SetCardInfo("Judge Unworthy", 9, Rarity.COMMON, mage.cards.j.JudgeUnworthy.class)); + cards.add(new SetCardInfo("Kavu Primarch", 128, Rarity.COMMON, mage.cards.k.KavuPrimarch.class)); + cards.add(new SetCardInfo("Keldon Megaliths", 170, Rarity.UNCOMMON, mage.cards.k.KeldonMegaliths.class)); + cards.add(new SetCardInfo("Knight of Sursi", 10, Rarity.COMMON, mage.cards.k.KnightOfSursi.class)); + cards.add(new SetCardInfo("Korlash, Heir to Blackblade", 87, Rarity.RARE, mage.cards.k.KorlashHeirToBlackblade.class)); + cards.add(new SetCardInfo("Leaden Fists", 38, Rarity.COMMON, mage.cards.l.LeadenFists.class)); + cards.add(new SetCardInfo("Linessa, Zephyr Mage", 51, Rarity.RARE, mage.cards.l.LinessaZephyrMage.class)); + cards.add(new SetCardInfo("Llanowar Augur", 129, Rarity.COMMON, mage.cards.l.LlanowarAugur.class)); + cards.add(new SetCardInfo("Llanowar Empath", 130, Rarity.COMMON, mage.cards.l.LlanowarEmpath.class)); + cards.add(new SetCardInfo("Llanowar Mentor", 131, Rarity.UNCOMMON, mage.cards.l.LlanowarMentor.class)); + cards.add(new SetCardInfo("Llanowar Reborn", 171, Rarity.UNCOMMON, mage.cards.l.LlanowarReborn.class)); + cards.add(new SetCardInfo("Logic Knot", 52, Rarity.COMMON, mage.cards.l.LogicKnot.class)); + cards.add(new SetCardInfo("Lost Auramancers", 11, Rarity.UNCOMMON, mage.cards.l.LostAuramancers.class)); + cards.add(new SetCardInfo("Lucent Liminid", 24, Rarity.COMMON, mage.cards.l.LucentLiminid.class)); + cards.add(new SetCardInfo("Lumithread Field", 25, Rarity.COMMON, mage.cards.l.LumithreadField.class)); + cards.add(new SetCardInfo("Lymph Sliver", 26, Rarity.COMMON, mage.cards.l.LymphSliver.class)); + cards.add(new SetCardInfo("Maelstrom Djinn", 39, Rarity.RARE, mage.cards.m.MaelstromDjinn.class)); + cards.add(new SetCardInfo("Magus of the Abyss", 70, Rarity.RARE, mage.cards.m.MagusOfTheAbyss.class)); + cards.add(new SetCardInfo("Magus of the Future", 40, Rarity.RARE, mage.cards.m.MagusOfTheFuture.class)); + cards.add(new SetCardInfo("Magus of the Moat", 12, Rarity.RARE, mage.cards.m.MagusOfTheMoat.class)); + cards.add(new SetCardInfo("Magus of the Moon", 101, Rarity.RARE, mage.cards.m.MagusOfTheMoon.class)); + cards.add(new SetCardInfo("Magus of the Vineyard", 132, Rarity.RARE, mage.cards.m.MagusOfTheVineyard.class)); + cards.add(new SetCardInfo("Marshaling Cry", 13, Rarity.COMMON, mage.cards.m.MarshalingCry.class)); + cards.add(new SetCardInfo("Mass of Ghouls", 88, Rarity.COMMON, mage.cards.m.MassOfGhouls.class)); + cards.add(new SetCardInfo("Mesmeric Sliver", 53, Rarity.COMMON, mage.cards.m.MesmericSliver.class)); + cards.add(new SetCardInfo("Minions' Murmurs", 71, Rarity.UNCOMMON, mage.cards.m.MinionsMurmurs.class)); + cards.add(new SetCardInfo("Mistmeadow Skulk", 27, Rarity.UNCOMMON, mage.cards.m.MistmeadowSkulk.class)); + cards.add(new SetCardInfo("Molten Disaster", 102, Rarity.RARE, mage.cards.m.MoltenDisaster.class)); + cards.add(new SetCardInfo("Muraganda Petroglyphs", 146, Rarity.RARE, mage.cards.m.MuragandaPetroglyphs.class)); + cards.add(new SetCardInfo("Mystic Speculation", 41, Rarity.UNCOMMON, mage.cards.m.MysticSpeculation.class)); + cards.add(new SetCardInfo("Nacatl War-Pride", 147, Rarity.UNCOMMON, mage.cards.n.NacatlWarPride.class)); + cards.add(new SetCardInfo("Narcomoeba", 54, Rarity.UNCOMMON, mage.cards.n.Narcomoeba.class)); + cards.add(new SetCardInfo("Nessian Courser", 148, Rarity.COMMON, mage.cards.n.NessianCourser.class)); + cards.add(new SetCardInfo("New Benalia", 172, Rarity.UNCOMMON, mage.cards.n.NewBenalia.class)); + cards.add(new SetCardInfo("Nihilith", 72, Rarity.RARE, mage.cards.n.Nihilith.class)); + cards.add(new SetCardInfo("Nimbus Maze", 178, Rarity.RARE, mage.cards.n.NimbusMaze.class)); + cards.add(new SetCardInfo("Nix", 55, Rarity.RARE, mage.cards.n.Nix.class)); + cards.add(new SetCardInfo("Oblivion Crown", 73, Rarity.COMMON, mage.cards.o.OblivionCrown.class)); + cards.add(new SetCardInfo("Oriss, Samite Guardian", 28, Rarity.RARE, mage.cards.o.OrissSamiteGuardian.class)); + cards.add(new SetCardInfo("Pact of Negation", 42, Rarity.RARE, mage.cards.p.PactOfNegation.class)); + cards.add(new SetCardInfo("Pact of the Titan", 103, Rarity.RARE, mage.cards.p.PactOfTheTitan.class)); + cards.add(new SetCardInfo("Patrician's Scorn", 29, Rarity.COMMON, mage.cards.p.PatriciansScorn.class)); + cards.add(new SetCardInfo("Petrified Plating", 133, Rarity.COMMON, mage.cards.p.PetrifiedPlating.class)); + cards.add(new SetCardInfo("Phosphorescent Feast", 149, Rarity.UNCOMMON, mage.cards.p.PhosphorescentFeast.class)); + cards.add(new SetCardInfo("Pooling Venom", 74, Rarity.UNCOMMON, mage.cards.p.PoolingVenom.class)); + cards.add(new SetCardInfo("Pyromancer's Swath", 104, Rarity.RARE, mage.cards.p.PyromancersSwath.class)); + cards.add(new SetCardInfo("Quagnoth", 150, Rarity.RARE, mage.cards.q.Quagnoth.class)); + cards.add(new SetCardInfo("Quiet Disrepair", 134, Rarity.COMMON, mage.cards.q.QuietDisrepair.class)); + cards.add(new SetCardInfo("Ramosian Revivalist", 30, Rarity.UNCOMMON, mage.cards.r.RamosianRevivalist.class)); + cards.add(new SetCardInfo("Ravaging Riftwurm", 135, Rarity.UNCOMMON, mage.cards.r.RavagingRiftwurm.class)); + cards.add(new SetCardInfo("Reality Strobe", 43, Rarity.UNCOMMON, mage.cards.r.RealityStrobe.class)); + cards.add(new SetCardInfo("Riddle of Lightning", 105, Rarity.COMMON, mage.cards.r.RiddleOfLightning.class)); + cards.add(new SetCardInfo("Rift Elemental", 106, Rarity.COMMON, mage.cards.r.RiftElemental.class)); + cards.add(new SetCardInfo("Riftsweeper", 136, Rarity.UNCOMMON, mage.cards.r.Riftsweeper.class)); + cards.add(new SetCardInfo("Rites of Flourishing", 137, Rarity.RARE, mage.cards.r.RitesOfFlourishing.class)); + cards.add(new SetCardInfo("River of Tears", 179, Rarity.RARE, mage.cards.r.RiverOfTears.class)); + cards.add(new SetCardInfo("Saltskitter", 14, Rarity.COMMON, mage.cards.s.Saltskitter.class)); + cards.add(new SetCardInfo("Sarcomite Myr", 56, Rarity.COMMON, mage.cards.s.SarcomiteMyr.class)); + cards.add(new SetCardInfo("Scourge of Kher Ridges", 107, Rarity.RARE, mage.cards.s.ScourgeOfKherRidges.class)); + cards.add(new SetCardInfo("Scout's Warning", 16, Rarity.RARE, mage.cards.s.ScoutsWarning.class)); + cards.add(new SetCardInfo("Second Wind", 57, Rarity.UNCOMMON, mage.cards.s.SecondWind.class)); + cards.add(new SetCardInfo("Seht's Tiger", 31, Rarity.RARE, mage.cards.s.SehtsTiger.class)); + cards.add(new SetCardInfo("Shapeshifter's Marrow", 58, Rarity.RARE, mage.cards.s.ShapeshiftersMarrow.class)); + cards.add(new SetCardInfo("Shimian Specter", 76, Rarity.RARE, mage.cards.s.ShimianSpecter.class)); + cards.add(new SetCardInfo("Skirk Ridge Exhumer", 77, Rarity.UNCOMMON, mage.cards.s.SkirkRidgeExhumer.class)); + cards.add(new SetCardInfo("Skizzik Surger", 120, Rarity.UNCOMMON, mage.cards.s.SkizzikSurger.class)); + cards.add(new SetCardInfo("Slaughter Pact", 78, Rarity.RARE, mage.cards.s.SlaughterPact.class)); + cards.add(new SetCardInfo("Sliver Legion", 158, Rarity.RARE, mage.cards.s.SliverLegion.class)); + cards.add(new SetCardInfo("Sliversmith", 163, Rarity.UNCOMMON, mage.cards.s.Sliversmith.class)); + cards.add(new SetCardInfo("Snake Cult Initiation", 89, Rarity.UNCOMMON, mage.cards.s.SnakeCultInitiation.class)); + cards.add(new SetCardInfo("Soultether Golem", 164, Rarity.UNCOMMON, mage.cards.s.SoultetherGolem.class)); + cards.add(new SetCardInfo("Sparkspitter", 109, Rarity.UNCOMMON, mage.cards.s.Sparkspitter.class)); + cards.add(new SetCardInfo("Spin into Myth", 60, Rarity.UNCOMMON, mage.cards.s.SpinIntoMyth.class)); + cards.add(new SetCardInfo("Spirit en-Dal", 17, Rarity.UNCOMMON, mage.cards.s.SpiritEnDal.class)); + cards.add(new SetCardInfo("Sporoloth Ancient", 152, Rarity.COMMON, mage.cards.s.SporolothAncient.class)); + cards.add(new SetCardInfo("Sprout Swarm", 138, Rarity.COMMON, mage.cards.s.SproutSwarm.class)); + cards.add(new SetCardInfo("Storm Entity", 122, Rarity.UNCOMMON, mage.cards.s.StormEntity.class)); + cards.add(new SetCardInfo("Street Wraith", 90, Rarity.UNCOMMON, mage.cards.s.StreetWraith.class)); + cards.add(new SetCardInfo("Stronghold Rats", 79, Rarity.UNCOMMON, mage.cards.s.StrongholdRats.class)); + cards.add(new SetCardInfo("Summoner's Pact", 139, Rarity.RARE, mage.cards.s.SummonersPact.class)); + cards.add(new SetCardInfo("Sword of the Meek", 165, Rarity.UNCOMMON, mage.cards.s.SwordOfTheMeek.class)); + cards.add(new SetCardInfo("Take Possession", 44, Rarity.RARE, mage.cards.t.TakePossession.class)); + cards.add(new SetCardInfo("Tarmogoyf", 153, Rarity.RARE, mage.cards.t.Tarmogoyf.class)); + cards.add(new SetCardInfo("Tarox Bladewing", 123, Rarity.RARE, mage.cards.t.TaroxBladewing.class)); + cards.add(new SetCardInfo("Thornweald Archer", 154, Rarity.COMMON, mage.cards.t.ThornwealdArcher.class)); + cards.add(new SetCardInfo("Tolaria West", 173, Rarity.UNCOMMON, mage.cards.t.TolariaWest.class)); + cards.add(new SetCardInfo("Tombstalker", 91, Rarity.RARE, mage.cards.t.Tombstalker.class)); + cards.add(new SetCardInfo("Unblinking Bleb", 45, Rarity.COMMON, mage.cards.u.UnblinkingBleb.class)); + cards.add(new SetCardInfo("Utopia Mycon", 140, Rarity.UNCOMMON, mage.cards.u.UtopiaMycon.class)); + cards.add(new SetCardInfo("Vedalken Aethermage", 61, Rarity.COMMON, mage.cards.v.VedalkenAethermage.class)); + cards.add(new SetCardInfo("Veilstone Amulet", 166, Rarity.RARE, mage.cards.v.VeilstoneAmulet.class)); + cards.add(new SetCardInfo("Venser, Shaper Savant", 46, Rarity.RARE, mage.cards.v.VenserShaperSavant.class)); + cards.add(new SetCardInfo("Virulent Sliver", 155, Rarity.COMMON, mage.cards.v.VirulentSliver.class)); + cards.add(new SetCardInfo("Whetwheel", 168, Rarity.RARE, mage.cards.w.Whetwheel.class)); + cards.add(new SetCardInfo("Whip-Spine Drake", 62, Rarity.COMMON, mage.cards.w.WhipSpineDrake.class)); + cards.add(new SetCardInfo("Witch's Mist", 92, Rarity.UNCOMMON, mage.cards.w.WitchsMist.class)); + cards.add(new SetCardInfo("Wrap in Vigor", 141, Rarity.COMMON, mage.cards.w.WrapInVigor.class)); + cards.add(new SetCardInfo("Yixlid Jailer", 93, Rarity.UNCOMMON, mage.cards.y.YixlidJailer.class)); + cards.add(new SetCardInfo("Zoetic Cavern", 180, Rarity.UNCOMMON, mage.cards.z.ZoeticCavern.class)); + } +} diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index f89b12858c..4aeb681206 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -1829,7 +1829,7 @@ public abstract class PlayerImpl implements Player, Serializable { MageObject sourceObject = game.getObject(sourceId); game.informPlayers(damage + " damage " + (sourceObject == null ? "" : "from " + sourceObject.getLogName()) - + "to " + getLogName() + + " to " + getLogName() + (damage > 1 ? " were" : "was") + " prevented because of protection."); } } From cb15d4728d3273ac60ce7edc49b329a61ab7b52f Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 27 Aug 2017 14:27:03 +0200 Subject: [PATCH 5/5] * Dragon Tempest - Fixed a problem if damage was redirected (e.g. with Spellskite) - (fixes #3887). --- Mage.Sets/src/mage/cards/d/DragonTempest.java | 10 +++++----- .../common/EntersBattlefieldAllTriggeredAbility.java | 3 +++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/d/DragonTempest.java b/Mage.Sets/src/mage/cards/d/DragonTempest.java index e760a1a34e..a5556b6344 100644 --- a/Mage.Sets/src/mage/cards/d/DragonTempest.java +++ b/Mage.Sets/src/mage/cards/d/DragonTempest.java @@ -46,7 +46,6 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetCreatureOrPlayer; -import mage.target.targetpointer.FixedTarget; /** * @@ -74,7 +73,7 @@ public class DragonTempest extends CardImpl { new DragonTempestDamageEffect(), new FilterCreaturePermanent(SubType.DRAGON, "a Dragon"), false, - SetTargetPointer.PERMANENT, + SetTargetPointer.NONE, "" ); ability.addTarget(new TargetCreatureOrPlayer()); @@ -118,15 +117,16 @@ class DragonTempestDamageEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { + Permanent damageSource = (Permanent) getValue("permanentEnteringBattlefield"); int amount = game.getBattlefield().countAll(dragonFilter, controller.getId(), game); if (amount > 0) { - Permanent targetCreature = ((FixedTarget) getTargetPointer()).getTargetedPermanentOrLKIBattlefield(game); + Permanent targetCreature = game.getPermanent(getTargetPointer().getFirst(game, source)); if (targetCreature != null) { - targetCreature.damage(amount, getTargetPointer().getFirst(game, source), game, false, true); + targetCreature.damage(amount, damageSource.getId(), game, false, true); } else { Player player = game.getPlayer(source.getTargets().getFirstTarget()); if (player != null) { - player.damage(amount, getTargetPointer().getFirst(game, source), game, false, true); + player.damage(amount, damageSource.getId(), game, false, true); } } } diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAllTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAllTriggeredAbility.java index 9e4daeb3fe..940f0b9c05 100644 --- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAllTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldAllTriggeredAbility.java @@ -105,6 +105,9 @@ public class EntersBattlefieldAllTriggeredAbility extends TriggeredAbilityImpl { UUID targetId = event.getTargetId(); Permanent permanent = game.getPermanent(targetId); if (permanent != null && filter.match(permanent, getSourceId(), getControllerId(), game)) { + for (Effect effect : this.getEffects()) { + effect.setValue("permanentEnteringBattlefield", permanent); + } if (setTargetPointer != SetTargetPointer.NONE) { for (Effect effect : this.getEffects()) { switch (setTargetPointer) {