From e821d22fb6b857889e339b12ec22eb6de8cd41a9 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 17:53:30 +0200 Subject: [PATCH 01/29] [DOM] Some fixes and tooltip rule text changes. --- .../src/mage/cards/b/BloodstoneGoblin.java | 4 ++-- .../src/mage/cards/c/ChampionOfTheFlame.java | 6 +++-- .../mage/cards/d/DarigaazReincarnated.java | 8 +++---- .../src/mage/cards/f/ForebearsBlade.java | 7 +++--- .../src/mage/cards/g/GaeasProtector.java | 5 ++-- .../src/mage/cards/g/GarnaTheBloodflame.java | 2 -- .../src/mage/cards/g/GoblinWarchief.java | 12 ++++------ .../src/mage/cards/g/GuardiansOfKoilos.java | 11 +++++---- Mage.Sets/src/mage/cards/h/HelmOfTheHost.java | 10 ++++---- .../cards/j/JhoiraWeatherlightCaptain.java | 17 ++++++------- .../src/mage/cards/j/JhoirasFamiliar.java | 4 +++- .../src/mage/cards/m/MarwynTheNurturer.java | 10 ++++---- .../src/mage/cards/m/MemorialToFolly.java | 15 ++++++------ .../src/mage/cards/m/MemorialToUnity.java | 19 +++++++-------- .../mage/cards/m/MishrasSelfReplicator.java | 7 ++++-- .../mage/cards/m/MultaniYavimayasAvatar.java | 16 ++++--------- .../mage/cards/r/RaffCapashenShipsMage.java | 8 ++++--- Mage.Sets/src/mage/cards/r/RatColony.java | 2 +- .../src/mage/cards/s/SaprolingMigration.java | 2 +- Mage.Sets/src/mage/cards/s/SeismicShift.java | 4 +++- .../src/mage/cards/s/ShieldOfTheRealm.java | 3 ++- Mage.Sets/src/mage/cards/s/Skizzik.java | 5 ++-- .../src/mage/cards/s/SongOfFreyalise.java | 21 ++++++++-------- .../src/mage/cards/t/ThallidOmnivore.java | 2 +- .../src/mage/cards/t/TheFirstEruption.java | 4 +--- .../mage/cards/t/TorgaarFamineIncarnate.java | 9 +++---- .../mage/cards/t/TraxosScourgeOfKroog.java | 15 ++++-------- .../mage/cards/w/WhisperBloodLiturgist.java | 8 ++++--- .../src/mage/cards/w/WizardsLightning.java | 3 ++- Mage.Sets/src/mage/sets/Dominaria.java | 8 +++---- .../AttacksWithCreaturesTriggeredAbility.java | 3 ++- .../BeginningOfUpkeepTriggeredAbility.java | 2 +- ...rnToHandChosenControlledPermanentCost.java | 9 +++++-- .../dynamicvalue/AdditiveDynamicValue.java | 24 ++++++++++--------- .../common/AddManaOfAnyColorEffect.java | 2 +- .../LookLibraryAndPickControllerEffect.java | 1 + .../common/PreventDamageToAttachedEffect.java | 6 ++--- .../effects/common/UntapLandsEffect.java | 2 +- 38 files changed, 151 insertions(+), 145 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/BloodstoneGoblin.java b/Mage.Sets/src/mage/cards/b/BloodstoneGoblin.java index cf306ac8f2..3381ffa942 100644 --- a/Mage.Sets/src/mage/cards/b/BloodstoneGoblin.java +++ b/Mage.Sets/src/mage/cards/b/BloodstoneGoblin.java @@ -35,11 +35,11 @@ import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.KickerAbility; import mage.abilities.keyword.MenaceAbility; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; @@ -109,6 +109,6 @@ class BloodstoneGoblinTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - return "Whenever you cast a spell, if it was kicked," + super.getRule(); + return "Whenever you cast a spell, if that spell was kicked, " + super.getRule(); } } diff --git a/Mage.Sets/src/mage/cards/c/ChampionOfTheFlame.java b/Mage.Sets/src/mage/cards/c/ChampionOfTheFlame.java index 434cca4ca7..3dc8630adc 100644 --- a/Mage.Sets/src/mage/cards/c/ChampionOfTheFlame.java +++ b/Mage.Sets/src/mage/cards/c/ChampionOfTheFlame.java @@ -35,12 +35,12 @@ import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.AuraAttachedCount; import mage.abilities.dynamicvalue.common.EquipmentAttachedCount; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.constants.SubType; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; /** @@ -64,7 +64,9 @@ public class ChampionOfTheFlame extends CardImpl { DynamicValue auraAmount = new AuraAttachedCount(2); DynamicValue equipAmount = new EquipmentAttachedCount(2); DynamicValue totalAmount = new AdditiveDynamicValue(auraAmount, equipAmount); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(totalAmount, totalAmount, Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new BoostSourceEffect(totalAmount, totalAmount, Duration.WhileOnBattlefield) + .setText("{this} gets +2/+2 for each Aura and Equipment attached to it"))); } public ChampionOfTheFlame(final ChampionOfTheFlame card) { diff --git a/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java b/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java index ecbe41de41..12d2e82177 100644 --- a/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java +++ b/Mage.Sets/src/mage/cards/d/DarigaazReincarnated.java @@ -37,17 +37,17 @@ import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.ReplacementEffectImpl; import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; -import mage.constants.SubType; -import mage.constants.SuperType; import mage.abilities.keyword.FlyingAbility; -import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.HasteAbility; +import mage.abilities.keyword.TrampleAbility; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Outcome; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.constants.TargetController; import mage.constants.Zone; import mage.counters.CounterType; @@ -151,8 +151,6 @@ class DarigaazReincarnatedTriggeredAbility extends ConditionalTriggeredAbility { DarigaazReincarnatedCondition.instance, "At the beginning of your upkeep, if {this} is exiled with an egg counter on it, " + "remove an egg counter from it. Then if {this} has no egg counters on it, return it to the battlefield"); - this.setRuleVisible(false); - } public DarigaazReincarnatedTriggeredAbility(final DarigaazReincarnatedTriggeredAbility effect) { diff --git a/Mage.Sets/src/mage/cards/f/ForebearsBlade.java b/Mage.Sets/src/mage/cards/f/ForebearsBlade.java index 6bc0216361..65b2443841 100644 --- a/Mage.Sets/src/mage/cards/f/ForebearsBlade.java +++ b/Mage.Sets/src/mage/cards/f/ForebearsBlade.java @@ -15,8 +15,8 @@ import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; import mage.abilities.keyword.EquipAbility; -import mage.abilities.keyword.VigilanceAbility; import mage.abilities.keyword.TrampleAbility; +import mage.abilities.keyword.VigilanceAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AttachmentType; @@ -48,10 +48,11 @@ public class ForebearsBlade extends CardImpl { effect = new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.EQUIPMENT); effect.setText("and trample"); ability.addEffect(effect); - + this.addAbility(ability); + // Whenever equipped creature dies, attach Forebear’s Blade to target creature you control. ability = new DiesAttachedTriggeredAbility( - new AttachEffect(Outcome.Neutral, "attach {source} to it"), "equipped creature", false); + new AttachEffect(Outcome.Neutral, "attach {this} to to target creature you control"), "equipped creature", false); ability.addTarget(new TargetControlledCreaturePermanent()); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/g/GaeasProtector.java b/Mage.Sets/src/mage/cards/g/GaeasProtector.java index 45ea734fb6..c277902f54 100644 --- a/Mage.Sets/src/mage/cards/g/GaeasProtector.java +++ b/Mage.Sets/src/mage/cards/g/GaeasProtector.java @@ -31,10 +31,11 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.combat.MustBeBlockedByAtLeastOneSourceEffect; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; /** @@ -52,7 +53,7 @@ public class GaeasProtector extends CardImpl { this.toughness = new MageInt(2); // Gaea's Protector must be blocked if able. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAtLeastOneSourceEffect())); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new MustBeBlockedByAtLeastOneSourceEffect(Duration.WhileOnBattlefield))); } public GaeasProtector(final GaeasProtector card) { diff --git a/Mage.Sets/src/mage/cards/g/GarnaTheBloodflame.java b/Mage.Sets/src/mage/cards/g/GarnaTheBloodflame.java index 6730c09f04..c15cff8856 100644 --- a/Mage.Sets/src/mage/cards/g/GarnaTheBloodflame.java +++ b/Mage.Sets/src/mage/cards/g/GarnaTheBloodflame.java @@ -75,8 +75,6 @@ public class GarnaTheBloodflame extends CardImpl { // When Garna, the Bloodflame enters the battlefield, return to your hand all creature cards in your graveyard that were put there from anywhere this turn. this.addAbility(new EntersBattlefieldTriggeredAbility(new GarnaTheBloodflameEffect(), false), new GarnaTheBloodflameWatcher()); - this.getSpellAbility().addEffect(new GarnaTheBloodflameEffect()); - this.getSpellAbility().addWatcher(new GarnaTheBloodflameWatcher()); // Other creatures you control have haste. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, diff --git a/Mage.Sets/src/mage/cards/g/GoblinWarchief.java b/Mage.Sets/src/mage/cards/g/GoblinWarchief.java index 0b0fa0f4be..401dd689ec 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinWarchief.java +++ b/Mage.Sets/src/mage/cards/g/GoblinWarchief.java @@ -27,6 +27,7 @@ */ package mage.cards.g; +import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; @@ -42,8 +43,6 @@ import mage.filter.FilterCard; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.SubtypePredicate; -import java.util.UUID; - /** * * @author jonubuu @@ -51,15 +50,13 @@ import java.util.UUID; public class GoblinWarchief extends CardImpl { private static final FilterCard filterSpells = new FilterCard("Goblin spells"); - private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Goblin creatures"); static { filterSpells.add(new SubtypePredicate(SubType.GOBLIN)); - filter.add(new SubtypePredicate(SubType.GOBLIN)); } public GoblinWarchief(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}{R}"); this.subtype.add(SubType.GOBLIN); this.subtype.add(SubType.WARRIOR); @@ -68,8 +65,9 @@ public class GoblinWarchief extends CardImpl { // Goblin spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterSpells, 1))); - // Goblin creatures you control have haste. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter, false))); + // Goblins you control have haste. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), + Duration.WhileOnBattlefield, new FilterCreaturePermanent(SubType.GOBLIN, "Goblins"), false))); } public GoblinWarchief(final GoblinWarchief card) { diff --git a/Mage.Sets/src/mage/cards/g/GuardiansOfKoilos.java b/Mage.Sets/src/mage/cards/g/GuardiansOfKoilos.java index 598330ca15..abe392fffa 100644 --- a/Mage.Sets/src/mage/cards/g/GuardiansOfKoilos.java +++ b/Mage.Sets/src/mage/cards/g/GuardiansOfKoilos.java @@ -9,13 +9,13 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.effects.common.ReturnToHandChosenControlledPermanentEffect; -import mage.cards.CardSetInfo; import mage.cards.CardImpl; +import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.filter.common.FilterControlledPermanent; -import mage.filter.predicate.permanent.AnotherPredicate; import mage.filter.predicate.mageobject.HistoricPredicate; +import mage.filter.predicate.permanent.AnotherPredicate; /** * @@ -29,7 +29,7 @@ public class GuardiansOfKoilos extends CardImpl { filter.add(new AnotherPredicate()); filter.add(new HistoricPredicate()); } - + public GuardiansOfKoilos(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{5}"); this.subtype.add(SubType.CONSTRUCT); @@ -37,7 +37,8 @@ public class GuardiansOfKoilos extends CardImpl { this.toughness = new MageInt(4); // When Guardians of Koilos enters the battlefield, you may return another target historic permanent you control to its owner’s hand. - this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new ReturnToHandChosenControlledPermanentEffect(filter) + .setText("you may return another target historic permanent you control to its owner’s hand. <i>(Artifacts, legendaries, and Sagas are historic.)</i>"), true)); } public GuardiansOfKoilos(final GuardiansOfKoilos card) { @@ -47,5 +48,5 @@ public class GuardiansOfKoilos extends CardImpl { @Override public GuardiansOfKoilos copy() { return new GuardiansOfKoilos(this); - } + } } diff --git a/Mage.Sets/src/mage/cards/h/HelmOfTheHost.java b/Mage.Sets/src/mage/cards/h/HelmOfTheHost.java index 2339afce09..a5aa48f058 100644 --- a/Mage.Sets/src/mage/cards/h/HelmOfTheHost.java +++ b/Mage.Sets/src/mage/cards/h/HelmOfTheHost.java @@ -46,7 +46,6 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; - /** * * @author Will @@ -54,10 +53,10 @@ import mage.target.targetpointer.FixedTarget; public class HelmOfTheHost extends CardImpl { public HelmOfTheHost(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{4}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{4}"); this.addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.EQUIPMENT); - + // At the beginning of combat on your turn, create a token that’s a copy of equipped creature, except the token isn’t legendary if equipped creature is legendary. That token gains haste. TriggeredAbility ability = new BeginningOfCombatTriggeredAbility( new HelmOfTheHostEffect(), @@ -65,7 +64,7 @@ public class HelmOfTheHost extends CardImpl { false ); this.addAbility(ability); - + // Equip {5} this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(5))); } @@ -81,9 +80,10 @@ public class HelmOfTheHost extends CardImpl { } class HelmOfTheHostEffect extends OneShotEffect { + public HelmOfTheHostEffect() { super(Outcome.PutCreatureInPlay); - this.staticText = "Create a token that’s a copy of equipped creature, except the token isn’t legendary if equipped creature is legendary. That token gains haste."; + this.staticText = "create a token that’s a copy of equipped creature, except the token isn’t legendary if equipped creature is legendary. That token gains haste."; } public HelmOfTheHostEffect(final HelmOfTheHostEffect effect) { diff --git a/Mage.Sets/src/mage/cards/j/JhoiraWeatherlightCaptain.java b/Mage.Sets/src/mage/cards/j/JhoiraWeatherlightCaptain.java index bb4c8578e8..017b3b2361 100644 --- a/Mage.Sets/src/mage/cards/j/JhoiraWeatherlightCaptain.java +++ b/Mage.Sets/src/mage/cards/j/JhoiraWeatherlightCaptain.java @@ -1,7 +1,7 @@ package mage.cards.j; +import java.util.UUID; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.cards.CardImpl; @@ -11,27 +11,28 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.filter.common.FilterHistoricSpell; -import java.util.UUID; - public class JhoiraWeatherlightCaptain extends CardImpl { - public JhoiraWeatherlightCaptain(UUID ownerId, CardSetInfo cardSetInfo){ + public JhoiraWeatherlightCaptain(UUID ownerId, CardSetInfo cardSetInfo) { super(ownerId, cardSetInfo, new CardType[]{CardType.CREATURE}, "{2}{U}{R}"); addSuperType(SuperType.LEGENDARY); subtype.add(SubType.HUMAN, SubType.ARTIFICER); power = new MageInt(3); toughness = new MageInt(3); - Ability ability = new SpellCastControllerTriggeredAbility(new DrawCardSourceControllerEffect(1), new FilterHistoricSpell(), false); - addAbility(ability); + // Whenever you cast a historic spell, draw a card. <i>(Artifacts, legendaries, and Sagas are historic.)</i> + addAbility(new SpellCastControllerTriggeredAbility(new DrawCardSourceControllerEffect(1) + .setText("draw a card. <i>(Artifacts, legendaries, and Sagas are historic.)</i>"), + new FilterHistoricSpell(), false)); } - public JhoiraWeatherlightCaptain(final JhoiraWeatherlightCaptain jhoiraWeatherlightCaptain){ + public JhoiraWeatherlightCaptain(final JhoiraWeatherlightCaptain jhoiraWeatherlightCaptain) { super(jhoiraWeatherlightCaptain); } - public JhoiraWeatherlightCaptain copy(){ + @Override + public JhoiraWeatherlightCaptain copy() { return new JhoiraWeatherlightCaptain(this); } } diff --git a/Mage.Sets/src/mage/cards/j/JhoirasFamiliar.java b/Mage.Sets/src/mage/cards/j/JhoirasFamiliar.java index d055b7edb4..ac6130c2f9 100644 --- a/Mage.Sets/src/mage/cards/j/JhoirasFamiliar.java +++ b/Mage.Sets/src/mage/cards/j/JhoirasFamiliar.java @@ -56,7 +56,9 @@ public class JhoirasFamiliar extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // Historic spells you cast cost {1} less to cast. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(new FilterHistoricCard(), 1))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new SpellsCostReductionControllerEffect(new FilterHistoricCard(), 1) + .setText("Historic spells you cast cost {1} less to cast. <i>(Artifacts, legendaries, and Sagas are historic.)</i>"))); } public JhoirasFamiliar(final JhoirasFamiliar card) { diff --git a/Mage.Sets/src/mage/cards/m/MarwynTheNurturer.java b/Mage.Sets/src/mage/cards/m/MarwynTheNurturer.java index 703561956d..4deff3eba7 100644 --- a/Mage.Sets/src/mage/cards/m/MarwynTheNurturer.java +++ b/Mage.Sets/src/mage/cards/m/MarwynTheNurturer.java @@ -1,10 +1,9 @@ package mage.cards.m; import java.util.UUID; - import mage.MageInt; import mage.Mana; -import mage.abilities.common.EntersBattlefieldAllTriggeredAbility; +import mage.abilities.common.EntersBattlefieldControlledTriggeredAbility; import mage.abilities.dynamicvalue.common.SourcePermanentPowerCount; import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.abilities.mana.DynamicManaAbility; @@ -19,8 +18,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate; import mage.filter.predicate.permanent.AnotherPredicate; /** - * @author JRHerlehy - * Created on 4/7/18. + * @author JRHerlehy Created on 4/7/18. */ public class MarwynTheNurturer extends CardImpl { @@ -39,10 +37,10 @@ public class MarwynTheNurturer extends CardImpl { this.toughness = new MageInt(1); // Whenever another Elf enters the battlefield under your control, put a +1/+1 counter on Marwyn, the Nurturer. - this.addAbility(new EntersBattlefieldAllTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter)); + this.addAbility(new EntersBattlefieldControlledTriggeredAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()), filter)); // {T}: Add an amount of {G} equal to Marwyn’s power. - this.addAbility(new DynamicManaAbility(Mana.GreenMana(1), new SourcePermanentPowerCount(), "Add an amount of {G} equal to Marwyn’s power")); + this.addAbility(new DynamicManaAbility(Mana.GreenMana(1), new SourcePermanentPowerCount(), "Add an amount of {G} equal to {this}’s power")); } public MarwynTheNurturer(final MarwynTheNurturer card) { diff --git a/Mage.Sets/src/mage/cards/m/MemorialToFolly.java b/Mage.Sets/src/mage/cards/m/MemorialToFolly.java index 10f5d1f20a..be06bf802b 100644 --- a/Mage.Sets/src/mage/cards/m/MemorialToFolly.java +++ b/Mage.Sets/src/mage/cards/m/MemorialToFolly.java @@ -25,13 +25,12 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.cards.m; import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; @@ -50,15 +49,17 @@ import mage.target.common.TargetCardInYourGraveyard; public class MemorialToFolly extends CardImpl { public MemorialToFolly(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.LAND},""); - + super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); + // Memorial to Folly enters the battlefield tapped. this.addAbility(new EntersBattlefieldTappedAbility()); - + this.addAbility(new BlackManaAbility()); - + // {2}{B}, {T}, Sacrifice Memorial to Folly: Return target creature card from your graveyard to your hand. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect(), new ManaCostsImpl("{2}{B}")); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnToHandTargetEffect() + .setText("Return target creature card from your graveyard to your hand"), + new ManaCostsImpl("{2}{B}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); ability.addTarget(new TargetCardInYourGraveyard(new FilterCreatureCard("creature card from your graveyard"))); diff --git a/Mage.Sets/src/mage/cards/m/MemorialToUnity.java b/Mage.Sets/src/mage/cards/m/MemorialToUnity.java index 86b8f979e1..c84808ea2a 100644 --- a/Mage.Sets/src/mage/cards/m/MemorialToUnity.java +++ b/Mage.Sets/src/mage/cards/m/MemorialToUnity.java @@ -25,25 +25,24 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.cards.m; import java.util.UUID; import mage.abilities.Ability; -import mage.abilities.effects.Effect; -import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.ManaCostsImpl; -import mage.abilities.mana.GreenManaAbility; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; -import mage.filter.common.FilterCreatureCard; +import mage.abilities.mana.GreenManaAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; /** * @author Rystan @@ -52,17 +51,17 @@ public class MemorialToUnity extends CardImpl { public MemorialToUnity(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.LAND}, ""); - + // Memorial to Uniity enters the battlefield tapped. this.addAbility(new EntersBattlefieldTappedAbility()); - + this.addAbility(new GreenManaAbility()); - + // {2}{G}, {T}, Sacrifice Memorial to Unity: Look at the top five cards of your library. You may reveal a creature card from among them and put it into your hand. Then put the rest on the bottom of your library in a random order. Effect effect = new LookLibraryAndPickControllerEffect( - new StaticValue(5), false, new StaticValue(1), new FilterCreatureCard("a creature card"), false, false + new StaticValue(5), false, new StaticValue(1), new FilterCreatureCard("a creature card"), false, true ); - + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{2}{G}")); ability.addCost(new TapSourceCost()); ability.addCost(new SacrificeSourceCost()); diff --git a/Mage.Sets/src/mage/cards/m/MishrasSelfReplicator.java b/Mage.Sets/src/mage/cards/m/MishrasSelfReplicator.java index bb0396c8c7..9bacb8ccd7 100644 --- a/Mage.Sets/src/mage/cards/m/MishrasSelfReplicator.java +++ b/Mage.Sets/src/mage/cards/m/MishrasSelfReplicator.java @@ -33,10 +33,10 @@ import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.CreateTokenCopySourceEffect; import mage.abilities.effects.common.DoIfCostPaid; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.SubType; import mage.filter.FilterSpell; import mage.filter.predicate.mageobject.HistoricPredicate; @@ -60,7 +60,10 @@ public class MishrasSelfReplicator extends CardImpl { this.toughness = new MageInt(2); // Whenever you cast a historic spell, you may pay {1}. If you do, create a token that's a copy of Mishra's Self-Replicator. - this.addAbility(new SpellCastControllerTriggeredAbility(new DoIfCostPaid(new CreateTokenCopySourceEffect(), new ManaCostsImpl("{1}")), filter, true)); + this.addAbility(new SpellCastControllerTriggeredAbility(new DoIfCostPaid( + new CreateTokenCopySourceEffect() + .setText("create a token that's a copy of (this). <i>(Artifacts, legendaries, and Sagas are historic.)</i>"), + new ManaCostsImpl("{1}")), filter, true)); } diff --git a/Mage.Sets/src/mage/cards/m/MultaniYavimayasAvatar.java b/Mage.Sets/src/mage/cards/m/MultaniYavimayasAvatar.java index d526a6cbc2..ddfa8c755d 100644 --- a/Mage.Sets/src/mage/cards/m/MultaniYavimayasAvatar.java +++ b/Mage.Sets/src/mage/cards/m/MultaniYavimayasAvatar.java @@ -28,7 +28,6 @@ package mage.cards.m; import java.util.UUID; - import mage.MageInt; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; @@ -36,24 +35,17 @@ import mage.abilities.costs.common.ReturnToHandChosenControlledPermanentCost; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.dynamicvalue.AdditiveDynamicValue; import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.CardsInAllHandsCount; import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; import mage.abilities.effects.common.ReturnSourceFromGraveyardToHandEffect; import mage.abilities.effects.common.continuous.BoostSourceEffect; -import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect; import mage.abilities.keyword.ReachAbility; -import mage.abilities.keyword.ShroudAbility; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.*; import mage.filter.common.FilterControlledLandPermanent; -import mage.filter.common.FilterControlledPermanent; import mage.filter.common.FilterLandCard; -import mage.filter.common.FilterLandPermanent; -import mage.filter.predicate.mageobject.CardTypePredicate; -import mage.filter.predicate.permanent.ControllerPredicate; import mage.target.common.TargetControlledPermanent; /** @@ -73,7 +65,6 @@ public class MultaniYavimayasAvatar extends CardImpl { this.power = new MageInt(0); this.toughness = new MageInt(0); - this.addAbility(ReachAbility.getInstance()); this.addAbility(TrampleAbility.getInstance()); @@ -82,9 +73,12 @@ public class MultaniYavimayasAvatar extends CardImpl { PermanentsOnBattlefieldCount permanentsOnBattlefieldCount = new PermanentsOnBattlefieldCount(LANDS_YOU_CONTROL_FILTER); DynamicValue powerToughnessValue = new AdditiveDynamicValue(graveyardCount, permanentsOnBattlefieldCount); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostSourceEffect(powerToughnessValue, powerToughnessValue, Duration.WhileOnBattlefield))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new BoostSourceEffect(powerToughnessValue, powerToughnessValue, Duration.WhileOnBattlefield) + .setText("{this} gets +1/+1 for each land you control and each land in your graveyard") + )); - //1G, Return two lands you control to their owner's hand: Return Multani from your graveyard to your hand. + //{1}{G}, Return two lands you control to their owner's hand: Return Multani from your graveyard to your hand. SimpleActivatedAbility returnToHand = new SimpleActivatedAbility(Zone.GRAVEYARD, new ReturnSourceFromGraveyardToHandEffect(), new ManaCostsImpl<>("{1}{G}")); returnToHand.addCost(new ReturnToHandChosenControlledPermanentCost(new TargetControlledPermanent(2, 2, LANDS_YOU_CONTROL_FILTER, true))); this.addAbility(returnToHand); diff --git a/Mage.Sets/src/mage/cards/r/RaffCapashenShipsMage.java b/Mage.Sets/src/mage/cards/r/RaffCapashenShipsMage.java index 2f47a582b7..5630cc5fe7 100644 --- a/Mage.Sets/src/mage/cards/r/RaffCapashenShipsMage.java +++ b/Mage.Sets/src/mage/cards/r/RaffCapashenShipsMage.java @@ -31,14 +31,14 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect; -import mage.constants.SubType; -import mage.constants.SuperType; import mage.abilities.keyword.FlashAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.mageobject.HistoricPredicate; @@ -71,7 +71,9 @@ public class RaffCapashenShipsMage extends CardImpl { this.addAbility(FlyingAbility.getInstance()); // You may cast historic spells as though they had flash. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CastAsThoughItHadFlashAllEffect(Duration.WhileOnBattlefield, filter, false))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new CastAsThoughItHadFlashAllEffect(Duration.WhileOnBattlefield, filter, false) + .setText("You may cast historic spells as though they had flash. <i>(Artifacts, legendaries, and Sagas are historic.)</i>"))); } public RaffCapashenShipsMage(final RaffCapashenShipsMage card) { diff --git a/Mage.Sets/src/mage/cards/r/RatColony.java b/Mage.Sets/src/mage/cards/r/RatColony.java index dfb39c6763..dae3e405ae 100644 --- a/Mage.Sets/src/mage/cards/r/RatColony.java +++ b/Mage.Sets/src/mage/cards/r/RatColony.java @@ -70,7 +70,7 @@ public class RatColony extends CardImpl { new StaticValue(0), Duration.WhileOnBattlefield, false))); // A deck can have any number of cards named Rat Colony. - this.getSpellAbility().addEffect(new InfoEffect("A deck can have any number of cards named Rat Colony.")); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new InfoEffect("A deck can have any number of cards named Rat Colony."))); } public RatColony(final RatColony card) { diff --git a/Mage.Sets/src/mage/cards/s/SaprolingMigration.java b/Mage.Sets/src/mage/cards/s/SaprolingMigration.java index d3e83fffd9..a5ba30ea7f 100644 --- a/Mage.Sets/src/mage/cards/s/SaprolingMigration.java +++ b/Mage.Sets/src/mage/cards/s/SaprolingMigration.java @@ -52,7 +52,7 @@ public class SaprolingMigration extends CardImpl { // Create two 1/1 green saproling creature tokens. If this spell was kicked, create four of those tokens instead. this.getSpellAbility().addEffect(new ConditionalOneShotEffect(new CreateTokenEffect(new SaprolingToken(), 4), new CreateTokenEffect(new SaprolingToken(), 2), KickedCondition.instance, - "Create twp 1/1 green Saproling creature tokens. If this spell was kicked, create four of those tokens instead")); + "Create two 1/1 green Saproling creature tokens. If this spell was kicked, create four of those tokens instead")); } public SaprolingMigration(final SaprolingMigration card) { diff --git a/Mage.Sets/src/mage/cards/s/SeismicShift.java b/Mage.Sets/src/mage/cards/s/SeismicShift.java index 5f50b0d730..84748a305a 100644 --- a/Mage.Sets/src/mage/cards/s/SeismicShift.java +++ b/Mage.Sets/src/mage/cards/s/SeismicShift.java @@ -51,7 +51,9 @@ public class SeismicShift extends CardImpl { // Destroy target land. Up to two target creatures can't block this turn. this.getSpellAbility().addEffect(new DestroyTargetEffect(false, false)); this.getSpellAbility().addTarget(new TargetLandPermanent()); - this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn).setTargetPointer(new SecondTargetPointer())); + this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn) + .setText("Up to two target creatures can't block this turn") + .setTargetPointer(new SecondTargetPointer())); this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2, StaticFilters.FILTER_PERMANENT_CREATURES, false)); } diff --git a/Mage.Sets/src/mage/cards/s/ShieldOfTheRealm.java b/Mage.Sets/src/mage/cards/s/ShieldOfTheRealm.java index 74544c3a2f..ef04a9549a 100644 --- a/Mage.Sets/src/mage/cards/s/ShieldOfTheRealm.java +++ b/Mage.Sets/src/mage/cards/s/ShieldOfTheRealm.java @@ -53,7 +53,8 @@ public class ShieldOfTheRealm extends CardImpl { this.subtype.add(SubType.EQUIPMENT); // If a source would deal damage to equipped creature, prevent 2 of that damage. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PreventDamageToAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.EQUIPMENT, 2, false))); + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, + new PreventDamageToAttachedEffect(Duration.WhileOnBattlefield, AttachmentType.EQUIPMENT, 2, false))); // Equip {1} this.addAbility(new EquipAbility(Outcome.PreventDamage, new GenericManaCost(1))); } diff --git a/Mage.Sets/src/mage/cards/s/Skizzik.java b/Mage.Sets/src/mage/cards/s/Skizzik.java index e300c3911f..89596ce9a7 100644 --- a/Mage.Sets/src/mage/cards/s/Skizzik.java +++ b/Mage.Sets/src/mage/cards/s/Skizzik.java @@ -48,7 +48,7 @@ import mage.constants.TargetController; public class Skizzik extends CardImpl { public Skizzik(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{3}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{3}{R}"); this.subtype.add(SubType.ELEMENTAL); this.power = new MageInt(5); @@ -61,7 +61,8 @@ public class Skizzik extends CardImpl { // Haste this.addAbility(HasteAbility.getInstance()); // At the beginning of the end step, sacrifice Skizzik unless it was kicked. - this.addAbility(new BeginningOfEndStepTriggeredAbility(new SacrificeSourceUnlessConditionEffect(KickedCondition.instance), TargetController.ANY, false)); + this.addAbility(new BeginningOfEndStepTriggeredAbility( + new SacrificeSourceUnlessConditionEffect(KickedCondition.instance), TargetController.NEXT, false)); } public Skizzik(final Skizzik card) { diff --git a/Mage.Sets/src/mage/cards/s/SongOfFreyalise.java b/Mage.Sets/src/mage/cards/s/SongOfFreyalise.java index fc2e9024c4..2935f0bd6f 100644 --- a/Mage.Sets/src/mage/cards/s/SongOfFreyalise.java +++ b/Mage.Sets/src/mage/cards/s/SongOfFreyalise.java @@ -36,14 +36,14 @@ import mage.abilities.keyword.IndestructibleAbility; import mage.abilities.keyword.TrampleAbility; import mage.abilities.keyword.VigilanceAbility; import mage.abilities.mana.AnyColorManaAbility; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SagaChapter; +import mage.constants.SubType; import mage.counters.CounterType; -import mage.filter.common.FilterControlledCreaturePermanent; +import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURES; /** * @@ -51,8 +51,6 @@ import mage.filter.common.FilterControlledCreaturePermanent; */ public class SongOfFreyalise extends CardImpl { - private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("creatures you control"); - public SongOfFreyalise(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); @@ -63,16 +61,17 @@ public class SongOfFreyalise extends CardImpl { // I, II — Until your next turn, creatures you control gain "T: Add one mana of any color." sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_I, SagaChapter.CHAPTER_II, - new GainAbilityControlledEffect(new AnyColorManaAbility(), Duration.UntilYourNextTurn, filter) + new GainAbilityControlledEffect(new AnyColorManaAbility(), Duration.UntilYourNextTurn, FILTER_CONTROLLED_CREATURES) + .setText("Until your next turn, creatures you control gain \"{T}: Add one mana of any color.\"") ); // III — Put a +1/+1 counter on each creature you control. Those creatures gain vigilance, trample, and indestructible until end of turn. - Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new AddCountersAllEffect(CounterType.P1P1.createInstance(), filter)); - ability.addEffect(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, filter) - .setText("Those creatures gain vigilance,")); - ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, filter) - .setText("trample,")); - ability.addEffect(new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, filter) + Ability ability = sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new AddCountersAllEffect(CounterType.P1P1.createInstance(), FILTER_CONTROLLED_CREATURES)); + ability.addEffect(new GainAbilityControlledEffect(VigilanceAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) + .setText("Those creatures gain vigilance")); + ability.addEffect(new GainAbilityControlledEffect(TrampleAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) + .setText(", trample")); + ability.addEffect(new GainAbilityControlledEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, FILTER_CONTROLLED_CREATURES) .setText("and indestructible until end of turn")); this.addAbility(sagaAbility); } diff --git a/Mage.Sets/src/mage/cards/t/ThallidOmnivore.java b/Mage.Sets/src/mage/cards/t/ThallidOmnivore.java index 192286c6d7..ccd8e8788d 100644 --- a/Mage.Sets/src/mage/cards/t/ThallidOmnivore.java +++ b/Mage.Sets/src/mage/cards/t/ThallidOmnivore.java @@ -87,7 +87,7 @@ class ThallidOmnivoreEffect extends OneShotEffect { public ThallidOmnivoreEffect() { super(Outcome.GainLife); - this.staticText = "If a saproling was sacrificed in this way you gain 2 life"; + this.staticText = "If a Saproling was sacrificed this way, you gain 2 life"; } public ThallidOmnivoreEffect(final ThallidOmnivoreEffect effect) { diff --git a/Mage.Sets/src/mage/cards/t/TheFirstEruption.java b/Mage.Sets/src/mage/cards/t/TheFirstEruption.java index ef0c8949b9..d456f607cd 100644 --- a/Mage.Sets/src/mage/cards/t/TheFirstEruption.java +++ b/Mage.Sets/src/mage/cards/t/TheFirstEruption.java @@ -33,7 +33,6 @@ import mage.abilities.Ability; import mage.abilities.common.SagaAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.BasicManaEffect; -import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.keyword.FlyingAbility; import mage.constants.SubType; @@ -50,7 +49,6 @@ import mage.filter.predicate.mageobject.AbilityPredicate; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.game.Game; import mage.game.permanent.Permanent; -import mage.game.permanent.token.BelzenlokDemonToken; import mage.players.Player; import mage.target.Target; import mage.target.common.TargetControlledPermanent; @@ -82,7 +80,7 @@ public class TheFirstEruption extends CardImpl { sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_II, new BasicManaEffect(Mana.RedMana(2))); // III — Sacrifice a Mountain. If you do, The First Eruption deals 3 damage to each creature. - sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new CreateTokenEffect(new BelzenlokDemonToken())); + sagaAbility.addChapterEffect(this, SagaChapter.CHAPTER_III, new TheFirstEruptionEffect()); this.addAbility(sagaAbility); } diff --git a/Mage.Sets/src/mage/cards/t/TorgaarFamineIncarnate.java b/Mage.Sets/src/mage/cards/t/TorgaarFamineIncarnate.java index 7f68af91bb..f3e0e18876 100644 --- a/Mage.Sets/src/mage/cards/t/TorgaarFamineIncarnate.java +++ b/Mage.Sets/src/mage/cards/t/TorgaarFamineIncarnate.java @@ -67,13 +67,14 @@ public class TorgaarFamineIncarnate extends CardImpl { this.toughness = new MageInt(6); // As an additional cost to cast this spell, you may sacrifice any number of creatures. - this.getSpellAbility().addCost(new SacrificeXTargetCost(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT)); + Cost cost = new SacrificeXTargetCost(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT); + cost.setText("As an additional cost to cast this spell, you may sacrifice any number of creatures."); + this.getSpellAbility().addCost(cost); // This spell costs {2} less to cast for each creature sacrificed this way. - Ability ability = new SimpleStaticAbility(Zone.STACK, new TorgaarFamineIncarnateEffectCostReductionEffect()); - this.addAbility(ability); + this.addAbility(new SimpleStaticAbility(Zone.STACK, new TorgaarFamineIncarnateEffectCostReductionEffect())); // When Torgaar, Famine Incarnate enters the battlefield, up to one target player's life total becomes half their starting life total, rounded down. - ability = new EntersBattlefieldTriggeredAbility(new TorgaarFamineIncarnateEffect(), false); + Ability ability = new EntersBattlefieldTriggeredAbility(new TorgaarFamineIncarnateEffect(), false); ability.addTarget(new TargetPlayer(0, 1, false)); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/t/TraxosScourgeOfKroog.java b/Mage.Sets/src/mage/cards/t/TraxosScourgeOfKroog.java index 9436cc3631..cfa3251d01 100644 --- a/Mage.Sets/src/mage/cards/t/TraxosScourgeOfKroog.java +++ b/Mage.Sets/src/mage/cards/t/TraxosScourgeOfKroog.java @@ -34,14 +34,13 @@ import mage.abilities.common.EntersBattlefieldTappedAbility; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; import mage.abilities.effects.common.UntapSourceEffect; -import mage.constants.SubType; -import mage.constants.SuperType; import mage.abilities.keyword.TrampleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.filter.FilterSpell; -import mage.filter.predicate.mageobject.HistoricPredicate; +import mage.constants.SubType; +import mage.constants.SuperType; +import mage.filter.common.FilterHistoricSpell; /** * @@ -49,12 +48,6 @@ import mage.filter.predicate.mageobject.HistoricPredicate; */ public class TraxosScourgeOfKroog extends CardImpl { - private static final FilterSpell filter = new FilterSpell("a historic spell"); - - static { - filter.add(new HistoricPredicate()); - } - public TraxosScourgeOfKroog(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{4}"); @@ -72,7 +65,7 @@ public class TraxosScourgeOfKroog extends CardImpl { ability.addEffect(new DontUntapInControllersUntapStepSourceEffect()); this.addAbility(ability); // Whenever you cast a historic spell untap Traxos. - this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), filter, true)); + this.addAbility(new SpellCastControllerTriggeredAbility(new UntapSourceEffect(), new FilterHistoricSpell(), false)); } public TraxosScourgeOfKroog(final TraxosScourgeOfKroog card) { diff --git a/Mage.Sets/src/mage/cards/w/WhisperBloodLiturgist.java b/Mage.Sets/src/mage/cards/w/WhisperBloodLiturgist.java index dcd1963f3d..0868e3f823 100644 --- a/Mage.Sets/src/mage/cards/w/WhisperBloodLiturgist.java +++ b/Mage.Sets/src/mage/cards/w/WhisperBloodLiturgist.java @@ -41,7 +41,7 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.Zone; import mage.filter.StaticFilters; -import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetControlledCreaturePermanent; @@ -61,8 +61,10 @@ public class WhisperBloodLiturgist extends CardImpl { this.toughness = new MageInt(2); // {T}, Sacrifice two creatures: Return target creature card from your graveyard to the battlefield. - Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect(), new TapSourceCost()); - ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(2, 2, FILTER_CONTROLLED_CREATURE_SHORT_TEXT, true))); + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ReturnFromGraveyardToBattlefieldTargetEffect() + .setText("Return target creature card from your graveyard to the battlefield"), + new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(2, 2, new FilterControlledCreaturePermanent("two creature"), true))); ability.addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/w/WizardsLightning.java b/Mage.Sets/src/mage/cards/w/WizardsLightning.java index 1359355031..fbf87292cf 100644 --- a/Mage.Sets/src/mage/cards/w/WizardsLightning.java +++ b/Mage.Sets/src/mage/cards/w/WizardsLightning.java @@ -41,13 +41,14 @@ import mage.constants.Zone; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.SubtypePredicate; import mage.target.common.TargetCreatureOrPlayer; + /** * * @author Will */ public class WizardsLightning extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("a Wizard"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("you control a Wizard"); static { filter.add(new SubtypePredicate(SubType.WIZARD)); diff --git a/Mage.Sets/src/mage/sets/Dominaria.java b/Mage.Sets/src/mage/sets/Dominaria.java index 86f2d721fb..cbf069aaf4 100644 --- a/Mage.Sets/src/mage/sets/Dominaria.java +++ b/Mage.Sets/src/mage/sets/Dominaria.java @@ -113,7 +113,7 @@ public class Dominaria extends ExpansionSet { cards.add(new SetCardInfo("Divination", 52, Rarity.COMMON, mage.cards.d.Divination.class)); cards.add(new SetCardInfo("Dread Shade", 88, Rarity.RARE, mage.cards.d.DreadShade.class)); cards.add(new SetCardInfo("Drudge Sentinel", 89, Rarity.COMMON, mage.cards.d.DrudgeSentinel.class)); - cards.add(new SetCardInfo("Dub", 15, Rarity.SPECIAL, mage.cards.d.Dub.class)); + cards.add(new SetCardInfo("Dub", 15, Rarity.COMMON, mage.cards.d.Dub.class)); cards.add(new SetCardInfo("Elfhame Druid", 159, Rarity.UNCOMMON, mage.cards.e.ElfhameDruid.class)); cards.add(new SetCardInfo("Eviscerate", 91, Rarity.COMMON, mage.cards.e.Eviscerate.class)); cards.add(new SetCardInfo("Evra, Halcyon Witness", 16, Rarity.RARE, mage.cards.e.EvraHalcyonWitness.class)); @@ -126,7 +126,7 @@ public class Dominaria extends ExpansionSet { cards.add(new SetCardInfo("Final Parting", 93, Rarity.UNCOMMON, mage.cards.f.FinalParting.class)); cards.add(new SetCardInfo("Fire Elemental", 120, Rarity.COMMON, mage.cards.f.FireElemental.class)); cards.add(new SetCardInfo("Firefist Adept", 121, Rarity.UNCOMMON, mage.cards.f.FirefistAdept.class)); - cards.add(new SetCardInfo("Firesong and Sunspeaker", 280, Rarity.RARE, mage.cards.f.FiresongAndSunspeaker.class)); + cards.add(new SetCardInfo("Firesong and Sunspeaker", 280, Rarity.RARE, mage.cards.f.FiresongAndSunspeaker.class)); cards.add(new SetCardInfo("Forebear's Blade", 214, Rarity.RARE, mage.cards.f.ForebearsBlade.class)); cards.add(new SetCardInfo("Forest", 266, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 267, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); @@ -220,7 +220,7 @@ public class Dominaria extends ExpansionSet { cards.add(new SetCardInfo("Oath of Teferi", 200, Rarity.RARE, mage.cards.o.OathOfTeferi.class)); cards.add(new SetCardInfo("On Serra's Wings", 28, Rarity.UNCOMMON, mage.cards.o.OnSerrasWings.class)); cards.add(new SetCardInfo("Opt", 60, Rarity.COMMON, mage.cards.o.Opt.class)); - cards.add(new SetCardInfo("Orcish Vandal", 137, Rarity.COMMON, mage.cards.o.OrcishVandal.class)); + cards.add(new SetCardInfo("Orcish Vandal", 137, Rarity.UNCOMMON, mage.cards.o.OrcishVandal.class)); cards.add(new SetCardInfo("Pardic Wanderer", 226, Rarity.COMMON, mage.cards.p.PardicWanderer.class)); cards.add(new SetCardInfo("Pegasus Courser", 29, Rarity.COMMON, mage.cards.p.PegasusCourser.class)); cards.add(new SetCardInfo("Phyrexian Scriptures", 100, Rarity.MYTHIC, mage.cards.p.PhyrexianScriptures.class)); @@ -285,7 +285,7 @@ public class Dominaria extends ExpansionSet { cards.add(new SetCardInfo("Teferi, Hero of Dominaria", 207, Rarity.MYTHIC, mage.cards.t.TeferiHeroOfDominaria.class)); cards.add(new SetCardInfo("Teferi, Timebender", 270, Rarity.MYTHIC, mage.cards.t.TeferiTimebender.class)); cards.add(new SetCardInfo("Tempest Djinn", 68, Rarity.RARE, mage.cards.t.TempestDjinn.class)); - cards.add(new SetCardInfo("Temporal Machinations", 271, Rarity.UNCOMMON, mage.cards.t.TemporalMachinations.class)); + cards.add(new SetCardInfo("Temporal Machinations", 271, Rarity.COMMON, mage.cards.t.TemporalMachinations.class)); cards.add(new SetCardInfo("Territorial Allosaurus", 184, Rarity.RARE, mage.cards.t.TerritorialAllosaurus.class)); cards.add(new SetCardInfo("Teshar, Ancestor's Apostle", 36, Rarity.RARE, mage.cards.t.TesharAncestorsApostle.class)); cards.add(new SetCardInfo("Tetsuko Umezawa, Fugitive", 69, Rarity.UNCOMMON, mage.cards.t.TetsukoUmezawaFugitive.class)); diff --git a/Mage/src/main/java/mage/abilities/common/AttacksWithCreaturesTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/AttacksWithCreaturesTriggeredAbility.java index 0dd32af4e7..6bae81f1d4 100644 --- a/Mage/src/main/java/mage/abilities/common/AttacksWithCreaturesTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/AttacksWithCreaturesTriggeredAbility.java @@ -14,6 +14,7 @@ import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import mage.util.CardUtil; /** * @@ -71,7 +72,7 @@ public class AttacksWithCreaturesTriggeredAbility extends TriggeredAbilityImpl { @Override public String getRule() { - StringBuilder sb = new StringBuilder("Whenever you attack with " + minAttackers + " or more "); + StringBuilder sb = new StringBuilder("Whenever you attack with " + CardUtil.numberToText(minAttackers) + " or more "); sb.append(filter.getMessage()); sb.append(", "); sb.append(super.getRule()); diff --git a/Mage/src/main/java/mage/abilities/common/BeginningOfUpkeepTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BeginningOfUpkeepTriggeredAbility.java index d0139521cc..47ad9fbf81 100644 --- a/Mage/src/main/java/mage/abilities/common/BeginningOfUpkeepTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BeginningOfUpkeepTriggeredAbility.java @@ -152,7 +152,7 @@ public class BeginningOfUpkeepTriggeredAbility extends TriggeredAbilityImpl { case OPPONENT: return sb.insert(0, generateZoneString()).insert(0, "At the beginning of each opponent's upkeep, ").toString(); case ANY: - return sb.insert(0, generateZoneString()).insert(0, "At the beginning of each player's upkeep, ").toString(); + return sb.insert(0, generateZoneString()).insert(0, "At the beginning of each upkeep, ").toString(); case CONTROLLER_ATTACHED_TO: return sb.insert(0, generateZoneString()).insert(0, "At the beginning of the upkeep of enchanted creature's controller, ").toString(); } diff --git a/Mage/src/main/java/mage/abilities/costs/common/ReturnToHandChosenControlledPermanentCost.java b/Mage/src/main/java/mage/abilities/costs/common/ReturnToHandChosenControlledPermanentCost.java index df84b8d1f4..fe8a1d269d 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/ReturnToHandChosenControlledPermanentCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/ReturnToHandChosenControlledPermanentCost.java @@ -52,9 +52,14 @@ public class ReturnToHandChosenControlledPermanentCost extends CostImpl { target.setNotTarget(true); this.addTarget(target); if (target.getMaxNumberOfTargets() > 1 && target.getMaxNumberOfTargets() == target.getNumberOfTargets()) { - this.text = "return " + CardUtil.numberToText(target.getMaxNumberOfTargets()) + ' ' + target.getTargetName() + " you control to their owner's hand"; + this.text = "return " + CardUtil.numberToText(target.getMaxNumberOfTargets()) + ' ' + + target.getTargetName() + + (target.getTargetName().endsWith(" you control") ? "" : " you control") + + " to their owner's hand"; } else { - this.text = "return " + target.getTargetName() + " you control to its owner's hand"; + this.text = "return " + target.getTargetName() + + (target.getTargetName().endsWith(" you control") ? "" : " you control") + + " to its owner's hand"; } } diff --git a/Mage/src/main/java/mage/abilities/dynamicvalue/AdditiveDynamicValue.java b/Mage/src/main/java/mage/abilities/dynamicvalue/AdditiveDynamicValue.java index 980810f3df..bd488c7cf5 100644 --- a/Mage/src/main/java/mage/abilities/dynamicvalue/AdditiveDynamicValue.java +++ b/Mage/src/main/java/mage/abilities/dynamicvalue/AdditiveDynamicValue.java @@ -1,37 +1,39 @@ package mage.abilities.dynamicvalue; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; import mage.abilities.Ability; import mage.abilities.effects.Effect; import mage.game.Game; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - public class AdditiveDynamicValue implements DynamicValue { - private List<DynamicValue> dynamicValues; + private final List<DynamicValue> dynamicValues; /** - * Creates a {@link DynamicValue} from that adds together multiple {@link DynamicValue}s. + * Creates a {@link DynamicValue} from that adds together multiple + * {@link DynamicValue}s. + * * @param dynamicValues The dynamic values to add together. */ - public AdditiveDynamicValue(DynamicValue...dynamicValues){ + public AdditiveDynamicValue(DynamicValue... dynamicValues) { this.dynamicValues = Arrays.asList(dynamicValues); } /** - * Creates a {@link DynamicValue} from that adds together multiple {@link DynamicValue}s. + * Creates a {@link DynamicValue} from that adds together multiple + * {@link DynamicValue}s. + * * @param dynamicValues The dynamic values to add together. */ - public AdditiveDynamicValue(List<DynamicValue> dynamicValues){ + public AdditiveDynamicValue(List<DynamicValue> dynamicValues) { this.dynamicValues = dynamicValues; } @Override public int calculate(Game game, Ability sourceAbility, Effect effect) { - return dynamicValues.stream().mapToInt(d->d.calculate(game, sourceAbility, effect)).sum(); + return dynamicValues.stream().mapToInt(d -> d.calculate(game, sourceAbility, effect)).sum(); } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/AddManaOfAnyColorEffect.java b/Mage/src/main/java/mage/abilities/effects/common/AddManaOfAnyColorEffect.java index 84551cb93c..0e9127e709 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/AddManaOfAnyColorEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/AddManaOfAnyColorEffect.java @@ -52,7 +52,7 @@ public class AddManaOfAnyColorEffect extends BasicManaEffect { .append(CardUtil.numberToText(amount)) .append(" mana of any ") .append(amount > 1 ? "one " : "") - .append("color to your mana pool").toString(); + .append("color").toString(); } public AddManaOfAnyColorEffect(final AddManaOfAnyColorEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/LookLibraryAndPickControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/LookLibraryAndPickControllerEffect.java index c202714545..c0606e874f 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/LookLibraryAndPickControllerEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/LookLibraryAndPickControllerEffect.java @@ -169,6 +169,7 @@ public class LookLibraryAndPickControllerEffect extends LookLibraryControllerEff * @param targetZonePickedCards * @param optional * @param putOnTopSelected + * @param anyOrder */ public LookLibraryAndPickControllerEffect(DynamicValue numberOfCards, boolean mayShuffleAfter, DynamicValue numberToPick, diff --git a/Mage/src/main/java/mage/abilities/effects/common/PreventDamageToAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PreventDamageToAttachedEffect.java index 40f319594e..2d94f7d493 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PreventDamageToAttachedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PreventDamageToAttachedEffect.java @@ -49,7 +49,7 @@ public class PreventDamageToAttachedEffect extends PreventionEffectImpl { } public PreventDamageToAttachedEffect(Duration duration, AttachmentType attachmentType, int amountToPrevent, boolean combatOnly) { - super(duration, Integer.MAX_VALUE, false, false); + super(duration, amountToPrevent, combatOnly, false); this.attachmentType = attachmentType; staticText = setText(); } @@ -88,14 +88,14 @@ public class PreventDamageToAttachedEffect extends PreventionEffectImpl { sb.append("combat "); } sb.append("damage that would be dealt to "); - sb.append(attachmentType.toString()).append(" creature"); + sb.append(attachmentType.verb()).append(" creature"); } else { sb.append("If a source would deal "); if (onlyCombat) { sb.append("combat "); } sb.append("damage to "); - sb.append(attachmentType.toString()); + sb.append(attachmentType.verb()); sb.append("creature, prevent ").append(amountToPrevent);; sb.append("of that damage"); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java index bd9def4d8e..502b70186b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/UntapLandsEffect.java @@ -57,7 +57,7 @@ public class UntapLandsEffect extends OneShotEffect { super(Outcome.Untap); this.amount = amount; this.upTo = upTo; - staticText = "Untap " + (upTo ? "up to " : "") + CardUtil.numberToText(amount, staticText) + " lands"; + staticText = "untap " + (upTo ? "up to " : "") + CardUtil.numberToText(amount, staticText) + " lands"; } public UntapLandsEffect(final UntapLandsEffect effect) { From e9766b2b0662e38a85f9f3ddc62022d43f342d03 Mon Sep 17 00:00:00 2001 From: L_J <Zzooouhh@users.noreply.github.com> Date: Thu, 19 Apr 2018 16:43:17 +0000 Subject: [PATCH 02/29] Minor Jeweled Amulet fix --- Mage.Sets/src/mage/cards/j/JeweledAmulet.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/cards/j/JeweledAmulet.java b/Mage.Sets/src/mage/cards/j/JeweledAmulet.java index aba6e0614d..452f92e951 100644 --- a/Mage.Sets/src/mage/cards/j/JeweledAmulet.java +++ b/Mage.Sets/src/mage/cards/j/JeweledAmulet.java @@ -56,13 +56,13 @@ import mage.util.CardUtil; */ public class JeweledAmulet extends CardImpl { - private static final String rule = "Put a charge counter on {this}. Note the type of mana spent to pay this activation cost. Activate this ability only if there are no charge counters on {this}"; + private static final String rule = "{1}, {T}: Put a charge counter on {this}. Note the type of mana spent to pay this activation cost. Activate this ability only if there are no charge counters on {this}"; public JeweledAmulet(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{0}"); // {1}, {tap}: Put a charge counter on Jeweled Amulet. Note the type of mana spent to pay this activation cost. Activate this ability only if there are no charge counters on Jeweled Amulet. - ConditionalActivatedAbility ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new JeweledAmuletAddCounterEffect(), new ManaCostsImpl("{1}"), new SourceHasCounterCondition(CounterType.CHARGE, 0), rule); + ConditionalActivatedAbility ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new JeweledAmuletAddCounterEffect(), new ManaCostsImpl("{1}"), new SourceHasCounterCondition(CounterType.CHARGE, 0, 0), rule); ability.addEffect(new AddCountersSourceEffect(CounterType.CHARGE.createInstance(), true)); ability.addCost(new TapSourceCost()); this.addAbility(ability); From 8f8e2758f1b28898bd7efe8c80f15cb88374311d Mon Sep 17 00:00:00 2001 From: L_J <Zzooouhh@users.noreply.github.com> Date: Thu, 19 Apr 2018 17:01:02 +0000 Subject: [PATCH 03/29] Fixed Planar Void exiling itself Its text specifies "Whenever another card..." --- Mage.Sets/src/mage/cards/p/PlanarVoid.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/cards/p/PlanarVoid.java b/Mage.Sets/src/mage/cards/p/PlanarVoid.java index 7c03a13c93..c53f95c8fc 100644 --- a/Mage.Sets/src/mage/cards/p/PlanarVoid.java +++ b/Mage.Sets/src/mage/cards/p/PlanarVoid.java @@ -86,7 +86,7 @@ class PlanarVoidTriggeredAbility extends TriggeredAbilityImpl { @Override public boolean checkTrigger(GameEvent event, Game game) { ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - if (zEvent.getToZone() == Zone.GRAVEYARD) { + if (zEvent.getToZone() == Zone.GRAVEYARD && !event.getTargetId().equals(getSourceId())) { Card card = game.getCard(event.getTargetId()); if (card != null) { this.getEffects().get(0).setTargetPointer(new FixedTarget(card.getId())); From fc0068665f6bb810c5c08325f57f5bfbebec832f Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 19:59:47 +0200 Subject: [PATCH 04/29] [DOM] Freed Dom download for Wizard source. --- .../mage/plugins/card/dl/sources/WizardCardsImageSource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java index b37e1d27cb..4f8d209704 100644 --- a/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java +++ b/Mage.Client/src/main/java/org/mage/plugins/card/dl/sources/WizardCardsImageSource.java @@ -270,7 +270,7 @@ public enum WizardCardsImageSource implements CardImageSource { supportedSets.add("UST"); // Unstable supportedSets.add("RIX"); // Rivals of Ixalan supportedSets.add("A25"); // Masters 25 -// supportedSets.add("DOM"); // Dominaria + supportedSets.add("DOM"); // Dominaria // supportedSets.add("M19"); // Core 2019 sets = new HashMap<>(); From 9b6ccabf8dbfe7eb56a74523705d4ef1837ec3d5 Mon Sep 17 00:00:00 2001 From: "richard.coates" <richard.coates@theventury.com> Date: Thu, 19 Apr 2018 20:27:46 +0200 Subject: [PATCH 05/29] Dominaria bugfixes --- Mage.Sets/src/mage/cards/w/WarlordsFury.java | 2 +- Mage.Sets/src/mage/sets/Dominaria.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/cards/w/WarlordsFury.java b/Mage.Sets/src/mage/cards/w/WarlordsFury.java index 524d1dfa5d..0ac1c86194 100644 --- a/Mage.Sets/src/mage/cards/w/WarlordsFury.java +++ b/Mage.Sets/src/mage/cards/w/WarlordsFury.java @@ -47,7 +47,7 @@ public class WarlordsFury extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}"); // Creatures you control gain first strike until end of turn. - getSpellAbility().addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), "Creatures you control gain trample until end of turn")); + getSpellAbility().addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), "Creatures you control gain first strike until end of turn")); // Draw a card. getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); diff --git a/Mage.Sets/src/mage/sets/Dominaria.java b/Mage.Sets/src/mage/sets/Dominaria.java index 86f2d721fb..065d1c736a 100644 --- a/Mage.Sets/src/mage/sets/Dominaria.java +++ b/Mage.Sets/src/mage/sets/Dominaria.java @@ -53,6 +53,7 @@ public class Dominaria extends ExpansionSet { this.numBoosterRare = 1; this.ratioBoosterMythic = 8; this.needsLegends = true; + this.maxCardNumberInBooster = 269; cards.add(new SetCardInfo("Academy Drake", 40, Rarity.UNCOMMON, mage.cards.a.AcademyDrake.class)); cards.add(new SetCardInfo("Academy Journeymage", 41, Rarity.COMMON, mage.cards.a.AcademyJourneymage.class)); @@ -126,7 +127,7 @@ public class Dominaria extends ExpansionSet { cards.add(new SetCardInfo("Final Parting", 93, Rarity.UNCOMMON, mage.cards.f.FinalParting.class)); cards.add(new SetCardInfo("Fire Elemental", 120, Rarity.COMMON, mage.cards.f.FireElemental.class)); cards.add(new SetCardInfo("Firefist Adept", 121, Rarity.UNCOMMON, mage.cards.f.FirefistAdept.class)); - cards.add(new SetCardInfo("Firesong and Sunspeaker", 280, Rarity.RARE, mage.cards.f.FiresongAndSunspeaker.class)); + cards.add(new SetCardInfo("Firesong and Sunspeaker", 280, Rarity.RARE, mage.cards.f.FiresongAndSunspeaker.class)); cards.add(new SetCardInfo("Forebear's Blade", 214, Rarity.RARE, mage.cards.f.ForebearsBlade.class)); cards.add(new SetCardInfo("Forest", 266, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Forest", 267, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); From b38c10bfc23df57f2fd8c96b3c708bc209b27dae Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 20:29:39 +0200 Subject: [PATCH 06/29] [DOM] Fixed some wrong rarities. --- Mage.Sets/src/mage/sets/Dominaria.java | 676 ++++++++++++------------- 1 file changed, 338 insertions(+), 338 deletions(-) diff --git a/Mage.Sets/src/mage/sets/Dominaria.java b/Mage.Sets/src/mage/sets/Dominaria.java index cbf069aaf4..21b1ed6889 100644 --- a/Mage.Sets/src/mage/sets/Dominaria.java +++ b/Mage.Sets/src/mage/sets/Dominaria.java @@ -1,338 +1,338 @@ -/* - * 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 Dominaria extends ExpansionSet { - - private static final Dominaria instance = new Dominaria(); - - public static Dominaria getInstance() { - return instance; - } - - private Dominaria() { - super("Dominaria", "DOM", ExpansionSet.buildDate(2018, 4, 27), SetType.EXPANSION); - this.blockName = "Dominaria"; - this.hasBoosters = true; - this.numBoosterLands = 1; - this.numBoosterCommon = 10; - this.numBoosterUncommon = 3; - this.numBoosterRare = 1; - this.ratioBoosterMythic = 8; - this.needsLegends = true; - - cards.add(new SetCardInfo("Academy Drake", 40, Rarity.UNCOMMON, mage.cards.a.AcademyDrake.class)); - cards.add(new SetCardInfo("Academy Journeymage", 41, Rarity.COMMON, mage.cards.a.AcademyJourneymage.class)); - cards.add(new SetCardInfo("Adamant Will", 2, Rarity.COMMON, mage.cards.a.AdamantWill.class)); - cards.add(new SetCardInfo("Adeliz, the Cinder Wind", 190, Rarity.UNCOMMON, mage.cards.a.AdelizTheCinderWind.class)); - cards.add(new SetCardInfo("Adventurous Impulse", 153, Rarity.COMMON, mage.cards.a.AdventurousImpulse.class)); - cards.add(new SetCardInfo("Aesthir Glider", 209, Rarity.COMMON, mage.cards.a.AesthirGlider.class)); - cards.add(new SetCardInfo("Amaranthine Wall", 210, Rarity.UNCOMMON, mage.cards.a.AmaranthineWall.class)); - cards.add(new SetCardInfo("Ancient Animus", 154, Rarity.COMMON, mage.cards.a.AncientAnimus.class)); - cards.add(new SetCardInfo("Arbor Armament", 155, Rarity.COMMON, mage.cards.a.ArborArmament.class)); - cards.add(new SetCardInfo("Arcane Flight", 43, Rarity.COMMON, mage.cards.a.ArcaneFlight.class)); - cards.add(new SetCardInfo("Artificer's Assistant", 44, Rarity.COMMON, mage.cards.a.ArtificersAssistant.class)); - cards.add(new SetCardInfo("Arvad the Cursed", 191, Rarity.UNCOMMON, mage.cards.a.ArvadTheCursed.class)); - cards.add(new SetCardInfo("Aryel, Knight of Windgrace", 192, Rarity.RARE, mage.cards.a.AryelKnightOfWindgrace.class)); - cards.add(new SetCardInfo("Aven Sentry", 3, Rarity.COMMON, mage.cards.a.AvenSentry.class)); - cards.add(new SetCardInfo("Baird, Steward of Argive", 4, Rarity.UNCOMMON, mage.cards.b.BairdStewardOfArgive.class)); - cards.add(new SetCardInfo("Baloth Gorger", 156, Rarity.COMMON, mage.cards.b.BalothGorger.class)); - cards.add(new SetCardInfo("Befuddle", 45, Rarity.COMMON, mage.cards.b.Befuddle.class)); - cards.add(new SetCardInfo("Benalish Honor Guard", 5, Rarity.COMMON, mage.cards.b.BenalishHonorGuard.class)); - cards.add(new SetCardInfo("Benalish Marshal", 6, Rarity.RARE, mage.cards.b.BenalishMarshal.class)); - cards.add(new SetCardInfo("Blackblade Reforged", 211, Rarity.RARE, mage.cards.b.BlackbladeReforged.class)); - cards.add(new SetCardInfo("Blessed Light", 7, Rarity.UNCOMMON, mage.cards.b.BlessedLight.class)); - cards.add(new SetCardInfo("Blessing of Belzenlok", 77, Rarity.COMMON, mage.cards.b.BlessingOfBelzenlok.class)); - cards.add(new SetCardInfo("Blink of an Eye", 46, Rarity.COMMON, mage.cards.b.BlinkOfAnEye.class)); - cards.add(new SetCardInfo("Bloodstone Goblin", 115, Rarity.COMMON, mage.cards.b.BloodstoneGoblin.class)); - cards.add(new SetCardInfo("Bloodtallow Candle", 212, Rarity.COMMON, mage.cards.b.BloodtallowCandle.class)); - cards.add(new SetCardInfo("Board the Weatherlight", 8, Rarity.UNCOMMON, mage.cards.b.BoardTheWeatherlight.class)); - cards.add(new SetCardInfo("Broken Bond", 157, Rarity.COMMON, mage.cards.b.BrokenBond.class)); - cards.add(new SetCardInfo("Cabal Evangel", 78, Rarity.COMMON, mage.cards.c.CabalEvangel.class)); - cards.add(new SetCardInfo("Cabal Paladin", 79, Rarity.COMMON, mage.cards.c.CabalPaladin.class)); - cards.add(new SetCardInfo("Cabal Stronghold", 238, Rarity.RARE, mage.cards.c.CabalStronghold.class)); - cards.add(new SetCardInfo("Caligo Skin-Witch", 80, Rarity.COMMON, mage.cards.c.CaligoSkinWitch.class)); - cards.add(new SetCardInfo("Call the Cavalry", 9, Rarity.COMMON, mage.cards.c.CallTheCavalry.class)); - cards.add(new SetCardInfo("Cast Down", 81, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); - cards.add(new SetCardInfo("Chainer's Torment", 82, Rarity.UNCOMMON, mage.cards.c.ChainersTorment.class)); - cards.add(new SetCardInfo("Champion of the Flame", 116, Rarity.UNCOMMON, mage.cards.c.ChampionOfTheFlame.class)); - cards.add(new SetCardInfo("Chandra's Outburst", 276, Rarity.RARE, mage.cards.c.ChandrasOutburst.class)); - cards.add(new SetCardInfo("Chandra, Bold Pyromancer", 275, Rarity.MYTHIC, mage.cards.c.ChandraBoldPyromancer.class)); - cards.add(new SetCardInfo("Charge", 10, Rarity.COMMON, mage.cards.c.Charge.class)); - cards.add(new SetCardInfo("Clifftop Retreat", 239, Rarity.RARE, mage.cards.c.ClifftopRetreat.class)); - cards.add(new SetCardInfo("Cloudreader Sphinx", 47, Rarity.COMMON, mage.cards.c.CloudreaderSphinx.class)); - cards.add(new SetCardInfo("Cold-Water Snapper", 48, Rarity.COMMON, mage.cards.c.ColdWaterSnapper.class)); - cards.add(new SetCardInfo("Curator's Ward", 49, Rarity.UNCOMMON, mage.cards.c.CuratorsWard.class)); - cards.add(new SetCardInfo("Corrosive Ooze", 158, Rarity.COMMON, mage.cards.c.CorrosiveOoze.class)); - cards.add(new SetCardInfo("D'Avenant Trapper", 11, Rarity.COMMON, mage.cards.d.DAvenantTrapper.class)); - cards.add(new SetCardInfo("Damping Sphere", 213, Rarity.UNCOMMON, mage.cards.d.DampingSphere.class)); - cards.add(new SetCardInfo("Danitha Capashen, Paragon", 12, Rarity.UNCOMMON, mage.cards.d.DanithaCapashenParagon.class)); - cards.add(new SetCardInfo("Darigaaz Reincarnated", 193, Rarity.MYTHIC, mage.cards.d.DarigaazReincarnated.class)); - cards.add(new SetCardInfo("Daring Archaeologist", 13, Rarity.RARE, mage.cards.d.DaringArchaeologist.class)); - cards.add(new SetCardInfo("Dark Bargain", 83, Rarity.COMMON, mage.cards.d.DarkBargain.class)); - cards.add(new SetCardInfo("Dauntless Bodyguard", 14, Rarity.UNCOMMON, mage.cards.d.DauntlessBodyguard.class)); - cards.add(new SetCardInfo("Deathbloom Thallid", 84, Rarity.COMMON, mage.cards.d.DeathbloomThallid.class)); - cards.add(new SetCardInfo("Deep Freeze", 50, Rarity.COMMON, mage.cards.d.DeepFreeze.class)); - cards.add(new SetCardInfo("Demonic Vigor", 85, Rarity.COMMON, mage.cards.d.DemonicVigor.class)); - cards.add(new SetCardInfo("Demonlord Belzenlok", 86, Rarity.MYTHIC, mage.cards.d.DemonlordBelzenlok.class)); - cards.add(new SetCardInfo("Diligent Excavator", 51, Rarity.UNCOMMON, mage.cards.d.DiligentExcavator.class)); - cards.add(new SetCardInfo("Divest", 87, Rarity.COMMON, mage.cards.d.Divest.class)); - cards.add(new SetCardInfo("Divination", 52, Rarity.COMMON, mage.cards.d.Divination.class)); - cards.add(new SetCardInfo("Dread Shade", 88, Rarity.RARE, mage.cards.d.DreadShade.class)); - cards.add(new SetCardInfo("Drudge Sentinel", 89, Rarity.COMMON, mage.cards.d.DrudgeSentinel.class)); - cards.add(new SetCardInfo("Dub", 15, Rarity.COMMON, mage.cards.d.Dub.class)); - cards.add(new SetCardInfo("Elfhame Druid", 159, Rarity.UNCOMMON, mage.cards.e.ElfhameDruid.class)); - cards.add(new SetCardInfo("Eviscerate", 91, Rarity.COMMON, mage.cards.e.Eviscerate.class)); - cards.add(new SetCardInfo("Evra, Halcyon Witness", 16, Rarity.RARE, mage.cards.e.EvraHalcyonWitness.class)); - cards.add(new SetCardInfo("Excavation Elephant", 17, Rarity.COMMON, mage.cards.e.ExcavationElephant.class)); - cards.add(new SetCardInfo("Fall of the Thran", 18, Rarity.RARE, mage.cards.f.FallOfTheThran.class)); - cards.add(new SetCardInfo("Feral Abomination", 92, Rarity.COMMON, mage.cards.f.FeralAbomination.class)); - cards.add(new SetCardInfo("Fervent Strike", 117, Rarity.COMMON, mage.cards.f.FerventStrike.class)); - cards.add(new SetCardInfo("Fiery Intervention", 118, Rarity.COMMON, mage.cards.f.FieryIntervention.class)); - cards.add(new SetCardInfo("Fight with Fire", 119, Rarity.UNCOMMON, mage.cards.f.FightWithFire.class)); - cards.add(new SetCardInfo("Final Parting", 93, Rarity.UNCOMMON, mage.cards.f.FinalParting.class)); - cards.add(new SetCardInfo("Fire Elemental", 120, Rarity.COMMON, mage.cards.f.FireElemental.class)); - cards.add(new SetCardInfo("Firefist Adept", 121, Rarity.UNCOMMON, mage.cards.f.FirefistAdept.class)); - cards.add(new SetCardInfo("Firesong and Sunspeaker", 280, Rarity.RARE, mage.cards.f.FiresongAndSunspeaker.class)); - cards.add(new SetCardInfo("Forebear's Blade", 214, Rarity.RARE, mage.cards.f.ForebearsBlade.class)); - cards.add(new SetCardInfo("Forest", 266, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 267, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 268, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Forest", 269, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Frenzied Rage", 124, Rarity.COMMON, mage.cards.f.FrenziedRage.class)); - cards.add(new SetCardInfo("Fungal Infection", 94, Rarity.COMMON, mage.cards.f.FungalInfection.class)); - cards.add(new SetCardInfo("Fungal Plots", 160, Rarity.UNCOMMON, mage.cards.f.FungalPlots.class)); - cards.add(new SetCardInfo("Gaea's Blessing", 161, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); - cards.add(new SetCardInfo("Gaea's Protector", 162, Rarity.COMMON, mage.cards.g.GaeasProtector.class)); - cards.add(new SetCardInfo("Garna, the Bloodflame", 194, Rarity.UNCOMMON, mage.cards.g.GarnaTheBloodflame.class)); - cards.add(new SetCardInfo("Ghitu Chronicler", 125, Rarity.COMMON, mage.cards.g.GhituChronicler.class)); - cards.add(new SetCardInfo("Ghitu Journeymage", 126, Rarity.COMMON, mage.cards.g.GhituJourneymage.class)); - cards.add(new SetCardInfo("Ghitu Lavarunner", 127, Rarity.COMMON, mage.cards.g.GhituLavarunner.class)); - cards.add(new SetCardInfo("Gideon's Reproach", 19, Rarity.COMMON, mage.cards.g.GideonsReproach.class)); - cards.add(new SetCardInfo("Gift of Growth", 163, Rarity.COMMON, mage.cards.g.GiftofGrowth.class)); - cards.add(new SetCardInfo("Gilded Lotus", 215, Rarity.RARE, mage.cards.g.GildedLotus.class)); - cards.add(new SetCardInfo("Goblin Barrage", 128, Rarity.UNCOMMON, mage.cards.g.GoblinBarrage.class)); - cards.add(new SetCardInfo("Goblin Chainwhirler", 129, Rarity.RARE, mage.cards.g.GoblinChainwhirler.class)); - cards.add(new SetCardInfo("Goblin Warchief", 130, Rarity.UNCOMMON, mage.cards.g.GoblinWarchief.class)); - cards.add(new SetCardInfo("Grand Warlord Radha", 195, Rarity.RARE, mage.cards.g.GrandWarlordRadha.class)); - cards.add(new SetCardInfo("Grow from the Ashes", 164, Rarity.COMMON, mage.cards.g.GrowFromTheAshes.class)); - cards.add(new SetCardInfo("Grunn, the Lonely King", 165, Rarity.UNCOMMON, mage.cards.g.GrunnTheLonelyKing.class)); - cards.add(new SetCardInfo("Guardians of Koilos", 216, Rarity.COMMON, mage.cards.g.GuardiansOfKoilos.class)); - cards.add(new SetCardInfo("Hallar, the Firefletcher", 196, Rarity.UNCOMMON, mage.cards.h.HallarTheFirefletcher.class)); - cards.add(new SetCardInfo("Haphazard Bombardment", 131, Rarity.RARE, mage.cards.h.HaphazardBombardment.class)); - cards.add(new SetCardInfo("Healing Grace", 20, Rarity.COMMON, mage.cards.h.HealingGrace.class)); - cards.add(new SetCardInfo("Helm of the Host", 217, Rarity.RARE, mage.cards.h.HelmOfTheHost.class)); - cards.add(new SetCardInfo("Hinterland Harbor", 240, Rarity.RARE, mage.cards.h.HinterlandHarbor.class)); - cards.add(new SetCardInfo("History of Benalia", 21, Rarity.MYTHIC, mage.cards.h.HistoryOfBenalia.class)); - cards.add(new SetCardInfo("Homarid Explorer", 53, Rarity.UNCOMMON, mage.cards.h.HomaridExplorer.class)); - cards.add(new SetCardInfo("Howling Golem", 218, Rarity.UNCOMMON, mage.cards.h.HowlingGolem.class)); - cards.add(new SetCardInfo("Icy Manipulator", 219, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); - cards.add(new SetCardInfo("In Bolas's Clutches", 54, Rarity.UNCOMMON, mage.cards.i.InBolassClutches.class)); - cards.add(new SetCardInfo("Invoke the Divine", 22, Rarity.COMMON, mage.cards.i.InvokeTheDivine.class)); - cards.add(new SetCardInfo("Island", 254, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 255, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 256, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Island", 257, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Isolated Chapel", 241, Rarity.RARE, mage.cards.i.IsolatedChapel.class)); - cards.add(new SetCardInfo("Jaya Ballard", 132, Rarity.MYTHIC, mage.cards.j.JayaBallard.class)); - cards.add(new SetCardInfo("Jaya's Immolating Inferno", 133, Rarity.RARE, mage.cards.j.JayasImmolatingInferno.class)); - cards.add(new SetCardInfo("Jhoira, Weatherlight Captain", 197, Rarity.MYTHIC, mage.cards.j.JhoiraWeatherlightCaptain.class)); - cards.add(new SetCardInfo("Jhoira's Familiar", 220, Rarity.UNCOMMON, mage.cards.j.JhoirasFamiliar.class)); - cards.add(new SetCardInfo("Jodah, Archmage Eternal", 198, Rarity.RARE, mage.cards.j.JodahArchmageEternal.class)); - cards.add(new SetCardInfo("Josu Vess, Lich Knight", 95, Rarity.RARE, mage.cards.j.JosuVessLichKnight.class)); - cards.add(new SetCardInfo("Jousting Lance", 221, Rarity.COMMON, mage.cards.j.JoustingLance.class)); - cards.add(new SetCardInfo("Juggernaut", 222, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); - cards.add(new SetCardInfo("Kamahl's Druidic Vow", 166, Rarity.RARE, mage.cards.k.KamahlsDruidicVow.class)); - cards.add(new SetCardInfo("Karn, Scion of Urza", 1, Rarity.MYTHIC, mage.cards.k.KarnScionOfUrza.class)); - cards.add(new SetCardInfo("Karn's Temporal Sundering", 55, Rarity.RARE, mage.cards.k.KarnsTemporalSundering.class)); - cards.add(new SetCardInfo("Karplusan Hound", 277, Rarity.UNCOMMON, mage.cards.k.KarplusanHound.class)); - cards.add(new SetCardInfo("Kazarov, Sengir Pureblood", 96, Rarity.RARE, mage.cards.k.KazarovSengirPureblood.class)); - cards.add(new SetCardInfo("Keldon Overseer", 134, Rarity.COMMON, mage.cards.k.KeldonOverseer.class)); - cards.add(new SetCardInfo("Keldon Raider", 135, Rarity.COMMON, mage.cards.k.KeldonRaider.class)); - cards.add(new SetCardInfo("Keldon Warcaller", 136, Rarity.COMMON, mage.cards.k.KeldonWarcaller.class)); - cards.add(new SetCardInfo("Knight of Grace", 23, Rarity.UNCOMMON, mage.cards.k.KnightOfGrace.class)); - cards.add(new SetCardInfo("Knight of Malice", 97, Rarity.UNCOMMON, mage.cards.k.KnightOfMalice.class)); - cards.add(new SetCardInfo("Knight of New Benalia", 24, Rarity.COMMON, mage.cards.k.KnightOfNewBenalia.class)); - cards.add(new SetCardInfo("Krosan Druid", 167, Rarity.COMMON, mage.cards.k.KrosanDruid.class)); - cards.add(new SetCardInfo("Kwende, Pride of Femeref", 25, Rarity.UNCOMMON, mage.cards.k.KwendePrideOfFemeref.class)); - cards.add(new SetCardInfo("Lich's Mastery", 98, Rarity.RARE, mage.cards.l.LichsMastery.class)); - cards.add(new SetCardInfo("Lingering Phantom", 99, Rarity.UNCOMMON, mage.cards.l.LingeringPhantom.class)); - cards.add(new SetCardInfo("Llanowar Elves", 168, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); - cards.add(new SetCardInfo("Llanowar Envoy", 169, Rarity.COMMON, mage.cards.l.LlanowarEnvoy.class)); - cards.add(new SetCardInfo("Llanowar Scout", 170, Rarity.COMMON, mage.cards.l.LlanowarScout.class)); - cards.add(new SetCardInfo("Lyra Dawnbringer", 26, Rarity.MYTHIC, mage.cards.l.LyraDawnbringer.class)); - cards.add(new SetCardInfo("Mammoth Spider", 171, Rarity.COMMON, mage.cards.m.MammothSpider.class)); - cards.add(new SetCardInfo("Marwyn, the Nurturer", 172, Rarity.RARE, mage.cards.m.MarwynTheNurturer.class)); - cards.add(new SetCardInfo("Meandering River", 274, Rarity.COMMON, mage.cards.m.MeanderingRiver.class)); - cards.add(new SetCardInfo("Memorial to Folly", 242, Rarity.UNCOMMON, mage.cards.m.MemorialToFolly.class)); - cards.add(new SetCardInfo("Memorial to Genius", 243, Rarity.UNCOMMON, mage.cards.m.MemorialToGenius.class)); - cards.add(new SetCardInfo("Memorial to Glory", 244, Rarity.UNCOMMON, mage.cards.m.MemorialToGlory.class)); - cards.add(new SetCardInfo("Memorial to Unity", 245, Rarity.UNCOMMON, mage.cards.m.MemorialToUnity.class)); - cards.add(new SetCardInfo("Memorial to War", 246, Rarity.UNCOMMON, mage.cards.m.MemorialToWar.class)); - cards.add(new SetCardInfo("Merfolk Trickster", 56, Rarity.UNCOMMON, mage.cards.m.MerfolkTrickster.class)); - cards.add(new SetCardInfo("Mesa Unicorn", 27, Rarity.COMMON, mage.cards.m.MesaUnicorn.class)); - cards.add(new SetCardInfo("Mishra's Self-Replicator", 223, Rarity.RARE, mage.cards.m.MishrasSelfReplicator.class)); - cards.add(new SetCardInfo("Mountain", 262, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 263, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 264, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Mountain", 265, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Muldrotha, the Gravetide", 199, Rarity.MYTHIC, mage.cards.m.MuldrothaTheGravetide.class)); - cards.add(new SetCardInfo("Multani, Yavimaya's Avatar", 174, Rarity.MYTHIC, mage.cards.m.MultaniYavimayasAvatar.class)); - cards.add(new SetCardInfo("Mox Amber", 224, Rarity.MYTHIC, mage.cards.m.MoxAmber.class)); - cards.add(new SetCardInfo("Naban, Dean of Iteration", 58, Rarity.RARE, mage.cards.n.NabanDeanOfIteration.class)); - cards.add(new SetCardInfo("Naru Meha, Master Wizard", 59, Rarity.MYTHIC, mage.cards.n.NaruMehaMasterWizard.class)); - cards.add(new SetCardInfo("Nature's Spiral", 175, Rarity.UNCOMMON, mage.cards.n.NaturesSpiral.class)); - cards.add(new SetCardInfo("Navigator's Compass", 225, Rarity.COMMON, mage.cards.n.NavigatorsCompass.class)); - cards.add(new SetCardInfo("Niambi, Faithful Healer", 272, Rarity.RARE, mage.cards.n.NiambiFaithfulHealer.class)); - cards.add(new SetCardInfo("Oath of Teferi", 200, Rarity.RARE, mage.cards.o.OathOfTeferi.class)); - cards.add(new SetCardInfo("On Serra's Wings", 28, Rarity.UNCOMMON, mage.cards.o.OnSerrasWings.class)); - cards.add(new SetCardInfo("Opt", 60, Rarity.COMMON, mage.cards.o.Opt.class)); - cards.add(new SetCardInfo("Orcish Vandal", 137, Rarity.UNCOMMON, mage.cards.o.OrcishVandal.class)); - cards.add(new SetCardInfo("Pardic Wanderer", 226, Rarity.COMMON, mage.cards.p.PardicWanderer.class)); - cards.add(new SetCardInfo("Pegasus Courser", 29, Rarity.COMMON, mage.cards.p.PegasusCourser.class)); - cards.add(new SetCardInfo("Phyrexian Scriptures", 100, Rarity.MYTHIC, mage.cards.p.PhyrexianScriptures.class)); - cards.add(new SetCardInfo("Pierce the Sky", 176, Rarity.COMMON, mage.cards.p.PierceTheSky.class)); - cards.add(new SetCardInfo("Plains", 250, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 251, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 252, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Plains", 253, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Powerstone Shard", 227, Rarity.COMMON, mage.cards.p.PowerstoneShard.class)); - cards.add(new SetCardInfo("Precognition Field", 61, Rarity.RARE, mage.cards.p.PrecognitionField.class)); - cards.add(new SetCardInfo("Primevals' Glorious Rebirth", 201, Rarity.RARE, mage.cards.p.PrimevalsGloriousRebirth.class)); - cards.add(new SetCardInfo("Primordial Wurm", 177, Rarity.COMMON, mage.cards.p.PrimordialWurm.class)); - cards.add(new SetCardInfo("Pyromantic Pilgrim", 278, Rarity.COMMON, mage.cards.p.PyromanticPilgrim.class)); - cards.add(new SetCardInfo("Radiating Lightning", 138, Rarity.COMMON, mage.cards.r.RadiatingLightning.class)); - cards.add(new SetCardInfo("Raff Capashen, Ship's Mage", 202, Rarity.UNCOMMON, mage.cards.r.RaffCapashenShipsMage.class)); - cards.add(new SetCardInfo("Rampaging Cyclops", 139, Rarity.COMMON, mage.cards.r.RampagingCyclops.class)); - cards.add(new SetCardInfo("Rat Colony", 101, Rarity.COMMON, mage.cards.r.RatColony.class)); - cards.add(new SetCardInfo("Relic Runner", 62, Rarity.COMMON, mage.cards.r.RelicRunner.class)); - cards.add(new SetCardInfo("Rescue", 63, Rarity.COMMON, mage.cards.r.Rescue.class)); - cards.add(new SetCardInfo("Rite of Belzenlok", 102, Rarity.RARE, mage.cards.r.RiteOfBelzenlok.class)); - cards.add(new SetCardInfo("Rona, Disciple of Gix", 203, Rarity.UNCOMMON, mage.cards.r.RonaDiscipleOfGix.class)); - cards.add(new SetCardInfo("Run Amok", 140, Rarity.COMMON, mage.cards.r.RunAmok.class)); - cards.add(new SetCardInfo("Sage of Lat-Nam", 64, Rarity.UNCOMMON, mage.cards.s.SageOfLatNam.class)); - cards.add(new SetCardInfo("Sanctum Spirit", 30, Rarity.UNCOMMON, mage.cards.s.SanctumSpirit.class)); - cards.add(new SetCardInfo("Saproling Migration", 178, Rarity.COMMON, mage.cards.s.SaprolingMigration.class)); - cards.add(new SetCardInfo("Seal Away", 31, Rarity.UNCOMMON, mage.cards.s.SealAway.class)); - cards.add(new SetCardInfo("Seismic Shift", 141, Rarity.COMMON, mage.cards.s.SeismicShift.class)); - cards.add(new SetCardInfo("Sentinel of the Pearl Trident", 65, Rarity.UNCOMMON, mage.cards.s.SentinelOfThePearlTrident.class)); - cards.add(new SetCardInfo("Sergeant-at-Arms", 32, Rarity.COMMON, mage.cards.s.SergeantAtArms.class)); - cards.add(new SetCardInfo("Serra Angel", 33, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); - cards.add(new SetCardInfo("Serra Disciple", 34, Rarity.COMMON, mage.cards.s.SerraDisciple.class)); - cards.add(new SetCardInfo("Settle the Score", 103, Rarity.UNCOMMON, mage.cards.s.SettleTheScore.class)); - cards.add(new SetCardInfo("Shalai, Voice of Plenty", 35, Rarity.RARE, mage.cards.s.ShalaiVoiceOfPlenty.class)); - cards.add(new SetCardInfo("Shanna, Sisay's Legacy", 204, Rarity.UNCOMMON, mage.cards.s.ShannaSisaysLegacy.class)); - cards.add(new SetCardInfo("Shield of the Realm", 228, Rarity.UNCOMMON, mage.cards.s.ShieldOfTheRealm.class)); - cards.add(new SetCardInfo("Shivan Fire", 142, Rarity.COMMON, mage.cards.s.ShivanFire.class)); - cards.add(new SetCardInfo("Short Sword", 229, Rarity.COMMON, mage.cards.s.ShortSword.class)); - cards.add(new SetCardInfo("Siege-Gang Commander", 143, Rarity.RARE, mage.cards.s.SiegeGangCommander.class)); - cards.add(new SetCardInfo("Skirk Prospector", 144, Rarity.COMMON, mage.cards.s.SkirkProspector.class)); - cards.add(new SetCardInfo("Skittering Surveyor", 230, Rarity.COMMON, mage.cards.s.SkitteringSurveyor.class)); - cards.add(new SetCardInfo("Skizzik", 145, Rarity.UNCOMMON, mage.cards.s.Skizzik.class)); - cards.add(new SetCardInfo("Slimefoot, the Stowaway", 205, Rarity.UNCOMMON, mage.cards.s.SlimefootTheStowaway.class)); - cards.add(new SetCardInfo("Slinn Voda, the Rising Deep", 66, Rarity.UNCOMMON, mage.cards.s.SlinnVodaTheRisingDeep.class)); - cards.add(new SetCardInfo("Song of Freyalise", 179, Rarity.UNCOMMON, mage.cards.s.SongOfFreyalise.class)); - cards.add(new SetCardInfo("Sorcerer's Wand", 231, Rarity.UNCOMMON, mage.cards.s.SorcerersWand.class)); - cards.add(new SetCardInfo("Soul Salvage", 104, Rarity.COMMON, mage.cards.s.SoulSalvage.class)); - cards.add(new SetCardInfo("Sparring Construct", 232, Rarity.COMMON, mage.cards.s.SparringConstruct.class)); - cards.add(new SetCardInfo("Spore Swarm", 180, Rarity.UNCOMMON, mage.cards.s.SporeSwarm.class)); - cards.add(new SetCardInfo("Sporecrown Thallid", 181, Rarity.UNCOMMON, mage.cards.s.SporecrownThallid.class)); - cards.add(new SetCardInfo("Squee, the Immortal", 146, Rarity.RARE, mage.cards.s.SqueeTheImmortal.class)); - cards.add(new SetCardInfo("Steel Leaf Champion", 182, Rarity.RARE, mage.cards.s.SteelLeafChampion.class)); - cards.add(new SetCardInfo("Stronghold Confessor", 105, Rarity.COMMON, mage.cards.s.StrongholdConfessor.class)); - cards.add(new SetCardInfo("Sulfur Falls", 247, Rarity.RARE, mage.cards.s.SulfurFalls.class)); - cards.add(new SetCardInfo("Swamp", 258, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 259, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 260, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Swamp", 261, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); - cards.add(new SetCardInfo("Sylvan Awakening", 183, Rarity.RARE, mage.cards.s.SylvanAwakening.class)); - cards.add(new SetCardInfo("Syncopate", 67, Rarity.UNCOMMON, mage.cards.s.Syncopate.class)); - cards.add(new SetCardInfo("Tatyova, Benthic Druid", 206, Rarity.UNCOMMON, mage.cards.t.TatyovaBenthicDruid.class)); - cards.add(new SetCardInfo("Teferi's Sentinel", 273, Rarity.UNCOMMON, mage.cards.t.TeferisSentinel.class)); - cards.add(new SetCardInfo("Teferi, Hero of Dominaria", 207, Rarity.MYTHIC, mage.cards.t.TeferiHeroOfDominaria.class)); - cards.add(new SetCardInfo("Teferi, Timebender", 270, Rarity.MYTHIC, mage.cards.t.TeferiTimebender.class)); - cards.add(new SetCardInfo("Tempest Djinn", 68, Rarity.RARE, mage.cards.t.TempestDjinn.class)); - cards.add(new SetCardInfo("Temporal Machinations", 271, Rarity.COMMON, mage.cards.t.TemporalMachinations.class)); - cards.add(new SetCardInfo("Territorial Allosaurus", 184, Rarity.RARE, mage.cards.t.TerritorialAllosaurus.class)); - cards.add(new SetCardInfo("Teshar, Ancestor's Apostle", 36, Rarity.RARE, mage.cards.t.TesharAncestorsApostle.class)); - cards.add(new SetCardInfo("Tetsuko Umezawa, Fugitive", 69, Rarity.UNCOMMON, mage.cards.t.TetsukoUmezawaFugitive.class)); - cards.add(new SetCardInfo("Thallid Omnivore", 106, Rarity.COMMON, mage.cards.t.ThallidOmnivore.class)); - cards.add(new SetCardInfo("Thallid Soothsayer", 107, Rarity.UNCOMMON, mage.cards.t.ThallidSoothsayer.class)); - cards.add(new SetCardInfo("The Antiquities War", 42, Rarity.RARE, mage.cards.t.TheAntiquitiesWar.class)); - cards.add(new SetCardInfo("The Eldest Reborn", 90, Rarity.UNCOMMON, mage.cards.t.TheEldestReborn.class)); - cards.add(new SetCardInfo("The First Eruption", 122, Rarity.RARE, mage.cards.t.TheFirstEruption.class)); - cards.add(new SetCardInfo("The Flame of Keld", 123, Rarity.UNCOMMON, mage.cards.t.TheFlameOfKeld.class)); - cards.add(new SetCardInfo("The Mending of Dominaria", 173, Rarity.RARE, mage.cards.t.TheMendingOfDominaria.class)); - cards.add(new SetCardInfo("The Mirari Conjecture", 57, Rarity.RARE, mage.cards.t.TheMirariConjecture.class)); - cards.add(new SetCardInfo("Thorn Elemental", 185, Rarity.UNCOMMON, mage.cards.t.ThornElemental.class)); - cards.add(new SetCardInfo("Thran Temporal Gateway", 233, Rarity.RARE, mage.cards.t.ThranTemporalGateway.class)); - cards.add(new SetCardInfo("Tiana, Ship's Caretaker", 208, Rarity.UNCOMMON, mage.cards.t.TianaShipsCaretaker.class)); - cards.add(new SetCardInfo("Timber Gorge", 279, Rarity.COMMON, mage.cards.t.TimberGorge.class)); - cards.add(new SetCardInfo("Time of Ice", 70, Rarity.UNCOMMON, mage.cards.t.TimeOfIce.class)); - cards.add(new SetCardInfo("Tolarian Scholar", 71, Rarity.COMMON, mage.cards.t.TolarianScholar.class)); - cards.add(new SetCardInfo("Torgaar, Famine Incarnate", 108, Rarity.RARE, mage.cards.t.TorgaarFamineIncarnate.class)); - cards.add(new SetCardInfo("Tragic Poet", 37, Rarity.COMMON, mage.cards.t.TragicPoet.class)); - cards.add(new SetCardInfo("Traxos, Scourge of Kroog", 234, Rarity.RARE, mage.cards.t.TraxosScourgeOfKroog.class)); - cards.add(new SetCardInfo("Triumph of Gerrard", 38, Rarity.UNCOMMON, mage.cards.t.TriumphOfGerrard.class)); - cards.add(new SetCardInfo("Two-Headed Giant", 147, Rarity.RARE, mage.cards.t.TwoHeadedGiant.class)); - cards.add(new SetCardInfo("Untamed Kavu", 186, Rarity.UNCOMMON, mage.cards.u.UntamedKavu.class)); - cards.add(new SetCardInfo("Unwind", 72, Rarity.COMMON, mage.cards.u.Unwind.class)); - cards.add(new SetCardInfo("Urgoros, the Empty One", 109, Rarity.UNCOMMON, mage.cards.u.UrgorosTheEmptyOne.class)); - cards.add(new SetCardInfo("Urza's Ruinous Blast", 39, Rarity.RARE, mage.cards.u.UrzasRuinousBlast.class)); - cards.add(new SetCardInfo("Urza's Tome", 235, Rarity.UNCOMMON, mage.cards.u.UrzasTome.class)); - cards.add(new SetCardInfo("Valduk, Keeper of the Flame", 148, Rarity.UNCOMMON, mage.cards.v.ValdukKeeperOfTheFlame.class)); - cards.add(new SetCardInfo("Verdant Force", 187, Rarity.RARE, mage.cards.v.VerdantForce.class)); - cards.add(new SetCardInfo("Verix Bladewing", 149, Rarity.MYTHIC, mage.cards.v.VerixBladewing.class)); - cards.add(new SetCardInfo("Vicious Offering", 110, Rarity.COMMON, mage.cards.v.ViciousOffering.class)); - cards.add(new SetCardInfo("Vodalian Arcanist", 73, Rarity.COMMON, mage.cards.v.VodalianArcanist.class)); - cards.add(new SetCardInfo("Voltaic Servant", 236, Rarity.COMMON, mage.cards.v.VoltaicServant.class)); - cards.add(new SetCardInfo("Warcry Phoenix", 150, Rarity.UNCOMMON, mage.cards.w.WarcryPhoenix.class)); - cards.add(new SetCardInfo("Warlord's Fury", 151, Rarity.COMMON, mage.cards.w.WarlordsFury.class)); - cards.add(new SetCardInfo("Weatherlight", 237, Rarity.MYTHIC, mage.cards.w.Weatherlight.class)); - cards.add(new SetCardInfo("Weight of Memory", 74, Rarity.UNCOMMON, mage.cards.w.WeightOfMemory.class)); - cards.add(new SetCardInfo("Whisper, Blood Liturgist", 111, Rarity.UNCOMMON, mage.cards.w.WhisperBloodLiturgist.class)); - cards.add(new SetCardInfo("Wild Onslaught", 188, Rarity.UNCOMMON, mage.cards.w.WildOnslaught.class)); - cards.add(new SetCardInfo("Windgrace Acolyte", 112, Rarity.COMMON, mage.cards.w.WindgraceAcolyte.class)); - cards.add(new SetCardInfo("Wizard's Lightning", 152, Rarity.UNCOMMON, mage.cards.w.WizardsLightning.class)); - cards.add(new SetCardInfo("Wizard's Retort", 75, Rarity.UNCOMMON, mage.cards.w.WizardsRetort.class)); - cards.add(new SetCardInfo("Woodland Cemetery", 248, Rarity.RARE, mage.cards.w.WoodlandCemetery.class)); - cards.add(new SetCardInfo("Yargle, Glutton of Urborg", 113, Rarity.UNCOMMON, mage.cards.y.YargleGluttonOfUrborg.class)); - cards.add(new SetCardInfo("Yavimaya Sapherd", 189, Rarity.COMMON, mage.cards.y.YavimayaSapherd.class)); - cards.add(new SetCardInfo("Yawgmoth's Vile Offering", 114, Rarity.RARE, mage.cards.y.YawgmothsVileOffering.class)); - cards.add(new SetCardInfo("Zahid, Djinn of the Lamp", 76, Rarity.RARE, mage.cards.z.ZahidDjinnOfTheLamp.class)); - cards.add(new SetCardInfo("Zhalfirin Void", 249, Rarity.UNCOMMON, mage.cards.z.ZhalfirinVoid.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 fireshoes + */ +public class Dominaria extends ExpansionSet { + + private static final Dominaria instance = new Dominaria(); + + public static Dominaria getInstance() { + return instance; + } + + private Dominaria() { + super("Dominaria", "DOM", ExpansionSet.buildDate(2018, 4, 27), SetType.EXPANSION); + this.blockName = "Dominaria"; + this.hasBoosters = true; + this.numBoosterLands = 1; + this.numBoosterCommon = 10; + this.numBoosterUncommon = 3; + this.numBoosterRare = 1; + this.ratioBoosterMythic = 8; + this.needsLegends = true; + + cards.add(new SetCardInfo("Academy Drake", 40, Rarity.COMMON, mage.cards.a.AcademyDrake.class)); + cards.add(new SetCardInfo("Academy Journeymage", 41, Rarity.COMMON, mage.cards.a.AcademyJourneymage.class)); + cards.add(new SetCardInfo("Adamant Will", 2, Rarity.COMMON, mage.cards.a.AdamantWill.class)); + cards.add(new SetCardInfo("Adeliz, the Cinder Wind", 190, Rarity.UNCOMMON, mage.cards.a.AdelizTheCinderWind.class)); + cards.add(new SetCardInfo("Adventurous Impulse", 153, Rarity.COMMON, mage.cards.a.AdventurousImpulse.class)); + cards.add(new SetCardInfo("Aesthir Glider", 209, Rarity.COMMON, mage.cards.a.AesthirGlider.class)); + cards.add(new SetCardInfo("Amaranthine Wall", 210, Rarity.UNCOMMON, mage.cards.a.AmaranthineWall.class)); + cards.add(new SetCardInfo("Ancient Animus", 154, Rarity.COMMON, mage.cards.a.AncientAnimus.class)); + cards.add(new SetCardInfo("Arbor Armament", 155, Rarity.COMMON, mage.cards.a.ArborArmament.class)); + cards.add(new SetCardInfo("Arcane Flight", 43, Rarity.COMMON, mage.cards.a.ArcaneFlight.class)); + cards.add(new SetCardInfo("Artificer's Assistant", 44, Rarity.COMMON, mage.cards.a.ArtificersAssistant.class)); + cards.add(new SetCardInfo("Arvad the Cursed", 191, Rarity.UNCOMMON, mage.cards.a.ArvadTheCursed.class)); + cards.add(new SetCardInfo("Aryel, Knight of Windgrace", 192, Rarity.RARE, mage.cards.a.AryelKnightOfWindgrace.class)); + cards.add(new SetCardInfo("Aven Sentry", 3, Rarity.COMMON, mage.cards.a.AvenSentry.class)); + cards.add(new SetCardInfo("Baird, Steward of Argive", 4, Rarity.UNCOMMON, mage.cards.b.BairdStewardOfArgive.class)); + cards.add(new SetCardInfo("Baloth Gorger", 156, Rarity.COMMON, mage.cards.b.BalothGorger.class)); + cards.add(new SetCardInfo("Befuddle", 45, Rarity.COMMON, mage.cards.b.Befuddle.class)); + cards.add(new SetCardInfo("Benalish Honor Guard", 5, Rarity.COMMON, mage.cards.b.BenalishHonorGuard.class)); + cards.add(new SetCardInfo("Benalish Marshal", 6, Rarity.RARE, mage.cards.b.BenalishMarshal.class)); + cards.add(new SetCardInfo("Blackblade Reforged", 211, Rarity.RARE, mage.cards.b.BlackbladeReforged.class)); + cards.add(new SetCardInfo("Blessed Light", 7, Rarity.COMMON, mage.cards.b.BlessedLight.class)); + cards.add(new SetCardInfo("Blessing of Belzenlok", 77, Rarity.COMMON, mage.cards.b.BlessingOfBelzenlok.class)); + cards.add(new SetCardInfo("Blink of an Eye", 46, Rarity.COMMON, mage.cards.b.BlinkOfAnEye.class)); + cards.add(new SetCardInfo("Bloodstone Goblin", 115, Rarity.COMMON, mage.cards.b.BloodstoneGoblin.class)); + cards.add(new SetCardInfo("Bloodtallow Candle", 212, Rarity.COMMON, mage.cards.b.BloodtallowCandle.class)); + cards.add(new SetCardInfo("Board the Weatherlight", 8, Rarity.UNCOMMON, mage.cards.b.BoardTheWeatherlight.class)); + cards.add(new SetCardInfo("Broken Bond", 157, Rarity.COMMON, mage.cards.b.BrokenBond.class)); + cards.add(new SetCardInfo("Cabal Evangel", 78, Rarity.COMMON, mage.cards.c.CabalEvangel.class)); + cards.add(new SetCardInfo("Cabal Paladin", 79, Rarity.COMMON, mage.cards.c.CabalPaladin.class)); + cards.add(new SetCardInfo("Cabal Stronghold", 238, Rarity.RARE, mage.cards.c.CabalStronghold.class)); + cards.add(new SetCardInfo("Caligo Skin-Witch", 80, Rarity.COMMON, mage.cards.c.CaligoSkinWitch.class)); + cards.add(new SetCardInfo("Call the Cavalry", 9, Rarity.COMMON, mage.cards.c.CallTheCavalry.class)); + cards.add(new SetCardInfo("Cast Down", 81, Rarity.UNCOMMON, mage.cards.c.CastDown.class)); + cards.add(new SetCardInfo("Chainer's Torment", 82, Rarity.UNCOMMON, mage.cards.c.ChainersTorment.class)); + cards.add(new SetCardInfo("Champion of the Flame", 116, Rarity.UNCOMMON, mage.cards.c.ChampionOfTheFlame.class)); + cards.add(new SetCardInfo("Chandra's Outburst", 276, Rarity.RARE, mage.cards.c.ChandrasOutburst.class)); + cards.add(new SetCardInfo("Chandra, Bold Pyromancer", 275, Rarity.MYTHIC, mage.cards.c.ChandraBoldPyromancer.class)); + cards.add(new SetCardInfo("Charge", 10, Rarity.COMMON, mage.cards.c.Charge.class)); + cards.add(new SetCardInfo("Clifftop Retreat", 239, Rarity.RARE, mage.cards.c.ClifftopRetreat.class)); + cards.add(new SetCardInfo("Cloudreader Sphinx", 47, Rarity.COMMON, mage.cards.c.CloudreaderSphinx.class)); + cards.add(new SetCardInfo("Cold-Water Snapper", 48, Rarity.COMMON, mage.cards.c.ColdWaterSnapper.class)); + cards.add(new SetCardInfo("Curator's Ward", 49, Rarity.UNCOMMON, mage.cards.c.CuratorsWard.class)); + cards.add(new SetCardInfo("Corrosive Ooze", 158, Rarity.COMMON, mage.cards.c.CorrosiveOoze.class)); + cards.add(new SetCardInfo("D'Avenant Trapper", 11, Rarity.COMMON, mage.cards.d.DAvenantTrapper.class)); + cards.add(new SetCardInfo("Damping Sphere", 213, Rarity.UNCOMMON, mage.cards.d.DampingSphere.class)); + cards.add(new SetCardInfo("Danitha Capashen, Paragon", 12, Rarity.UNCOMMON, mage.cards.d.DanithaCapashenParagon.class)); + cards.add(new SetCardInfo("Darigaaz Reincarnated", 193, Rarity.MYTHIC, mage.cards.d.DarigaazReincarnated.class)); + cards.add(new SetCardInfo("Daring Archaeologist", 13, Rarity.RARE, mage.cards.d.DaringArchaeologist.class)); + cards.add(new SetCardInfo("Dark Bargain", 83, Rarity.COMMON, mage.cards.d.DarkBargain.class)); + cards.add(new SetCardInfo("Dauntless Bodyguard", 14, Rarity.UNCOMMON, mage.cards.d.DauntlessBodyguard.class)); + cards.add(new SetCardInfo("Deathbloom Thallid", 84, Rarity.COMMON, mage.cards.d.DeathbloomThallid.class)); + cards.add(new SetCardInfo("Deep Freeze", 50, Rarity.COMMON, mage.cards.d.DeepFreeze.class)); + cards.add(new SetCardInfo("Demonic Vigor", 85, Rarity.COMMON, mage.cards.d.DemonicVigor.class)); + cards.add(new SetCardInfo("Demonlord Belzenlok", 86, Rarity.MYTHIC, mage.cards.d.DemonlordBelzenlok.class)); + cards.add(new SetCardInfo("Diligent Excavator", 51, Rarity.UNCOMMON, mage.cards.d.DiligentExcavator.class)); + cards.add(new SetCardInfo("Divest", 87, Rarity.COMMON, mage.cards.d.Divest.class)); + cards.add(new SetCardInfo("Divination", 52, Rarity.COMMON, mage.cards.d.Divination.class)); + cards.add(new SetCardInfo("Dread Shade", 88, Rarity.RARE, mage.cards.d.DreadShade.class)); + cards.add(new SetCardInfo("Drudge Sentinel", 89, Rarity.COMMON, mage.cards.d.DrudgeSentinel.class)); + cards.add(new SetCardInfo("Dub", 15, Rarity.COMMON, mage.cards.d.Dub.class)); + cards.add(new SetCardInfo("Elfhame Druid", 159, Rarity.UNCOMMON, mage.cards.e.ElfhameDruid.class)); + cards.add(new SetCardInfo("Eviscerate", 91, Rarity.COMMON, mage.cards.e.Eviscerate.class)); + cards.add(new SetCardInfo("Evra, Halcyon Witness", 16, Rarity.RARE, mage.cards.e.EvraHalcyonWitness.class)); + cards.add(new SetCardInfo("Excavation Elephant", 17, Rarity.COMMON, mage.cards.e.ExcavationElephant.class)); + cards.add(new SetCardInfo("Fall of the Thran", 18, Rarity.RARE, mage.cards.f.FallOfTheThran.class)); + cards.add(new SetCardInfo("Feral Abomination", 92, Rarity.COMMON, mage.cards.f.FeralAbomination.class)); + cards.add(new SetCardInfo("Fervent Strike", 117, Rarity.COMMON, mage.cards.f.FerventStrike.class)); + cards.add(new SetCardInfo("Fiery Intervention", 118, Rarity.COMMON, mage.cards.f.FieryIntervention.class)); + cards.add(new SetCardInfo("Fight with Fire", 119, Rarity.UNCOMMON, mage.cards.f.FightWithFire.class)); + cards.add(new SetCardInfo("Final Parting", 93, Rarity.UNCOMMON, mage.cards.f.FinalParting.class)); + cards.add(new SetCardInfo("Fire Elemental", 120, Rarity.COMMON, mage.cards.f.FireElemental.class)); + cards.add(new SetCardInfo("Firefist Adept", 121, Rarity.UNCOMMON, mage.cards.f.FirefistAdept.class)); + cards.add(new SetCardInfo("Firesong and Sunspeaker", 280, Rarity.RARE, mage.cards.f.FiresongAndSunspeaker.class)); + cards.add(new SetCardInfo("Forebear's Blade", 214, Rarity.RARE, mage.cards.f.ForebearsBlade.class)); + cards.add(new SetCardInfo("Forest", 266, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 267, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 268, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Forest", 269, Rarity.LAND, mage.cards.basiclands.Forest.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Frenzied Rage", 124, Rarity.COMMON, mage.cards.f.FrenziedRage.class)); + cards.add(new SetCardInfo("Fungal Infection", 94, Rarity.COMMON, mage.cards.f.FungalInfection.class)); + cards.add(new SetCardInfo("Fungal Plots", 160, Rarity.UNCOMMON, mage.cards.f.FungalPlots.class)); + cards.add(new SetCardInfo("Gaea's Blessing", 161, Rarity.UNCOMMON, mage.cards.g.GaeasBlessing.class)); + cards.add(new SetCardInfo("Gaea's Protector", 162, Rarity.COMMON, mage.cards.g.GaeasProtector.class)); + cards.add(new SetCardInfo("Garna, the Bloodflame", 194, Rarity.UNCOMMON, mage.cards.g.GarnaTheBloodflame.class)); + cards.add(new SetCardInfo("Ghitu Chronicler", 125, Rarity.COMMON, mage.cards.g.GhituChronicler.class)); + cards.add(new SetCardInfo("Ghitu Journeymage", 126, Rarity.COMMON, mage.cards.g.GhituJourneymage.class)); + cards.add(new SetCardInfo("Ghitu Lavarunner", 127, Rarity.COMMON, mage.cards.g.GhituLavarunner.class)); + cards.add(new SetCardInfo("Gideon's Reproach", 19, Rarity.COMMON, mage.cards.g.GideonsReproach.class)); + cards.add(new SetCardInfo("Gift of Growth", 163, Rarity.COMMON, mage.cards.g.GiftofGrowth.class)); + cards.add(new SetCardInfo("Gilded Lotus", 215, Rarity.RARE, mage.cards.g.GildedLotus.class)); + cards.add(new SetCardInfo("Goblin Barrage", 128, Rarity.UNCOMMON, mage.cards.g.GoblinBarrage.class)); + cards.add(new SetCardInfo("Goblin Chainwhirler", 129, Rarity.RARE, mage.cards.g.GoblinChainwhirler.class)); + cards.add(new SetCardInfo("Goblin Warchief", 130, Rarity.UNCOMMON, mage.cards.g.GoblinWarchief.class)); + cards.add(new SetCardInfo("Grand Warlord Radha", 195, Rarity.RARE, mage.cards.g.GrandWarlordRadha.class)); + cards.add(new SetCardInfo("Grow from the Ashes", 164, Rarity.COMMON, mage.cards.g.GrowFromTheAshes.class)); + cards.add(new SetCardInfo("Grunn, the Lonely King", 165, Rarity.UNCOMMON, mage.cards.g.GrunnTheLonelyKing.class)); + cards.add(new SetCardInfo("Guardians of Koilos", 216, Rarity.COMMON, mage.cards.g.GuardiansOfKoilos.class)); + cards.add(new SetCardInfo("Hallar, the Firefletcher", 196, Rarity.UNCOMMON, mage.cards.h.HallarTheFirefletcher.class)); + cards.add(new SetCardInfo("Haphazard Bombardment", 131, Rarity.RARE, mage.cards.h.HaphazardBombardment.class)); + cards.add(new SetCardInfo("Healing Grace", 20, Rarity.COMMON, mage.cards.h.HealingGrace.class)); + cards.add(new SetCardInfo("Helm of the Host", 217, Rarity.RARE, mage.cards.h.HelmOfTheHost.class)); + cards.add(new SetCardInfo("Hinterland Harbor", 240, Rarity.RARE, mage.cards.h.HinterlandHarbor.class)); + cards.add(new SetCardInfo("History of Benalia", 21, Rarity.MYTHIC, mage.cards.h.HistoryOfBenalia.class)); + cards.add(new SetCardInfo("Homarid Explorer", 53, Rarity.UNCOMMON, mage.cards.h.HomaridExplorer.class)); + cards.add(new SetCardInfo("Howling Golem", 218, Rarity.UNCOMMON, mage.cards.h.HowlingGolem.class)); + cards.add(new SetCardInfo("Icy Manipulator", 219, Rarity.UNCOMMON, mage.cards.i.IcyManipulator.class)); + cards.add(new SetCardInfo("In Bolas's Clutches", 54, Rarity.UNCOMMON, mage.cards.i.InBolassClutches.class)); + cards.add(new SetCardInfo("Invoke the Divine", 22, Rarity.COMMON, mage.cards.i.InvokeTheDivine.class)); + cards.add(new SetCardInfo("Island", 254, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 255, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 256, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Island", 257, Rarity.LAND, mage.cards.basiclands.Island.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Isolated Chapel", 241, Rarity.RARE, mage.cards.i.IsolatedChapel.class)); + cards.add(new SetCardInfo("Jaya Ballard", 132, Rarity.MYTHIC, mage.cards.j.JayaBallard.class)); + cards.add(new SetCardInfo("Jaya's Immolating Inferno", 133, Rarity.RARE, mage.cards.j.JayasImmolatingInferno.class)); + cards.add(new SetCardInfo("Jhoira, Weatherlight Captain", 197, Rarity.MYTHIC, mage.cards.j.JhoiraWeatherlightCaptain.class)); + cards.add(new SetCardInfo("Jhoira's Familiar", 220, Rarity.UNCOMMON, mage.cards.j.JhoirasFamiliar.class)); + cards.add(new SetCardInfo("Jodah, Archmage Eternal", 198, Rarity.RARE, mage.cards.j.JodahArchmageEternal.class)); + cards.add(new SetCardInfo("Josu Vess, Lich Knight", 95, Rarity.RARE, mage.cards.j.JosuVessLichKnight.class)); + cards.add(new SetCardInfo("Jousting Lance", 221, Rarity.COMMON, mage.cards.j.JoustingLance.class)); + cards.add(new SetCardInfo("Juggernaut", 222, Rarity.UNCOMMON, mage.cards.j.Juggernaut.class)); + cards.add(new SetCardInfo("Kamahl's Druidic Vow", 166, Rarity.RARE, mage.cards.k.KamahlsDruidicVow.class)); + cards.add(new SetCardInfo("Karn, Scion of Urza", 1, Rarity.MYTHIC, mage.cards.k.KarnScionOfUrza.class)); + cards.add(new SetCardInfo("Karn's Temporal Sundering", 55, Rarity.RARE, mage.cards.k.KarnsTemporalSundering.class)); + cards.add(new SetCardInfo("Karplusan Hound", 277, Rarity.UNCOMMON, mage.cards.k.KarplusanHound.class)); + cards.add(new SetCardInfo("Kazarov, Sengir Pureblood", 96, Rarity.RARE, mage.cards.k.KazarovSengirPureblood.class)); + cards.add(new SetCardInfo("Keldon Overseer", 134, Rarity.COMMON, mage.cards.k.KeldonOverseer.class)); + cards.add(new SetCardInfo("Keldon Raider", 135, Rarity.COMMON, mage.cards.k.KeldonRaider.class)); + cards.add(new SetCardInfo("Keldon Warcaller", 136, Rarity.COMMON, mage.cards.k.KeldonWarcaller.class)); + cards.add(new SetCardInfo("Knight of Grace", 23, Rarity.UNCOMMON, mage.cards.k.KnightOfGrace.class)); + cards.add(new SetCardInfo("Knight of Malice", 97, Rarity.UNCOMMON, mage.cards.k.KnightOfMalice.class)); + cards.add(new SetCardInfo("Knight of New Benalia", 24, Rarity.COMMON, mage.cards.k.KnightOfNewBenalia.class)); + cards.add(new SetCardInfo("Krosan Druid", 167, Rarity.COMMON, mage.cards.k.KrosanDruid.class)); + cards.add(new SetCardInfo("Kwende, Pride of Femeref", 25, Rarity.UNCOMMON, mage.cards.k.KwendePrideOfFemeref.class)); + cards.add(new SetCardInfo("Lich's Mastery", 98, Rarity.RARE, mage.cards.l.LichsMastery.class)); + cards.add(new SetCardInfo("Lingering Phantom", 99, Rarity.UNCOMMON, mage.cards.l.LingeringPhantom.class)); + cards.add(new SetCardInfo("Llanowar Elves", 168, Rarity.COMMON, mage.cards.l.LlanowarElves.class)); + cards.add(new SetCardInfo("Llanowar Envoy", 169, Rarity.COMMON, mage.cards.l.LlanowarEnvoy.class)); + cards.add(new SetCardInfo("Llanowar Scout", 170, Rarity.COMMON, mage.cards.l.LlanowarScout.class)); + cards.add(new SetCardInfo("Lyra Dawnbringer", 26, Rarity.MYTHIC, mage.cards.l.LyraDawnbringer.class)); + cards.add(new SetCardInfo("Mammoth Spider", 171, Rarity.COMMON, mage.cards.m.MammothSpider.class)); + cards.add(new SetCardInfo("Marwyn, the Nurturer", 172, Rarity.RARE, mage.cards.m.MarwynTheNurturer.class)); + cards.add(new SetCardInfo("Meandering River", 274, Rarity.COMMON, mage.cards.m.MeanderingRiver.class)); + cards.add(new SetCardInfo("Memorial to Folly", 242, Rarity.UNCOMMON, mage.cards.m.MemorialToFolly.class)); + cards.add(new SetCardInfo("Memorial to Genius", 243, Rarity.UNCOMMON, mage.cards.m.MemorialToGenius.class)); + cards.add(new SetCardInfo("Memorial to Glory", 244, Rarity.UNCOMMON, mage.cards.m.MemorialToGlory.class)); + cards.add(new SetCardInfo("Memorial to Unity", 245, Rarity.UNCOMMON, mage.cards.m.MemorialToUnity.class)); + cards.add(new SetCardInfo("Memorial to War", 246, Rarity.UNCOMMON, mage.cards.m.MemorialToWar.class)); + cards.add(new SetCardInfo("Merfolk Trickster", 56, Rarity.UNCOMMON, mage.cards.m.MerfolkTrickster.class)); + cards.add(new SetCardInfo("Mesa Unicorn", 27, Rarity.COMMON, mage.cards.m.MesaUnicorn.class)); + cards.add(new SetCardInfo("Mishra's Self-Replicator", 223, Rarity.RARE, mage.cards.m.MishrasSelfReplicator.class)); + cards.add(new SetCardInfo("Mountain", 262, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 263, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 264, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Mountain", 265, Rarity.LAND, mage.cards.basiclands.Mountain.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Muldrotha, the Gravetide", 199, Rarity.MYTHIC, mage.cards.m.MuldrothaTheGravetide.class)); + cards.add(new SetCardInfo("Multani, Yavimaya's Avatar", 174, Rarity.MYTHIC, mage.cards.m.MultaniYavimayasAvatar.class)); + cards.add(new SetCardInfo("Mox Amber", 224, Rarity.MYTHIC, mage.cards.m.MoxAmber.class)); + cards.add(new SetCardInfo("Naban, Dean of Iteration", 58, Rarity.RARE, mage.cards.n.NabanDeanOfIteration.class)); + cards.add(new SetCardInfo("Naru Meha, Master Wizard", 59, Rarity.MYTHIC, mage.cards.n.NaruMehaMasterWizard.class)); + cards.add(new SetCardInfo("Nature's Spiral", 175, Rarity.UNCOMMON, mage.cards.n.NaturesSpiral.class)); + cards.add(new SetCardInfo("Navigator's Compass", 225, Rarity.COMMON, mage.cards.n.NavigatorsCompass.class)); + cards.add(new SetCardInfo("Niambi, Faithful Healer", 272, Rarity.RARE, mage.cards.n.NiambiFaithfulHealer.class)); + cards.add(new SetCardInfo("Oath of Teferi", 200, Rarity.RARE, mage.cards.o.OathOfTeferi.class)); + cards.add(new SetCardInfo("On Serra's Wings", 28, Rarity.UNCOMMON, mage.cards.o.OnSerrasWings.class)); + cards.add(new SetCardInfo("Opt", 60, Rarity.COMMON, mage.cards.o.Opt.class)); + cards.add(new SetCardInfo("Orcish Vandal", 137, Rarity.UNCOMMON, mage.cards.o.OrcishVandal.class)); + cards.add(new SetCardInfo("Pardic Wanderer", 226, Rarity.COMMON, mage.cards.p.PardicWanderer.class)); + cards.add(new SetCardInfo("Pegasus Courser", 29, Rarity.COMMON, mage.cards.p.PegasusCourser.class)); + cards.add(new SetCardInfo("Phyrexian Scriptures", 100, Rarity.MYTHIC, mage.cards.p.PhyrexianScriptures.class)); + cards.add(new SetCardInfo("Pierce the Sky", 176, Rarity.COMMON, mage.cards.p.PierceTheSky.class)); + cards.add(new SetCardInfo("Plains", 250, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 251, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 252, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Plains", 253, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Powerstone Shard", 227, Rarity.COMMON, mage.cards.p.PowerstoneShard.class)); + cards.add(new SetCardInfo("Precognition Field", 61, Rarity.RARE, mage.cards.p.PrecognitionField.class)); + cards.add(new SetCardInfo("Primevals' Glorious Rebirth", 201, Rarity.RARE, mage.cards.p.PrimevalsGloriousRebirth.class)); + cards.add(new SetCardInfo("Primordial Wurm", 177, Rarity.COMMON, mage.cards.p.PrimordialWurm.class)); + cards.add(new SetCardInfo("Pyromantic Pilgrim", 278, Rarity.COMMON, mage.cards.p.PyromanticPilgrim.class)); + cards.add(new SetCardInfo("Radiating Lightning", 138, Rarity.COMMON, mage.cards.r.RadiatingLightning.class)); + cards.add(new SetCardInfo("Raff Capashen, Ship's Mage", 202, Rarity.UNCOMMON, mage.cards.r.RaffCapashenShipsMage.class)); + cards.add(new SetCardInfo("Rampaging Cyclops", 139, Rarity.COMMON, mage.cards.r.RampagingCyclops.class)); + cards.add(new SetCardInfo("Rat Colony", 101, Rarity.COMMON, mage.cards.r.RatColony.class)); + cards.add(new SetCardInfo("Relic Runner", 62, Rarity.COMMON, mage.cards.r.RelicRunner.class)); + cards.add(new SetCardInfo("Rescue", 63, Rarity.COMMON, mage.cards.r.Rescue.class)); + cards.add(new SetCardInfo("Rite of Belzenlok", 102, Rarity.RARE, mage.cards.r.RiteOfBelzenlok.class)); + cards.add(new SetCardInfo("Rona, Disciple of Gix", 203, Rarity.UNCOMMON, mage.cards.r.RonaDiscipleOfGix.class)); + cards.add(new SetCardInfo("Run Amok", 140, Rarity.COMMON, mage.cards.r.RunAmok.class)); + cards.add(new SetCardInfo("Sage of Lat-Nam", 64, Rarity.UNCOMMON, mage.cards.s.SageOfLatNam.class)); + cards.add(new SetCardInfo("Sanctum Spirit", 30, Rarity.UNCOMMON, mage.cards.s.SanctumSpirit.class)); + cards.add(new SetCardInfo("Saproling Migration", 178, Rarity.COMMON, mage.cards.s.SaprolingMigration.class)); + cards.add(new SetCardInfo("Seal Away", 31, Rarity.UNCOMMON, mage.cards.s.SealAway.class)); + cards.add(new SetCardInfo("Seismic Shift", 141, Rarity.COMMON, mage.cards.s.SeismicShift.class)); + cards.add(new SetCardInfo("Sentinel of the Pearl Trident", 65, Rarity.UNCOMMON, mage.cards.s.SentinelOfThePearlTrident.class)); + cards.add(new SetCardInfo("Sergeant-at-Arms", 32, Rarity.COMMON, mage.cards.s.SergeantAtArms.class)); + cards.add(new SetCardInfo("Serra Angel", 33, Rarity.UNCOMMON, mage.cards.s.SerraAngel.class)); + cards.add(new SetCardInfo("Serra Disciple", 34, Rarity.COMMON, mage.cards.s.SerraDisciple.class)); + cards.add(new SetCardInfo("Settle the Score", 103, Rarity.UNCOMMON, mage.cards.s.SettleTheScore.class)); + cards.add(new SetCardInfo("Shalai, Voice of Plenty", 35, Rarity.RARE, mage.cards.s.ShalaiVoiceOfPlenty.class)); + cards.add(new SetCardInfo("Shanna, Sisay's Legacy", 204, Rarity.UNCOMMON, mage.cards.s.ShannaSisaysLegacy.class)); + cards.add(new SetCardInfo("Shield of the Realm", 228, Rarity.UNCOMMON, mage.cards.s.ShieldOfTheRealm.class)); + cards.add(new SetCardInfo("Shivan Fire", 142, Rarity.COMMON, mage.cards.s.ShivanFire.class)); + cards.add(new SetCardInfo("Short Sword", 229, Rarity.COMMON, mage.cards.s.ShortSword.class)); + cards.add(new SetCardInfo("Siege-Gang Commander", 143, Rarity.RARE, mage.cards.s.SiegeGangCommander.class)); + cards.add(new SetCardInfo("Skirk Prospector", 144, Rarity.COMMON, mage.cards.s.SkirkProspector.class)); + cards.add(new SetCardInfo("Skittering Surveyor", 230, Rarity.COMMON, mage.cards.s.SkitteringSurveyor.class)); + cards.add(new SetCardInfo("Skizzik", 145, Rarity.UNCOMMON, mage.cards.s.Skizzik.class)); + cards.add(new SetCardInfo("Slimefoot, the Stowaway", 205, Rarity.UNCOMMON, mage.cards.s.SlimefootTheStowaway.class)); + cards.add(new SetCardInfo("Slinn Voda, the Rising Deep", 66, Rarity.UNCOMMON, mage.cards.s.SlinnVodaTheRisingDeep.class)); + cards.add(new SetCardInfo("Song of Freyalise", 179, Rarity.UNCOMMON, mage.cards.s.SongOfFreyalise.class)); + cards.add(new SetCardInfo("Sorcerer's Wand", 231, Rarity.UNCOMMON, mage.cards.s.SorcerersWand.class)); + cards.add(new SetCardInfo("Soul Salvage", 104, Rarity.COMMON, mage.cards.s.SoulSalvage.class)); + cards.add(new SetCardInfo("Sparring Construct", 232, Rarity.COMMON, mage.cards.s.SparringConstruct.class)); + cards.add(new SetCardInfo("Spore Swarm", 180, Rarity.UNCOMMON, mage.cards.s.SporeSwarm.class)); + cards.add(new SetCardInfo("Sporecrown Thallid", 181, Rarity.UNCOMMON, mage.cards.s.SporecrownThallid.class)); + cards.add(new SetCardInfo("Squee, the Immortal", 146, Rarity.RARE, mage.cards.s.SqueeTheImmortal.class)); + cards.add(new SetCardInfo("Steel Leaf Champion", 182, Rarity.RARE, mage.cards.s.SteelLeafChampion.class)); + cards.add(new SetCardInfo("Stronghold Confessor", 105, Rarity.COMMON, mage.cards.s.StrongholdConfessor.class)); + cards.add(new SetCardInfo("Sulfur Falls", 247, Rarity.RARE, mage.cards.s.SulfurFalls.class)); + cards.add(new SetCardInfo("Swamp", 258, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 259, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 260, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Swamp", 261, Rarity.LAND, mage.cards.basiclands.Swamp.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Sylvan Awakening", 183, Rarity.RARE, mage.cards.s.SylvanAwakening.class)); + cards.add(new SetCardInfo("Syncopate", 67, Rarity.COMMON, mage.cards.s.Syncopate.class)); + cards.add(new SetCardInfo("Tatyova, Benthic Druid", 206, Rarity.UNCOMMON, mage.cards.t.TatyovaBenthicDruid.class)); + cards.add(new SetCardInfo("Teferi's Sentinel", 273, Rarity.UNCOMMON, mage.cards.t.TeferisSentinel.class)); + cards.add(new SetCardInfo("Teferi, Hero of Dominaria", 207, Rarity.MYTHIC, mage.cards.t.TeferiHeroOfDominaria.class)); + cards.add(new SetCardInfo("Teferi, Timebender", 270, Rarity.MYTHIC, mage.cards.t.TeferiTimebender.class)); + cards.add(new SetCardInfo("Tempest Djinn", 68, Rarity.RARE, mage.cards.t.TempestDjinn.class)); + cards.add(new SetCardInfo("Temporal Machinations", 271, Rarity.COMMON, mage.cards.t.TemporalMachinations.class)); + cards.add(new SetCardInfo("Territorial Allosaurus", 184, Rarity.RARE, mage.cards.t.TerritorialAllosaurus.class)); + cards.add(new SetCardInfo("Teshar, Ancestor's Apostle", 36, Rarity.RARE, mage.cards.t.TesharAncestorsApostle.class)); + cards.add(new SetCardInfo("Tetsuko Umezawa, Fugitive", 69, Rarity.UNCOMMON, mage.cards.t.TetsukoUmezawaFugitive.class)); + cards.add(new SetCardInfo("Thallid Omnivore", 106, Rarity.COMMON, mage.cards.t.ThallidOmnivore.class)); + cards.add(new SetCardInfo("Thallid Soothsayer", 107, Rarity.UNCOMMON, mage.cards.t.ThallidSoothsayer.class)); + cards.add(new SetCardInfo("The Antiquities War", 42, Rarity.RARE, mage.cards.t.TheAntiquitiesWar.class)); + cards.add(new SetCardInfo("The Eldest Reborn", 90, Rarity.UNCOMMON, mage.cards.t.TheEldestReborn.class)); + cards.add(new SetCardInfo("The First Eruption", 122, Rarity.RARE, mage.cards.t.TheFirstEruption.class)); + cards.add(new SetCardInfo("The Flame of Keld", 123, Rarity.UNCOMMON, mage.cards.t.TheFlameOfKeld.class)); + cards.add(new SetCardInfo("The Mending of Dominaria", 173, Rarity.RARE, mage.cards.t.TheMendingOfDominaria.class)); + cards.add(new SetCardInfo("The Mirari Conjecture", 57, Rarity.RARE, mage.cards.t.TheMirariConjecture.class)); + cards.add(new SetCardInfo("Thorn Elemental", 185, Rarity.UNCOMMON, mage.cards.t.ThornElemental.class)); + cards.add(new SetCardInfo("Thran Temporal Gateway", 233, Rarity.RARE, mage.cards.t.ThranTemporalGateway.class)); + cards.add(new SetCardInfo("Tiana, Ship's Caretaker", 208, Rarity.UNCOMMON, mage.cards.t.TianaShipsCaretaker.class)); + cards.add(new SetCardInfo("Timber Gorge", 279, Rarity.COMMON, mage.cards.t.TimberGorge.class)); + cards.add(new SetCardInfo("Time of Ice", 70, Rarity.UNCOMMON, mage.cards.t.TimeOfIce.class)); + cards.add(new SetCardInfo("Tolarian Scholar", 71, Rarity.COMMON, mage.cards.t.TolarianScholar.class)); + cards.add(new SetCardInfo("Torgaar, Famine Incarnate", 108, Rarity.RARE, mage.cards.t.TorgaarFamineIncarnate.class)); + cards.add(new SetCardInfo("Tragic Poet", 37, Rarity.COMMON, mage.cards.t.TragicPoet.class)); + cards.add(new SetCardInfo("Traxos, Scourge of Kroog", 234, Rarity.RARE, mage.cards.t.TraxosScourgeOfKroog.class)); + cards.add(new SetCardInfo("Triumph of Gerrard", 38, Rarity.UNCOMMON, mage.cards.t.TriumphOfGerrard.class)); + cards.add(new SetCardInfo("Two-Headed Giant", 147, Rarity.RARE, mage.cards.t.TwoHeadedGiant.class)); + cards.add(new SetCardInfo("Untamed Kavu", 186, Rarity.UNCOMMON, mage.cards.u.UntamedKavu.class)); + cards.add(new SetCardInfo("Unwind", 72, Rarity.COMMON, mage.cards.u.Unwind.class)); + cards.add(new SetCardInfo("Urgoros, the Empty One", 109, Rarity.UNCOMMON, mage.cards.u.UrgorosTheEmptyOne.class)); + cards.add(new SetCardInfo("Urza's Ruinous Blast", 39, Rarity.RARE, mage.cards.u.UrzasRuinousBlast.class)); + cards.add(new SetCardInfo("Urza's Tome", 235, Rarity.UNCOMMON, mage.cards.u.UrzasTome.class)); + cards.add(new SetCardInfo("Valduk, Keeper of the Flame", 148, Rarity.UNCOMMON, mage.cards.v.ValdukKeeperOfTheFlame.class)); + cards.add(new SetCardInfo("Verdant Force", 187, Rarity.RARE, mage.cards.v.VerdantForce.class)); + cards.add(new SetCardInfo("Verix Bladewing", 149, Rarity.MYTHIC, mage.cards.v.VerixBladewing.class)); + cards.add(new SetCardInfo("Vicious Offering", 110, Rarity.COMMON, mage.cards.v.ViciousOffering.class)); + cards.add(new SetCardInfo("Vodalian Arcanist", 73, Rarity.COMMON, mage.cards.v.VodalianArcanist.class)); + cards.add(new SetCardInfo("Voltaic Servant", 236, Rarity.COMMON, mage.cards.v.VoltaicServant.class)); + cards.add(new SetCardInfo("Warcry Phoenix", 150, Rarity.UNCOMMON, mage.cards.w.WarcryPhoenix.class)); + cards.add(new SetCardInfo("Warlord's Fury", 151, Rarity.COMMON, mage.cards.w.WarlordsFury.class)); + cards.add(new SetCardInfo("Weatherlight", 237, Rarity.MYTHIC, mage.cards.w.Weatherlight.class)); + cards.add(new SetCardInfo("Weight of Memory", 74, Rarity.UNCOMMON, mage.cards.w.WeightOfMemory.class)); + cards.add(new SetCardInfo("Whisper, Blood Liturgist", 111, Rarity.UNCOMMON, mage.cards.w.WhisperBloodLiturgist.class)); + cards.add(new SetCardInfo("Wild Onslaught", 188, Rarity.UNCOMMON, mage.cards.w.WildOnslaught.class)); + cards.add(new SetCardInfo("Windgrace Acolyte", 112, Rarity.COMMON, mage.cards.w.WindgraceAcolyte.class)); + cards.add(new SetCardInfo("Wizard's Lightning", 152, Rarity.UNCOMMON, mage.cards.w.WizardsLightning.class)); + cards.add(new SetCardInfo("Wizard's Retort", 75, Rarity.UNCOMMON, mage.cards.w.WizardsRetort.class)); + cards.add(new SetCardInfo("Woodland Cemetery", 248, Rarity.RARE, mage.cards.w.WoodlandCemetery.class)); + cards.add(new SetCardInfo("Yargle, Glutton of Urborg", 113, Rarity.UNCOMMON, mage.cards.y.YargleGluttonOfUrborg.class)); + cards.add(new SetCardInfo("Yavimaya Sapherd", 189, Rarity.COMMON, mage.cards.y.YavimayaSapherd.class)); + cards.add(new SetCardInfo("Yawgmoth's Vile Offering", 114, Rarity.RARE, mage.cards.y.YawgmothsVileOffering.class)); + cards.add(new SetCardInfo("Zahid, Djinn of the Lamp", 76, Rarity.RARE, mage.cards.z.ZahidDjinnOfTheLamp.class)); + cards.add(new SetCardInfo("Zhalfirin Void", 249, Rarity.UNCOMMON, mage.cards.z.ZhalfirinVoid.class)); + } +} From cdd6094f59bcbc8b86871cb0a1b2dcb46a2f8d27 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 20:36:20 +0200 Subject: [PATCH 07/29] [DOM] Set max card number for booster. --- Mage.Sets/src/mage/sets/Dominaria.java | 1 + 1 file changed, 1 insertion(+) diff --git a/Mage.Sets/src/mage/sets/Dominaria.java b/Mage.Sets/src/mage/sets/Dominaria.java index 21b1ed6889..46589ba78b 100644 --- a/Mage.Sets/src/mage/sets/Dominaria.java +++ b/Mage.Sets/src/mage/sets/Dominaria.java @@ -53,6 +53,7 @@ public class Dominaria extends ExpansionSet { this.numBoosterRare = 1; this.ratioBoosterMythic = 8; this.needsLegends = true; + this.maxCardNumberInBooster = 269; cards.add(new SetCardInfo("Academy Drake", 40, Rarity.COMMON, mage.cards.a.AcademyDrake.class)); cards.add(new SetCardInfo("Academy Journeymage", 41, Rarity.COMMON, mage.cards.a.AcademyJourneymage.class)); From 344861406efd2d813d1d9cc7f1956386b6d93e8b Mon Sep 17 00:00:00 2001 From: "richard.coates" <richard.coates@theventury.com> Date: Thu, 19 Apr 2018 20:58:45 +0200 Subject: [PATCH 08/29] Rona should specify from your graveyard. --- Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java b/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java index 49dec04a9e..f5f0c6a14a 100644 --- a/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java +++ b/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java @@ -72,7 +72,8 @@ public class RonaDiscipleOfGix extends CardImpl { this.toughness = new MageInt(2); // When Rona, Disciple of Gix enters the battlefield, you may exile target historic card from your graveyard. - Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect().setToSourceExileZone(true), true); + String abilityText = "When Rona, Disciple of Gix enters the battlefield, you may exile target historic card from your graveyard."; + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect().setToSourceExileZone(true), true, abilityText); ability.addTarget(new TargetCardInYourGraveyard(new FilterHistoricCard())); this.addAbility(ability); From 47ad1ea0eefd5f2cab1832043957bfa541009cdc Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 21:02:34 +0200 Subject: [PATCH 09/29] Fixed a AI target selecting problem. --- .../java/mage/player/ai/ComputerPlayer.java | 36 +++++++++++++++++++ .../common/TargetPlayerOrPlaneswalker.java | 5 +++ 2 files changed, 41 insertions(+) diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index 54a6f78f78..c53b0f71a9 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -576,6 +576,41 @@ public class ComputerPlayer extends PlayerImpl implements Player { } } } + } + + if (target.getOriginalTarget() instanceof TargetPlayerOrPlaneswalker) { + List<Permanent> targets; + TargetPlayerOrPlaneswalker t = ((TargetPlayerOrPlaneswalker) target); + if (outcome.isGood()) { + targets = threats(abilityControllerId, source.getSourceId(), ((FilterPermanentOrPlayer) t.getFilter()).getPermanentFilter(), game, target.getTargets()); + } else { + targets = threats(randomOpponentId, source.getSourceId(), ((FilterPermanentOrPlayer) t.getFilter()).getPermanentFilter(), game, target.getTargets()); + } + + if (targets.isEmpty()) { + if (outcome.isGood()) { + if (target.canTarget(getId(), abilityControllerId, source, game)) { + target.addTarget(abilityControllerId, source, game); + return true; + } + } else if (target.canTarget(getId(), randomOpponentId, source, game)) { + target.addTarget(randomOpponentId, source, game); + return true; + } + } + + if (targets.isEmpty() && target.isRequired(source)) { + targets = game.getBattlefield().getActivePermanents(((TargetPlayerOrPlaneswalker) t.getFilter()).getPlaneswalkerFilter(), playerId, game); + } + for (Permanent permanent : targets) { + List<UUID> alreadyTargetted = target.getTargets(); + if (t.canTarget(abilityControllerId, permanent.getId(), source, game)) { + if (alreadyTargetted != null && !alreadyTargetted.contains(permanent.getId())) { + target.addTarget(permanent.getId(), source, game); + return true; + } + } + } if (outcome.isGood()) { if (target.canTarget(getId(), abilityControllerId, source, game)) { @@ -753,6 +788,7 @@ public class ComputerPlayer extends PlayerImpl implements Player { } return target.isChosen(); } + throw new IllegalStateException("Target wasn't handled. class:" + target.getClass().toString()); } //end of chooseTarget method diff --git a/Mage/src/main/java/mage/target/common/TargetPlayerOrPlaneswalker.java b/Mage/src/main/java/mage/target/common/TargetPlayerOrPlaneswalker.java index 5de959572c..5151043155 100644 --- a/Mage/src/main/java/mage/target/common/TargetPlayerOrPlaneswalker.java +++ b/Mage/src/main/java/mage/target/common/TargetPlayerOrPlaneswalker.java @@ -12,6 +12,7 @@ import mage.MageObject; import mage.abilities.Ability; import mage.constants.Zone; import mage.filter.Filter; +import mage.filter.common.FilterPlaneswalkerPermanent; import mage.filter.common.FilterPlayerOrPlaneswalker; import mage.game.Game; import mage.game.permanent.Permanent; @@ -213,6 +214,10 @@ public class TargetPlayerOrPlaneswalker extends TargetImpl { return sb.toString(); } + public FilterPlaneswalkerPermanent getPlaneswalkerFilter() { + return filter.getPlaneswalkerFilter(); + } + @Override public TargetPlayerOrPlaneswalker copy() { return new TargetPlayerOrPlaneswalker(this); From fe2220e19e9fdf5518aed2ac800eaf88b5812497 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 21:07:14 +0200 Subject: [PATCH 10/29] Xmage 1.4.29V0 --- Mage.Client/pom.xml | 2 +- Mage.Common/pom.xml | 2 +- Mage.Common/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.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml | 2 +- .../Mage.Game.FreeformCommanderFreeForAll/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml | 2 +- Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml | 2 +- .../Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml | 2 +- Mage.Server.Plugins/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.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml | 2 +- Mage.Server.Plugins/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 +- pom.xml | 4 ++-- 36 files changed, 38 insertions(+), 38 deletions(-) diff --git a/Mage.Client/pom.xml b/Mage.Client/pom.xml index fd907aa729..e68ed8ddbc 100644 --- a/Mage.Client/pom.xml +++ b/Mage.Client/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <groupId>org.mage</groupId> diff --git a/Mage.Common/pom.xml b/Mage.Common/pom.xml index 1ec1165dec..caf37f8201 100644 --- a/Mage.Common/pom.xml +++ b/Mage.Common/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-common</artifactId> diff --git a/Mage.Common/src/main/java/mage/utils/MageVersion.java b/Mage.Common/src/main/java/mage/utils/MageVersion.java index eac391f39c..a429afc59a 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<MageVersion> { */ public final static int MAGE_VERSION_MAJOR = 1; public final static int MAGE_VERSION_MINOR = 4; - public final static int MAGE_VERSION_PATCH = 28; - public final static String MAGE_VERSION_MINOR_PATCH = "V1"; + public final static int MAGE_VERSION_PATCH = 29; + 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 d2944cb269..18003b4177 100644 --- a/Mage.Plugins/Mage.Counter.Plugin/pom.xml +++ b/Mage.Plugins/Mage.Counter.Plugin/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-counter-plugin</artifactId> diff --git a/Mage.Plugins/pom.xml b/Mage.Plugins/pom.xml index 7e6f273822..4f55088ab0 100644 --- a/Mage.Plugins/pom.xml +++ b/Mage.Plugins/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-plugins</artifactId> diff --git a/Mage.Server.Console/pom.xml b/Mage.Server.Console/pom.xml index 9e108f5317..547a990f08 100644 --- a/Mage.Server.Console/pom.xml +++ b/Mage.Server.Console/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <groupId>org.mage</groupId> diff --git a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml index ab625726ad..287354462e 100644 --- a/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml +++ b/Mage.Server.Plugins/Mage.Deck.Constructed/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-deck-constructed</artifactId> diff --git a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml index aa81d459f7..19b53474c1 100644 --- a/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml +++ b/Mage.Server.Plugins/Mage.Deck.Limited/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-deck-limited</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml index fcefb189c8..cd785f4b49 100644 --- a/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.CanadianHighlanderDuel/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-canadianhighlanderduel</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml index 92b105dbab..26a262184c 100644 --- a/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.CommanderDuel/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-commanderduel</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml index 79236c53bd..19b505125d 100644 --- a/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.CommanderFreeForAll/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-commanderfreeforall</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml index 35a8cce789..045eea0eeb 100644 --- a/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.FreeForAll/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-freeforall</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml index ba54fbebeb..7db3a73717 100644 --- a/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.FreeformCommanderFreeForAll/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-freeformcommanderfreeforall</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml index fe2bbdc083..de50441804 100644 --- a/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.MomirDuel/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-momirduel</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml b/Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml index 2efafc2d56..c3e283c5a2 100644 --- a/Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.MomirGame/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-momirfreeforall</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml b/Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml index a55cb05de1..ce9eea9940 100644 --- a/Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.PennyDreadfulCommanderFreeForAll/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-pennydreadfulcommanderfreeforall</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml index b8db38b14a..5ee3091a35 100644 --- a/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.TinyLeadersDuel/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-tinyleadersduel</artifactId> diff --git a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml index 701cd2d51a..3554cbc99f 100644 --- a/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml +++ b/Mage.Server.Plugins/Mage.Game.TwoPlayerDuel/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-game-twoplayerduel</artifactId> diff --git a/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.DraftBot/pom.xml index b73916d86f..517e8282fd 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 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-player-ai-draftbot</artifactId> diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml b/Mage.Server.Plugins/Mage.Player.AI.MA/pom.xml index 55430e4984..69c7bda0bb 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 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-player-ai-ma</artifactId> diff --git a/Mage.Server.Plugins/Mage.Player.AI/pom.xml b/Mage.Server.Plugins/Mage.Player.AI/pom.xml index c25e70ebbe..b9f4cc1dd4 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AI/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-player-ai</artifactId> diff --git a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml index 9aaeefe83e..735dc58d65 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AIMCTS/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-player-ai-mcts</artifactId> diff --git a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml index 5116ebee21..4fb64e9919 100644 --- a/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.AIMinimax/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-player-aiminimax</artifactId> diff --git a/Mage.Server.Plugins/Mage.Player.Human/pom.xml b/Mage.Server.Plugins/Mage.Player.Human/pom.xml index 341f00780b..ef1db9b569 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/pom.xml +++ b/Mage.Server.Plugins/Mage.Player.Human/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-player-human</artifactId> diff --git a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml index 84ebd49f9f..ad331b12cc 100644 --- a/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.BoosterDraft/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-tournament-boosterdraft</artifactId> diff --git a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml index 5fc3a0b265..c72e49e940 100644 --- a/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.Constructed/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-tournament-constructed</artifactId> diff --git a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml index 175499da7a..ff27f07fd6 100644 --- a/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml +++ b/Mage.Server.Plugins/Mage.Tournament.Sealed/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-server-plugins</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-tournament-sealed</artifactId> diff --git a/Mage.Server.Plugins/pom.xml b/Mage.Server.Plugins/pom.xml index 0c1231654d..3b85e452c9 100644 --- a/Mage.Server.Plugins/pom.xml +++ b/Mage.Server.Plugins/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-server-plugins</artifactId> diff --git a/Mage.Server/pom.xml b/Mage.Server/pom.xml index 23914ed6ca..c907f85fae 100644 --- a/Mage.Server/pom.xml +++ b/Mage.Server/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-server</artifactId> diff --git a/Mage.Sets/pom.xml b/Mage.Sets/pom.xml index 94c14483fa..1410214a16 100644 --- a/Mage.Sets/pom.xml +++ b/Mage.Sets/pom.xml @@ -7,7 +7,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <groupId>org.mage</groupId> diff --git a/Mage.Stats/pom.xml b/Mage.Stats/pom.xml index 52e30f8136..818eb3bdd3 100644 --- a/Mage.Stats/pom.xml +++ b/Mage.Stats/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <groupId>org.mage</groupId> diff --git a/Mage.Tests/pom.xml b/Mage.Tests/pom.xml index 8fe7714626..0530e4aa3f 100644 --- a/Mage.Tests/pom.xml +++ b/Mage.Tests/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-tests</artifactId> diff --git a/Mage.Updater/pom.xml b/Mage.Updater/pom.xml index f815ad7913..33fb497996 100644 --- a/Mage.Updater/pom.xml +++ b/Mage.Updater/pom.xml @@ -5,7 +5,7 @@ <parent> <artifactId>mage-root</artifactId> <groupId>org.mage</groupId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <modelVersion>4.0.0</modelVersion> diff --git a/Mage.Verify/pom.xml b/Mage.Verify/pom.xml index fd26b6e7f5..e5fa977a77 100644 --- a/Mage.Verify/pom.xml +++ b/Mage.Verify/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage-verify</artifactId> diff --git a/Mage/pom.xml b/Mage/pom.xml index c3630a9fdd..c17c46b9bb 100644 --- a/Mage/pom.xml +++ b/Mage/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> </parent> <artifactId>mage</artifactId> diff --git a/pom.xml b/pom.xml index ce5b6b08bf..26f37804ca 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ <groupId>org.mage</groupId> <artifactId>mage-root</artifactId> - <version>1.4.28</version> + <version>1.4.29</version> <packaging>pom</packaging> <name>Mage Root</name> <description>Mage Root POM</description> @@ -84,7 +84,7 @@ </repositories> <properties> - <mage-version>1.4.28</mage-version> + <mage-version>1.4.29</mage-version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> From 53152e815c4ffdf0544899a38903b8f4b51f62ae Mon Sep 17 00:00:00 2001 From: Jimmy Gunter <gunterj@amazon.com> Date: Thu, 19 Apr 2018 13:07:23 -0700 Subject: [PATCH 11/29] Fix Relic Runner Should be CantBeBlocked instead of lifelink. --- Mage.Sets/src/mage/cards/r/RelicRunner.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/cards/r/RelicRunner.java b/Mage.Sets/src/mage/cards/r/RelicRunner.java index 604ba13eda..85372c1e1e 100644 --- a/Mage.Sets/src/mage/cards/r/RelicRunner.java +++ b/Mage.Sets/src/mage/cards/r/RelicRunner.java @@ -34,7 +34,9 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.effects.common.combat.CantBeBlockedAllEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.CantBeBlockedSourceAbility; import mage.abilities.keyword.LifelinkAbility; import mage.constants.SubType; import mage.cards.CardImpl; @@ -63,7 +65,7 @@ public class RelicRunner extends CardImpl { // Relic Runner can't be blocked if you've cast an historic spell this turn. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(LifelinkAbility.getInstance(), Duration.WhileOnBattlefield), + new GainAbilitySourceEffect(new CantBeBlockedSourceAbility(), Duration.EndOfTurn), new CastHistoricSpellThisTurnCondition(), "{this} can't be blocked if you've cast an historic spell this turn" ) From ea16704b506085840f7bfc4c31b3dc5c9479879f Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 22:10:04 +0200 Subject: [PATCH 12/29] * Vicious Offering - Fixed missing target definition. --- Mage.Sets/src/mage/cards/v/ViciousOffering.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Mage.Sets/src/mage/cards/v/ViciousOffering.java b/Mage.Sets/src/mage/cards/v/ViciousOffering.java index a06e08a279..dcbd33241d 100644 --- a/Mage.Sets/src/mage/cards/v/ViciousOffering.java +++ b/Mage.Sets/src/mage/cards/v/ViciousOffering.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.Duration; import static mage.filter.StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT; import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; /** * @@ -49,16 +50,15 @@ public class ViciousOffering extends CardImpl { public ViciousOffering(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.INSTANT}, "{1}{B}"); - // Kicker—Sacrifice a creature. - this.addAbility(new KickerAbility(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)))); + this.addAbility(new KickerAbility(new SacrificeTargetCost(new TargetControlledCreaturePermanent(FILTER_CONTROLLED_CREATURE_SHORT_TEXT)))); - // Target creature gets -2/-2 until end of turn. If this spell was kicked, that creature gets -5/-5 until end of turn instead. - this.getSpellAbility().addEffect(new ConditionalContinuousEffect(new BoostTargetEffect(-5, -5, Duration.EndOfTurn), + this.getSpellAbility().addEffect(new ConditionalContinuousEffect(new BoostTargetEffect(-5, -5, Duration.EndOfTurn), new BoostTargetEffect(-2, -2, Duration.EndOfTurn), new LockedInCondition(KickedCondition.instance), "Target creature gets -2/-2 until end of turn. If this spell was kicked, that creature gets -5/-5 until end of turn instead.")); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } public ViciousOffering(final ViciousOffering card) { From f142d5d32757fe9ca5d80347865bc822a357dcb0 Mon Sep 17 00:00:00 2001 From: Jimmy Gunter <gunterj@amazon.com> Date: Thu, 19 Apr 2018 13:10:04 -0700 Subject: [PATCH 13/29] Fix On Serra's Wings should be +1/+1 not +4/+4 --- Mage.Sets/src/mage/cards/o/OnSerrasWings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/cards/o/OnSerrasWings.java b/Mage.Sets/src/mage/cards/o/OnSerrasWings.java index a16cc6b7ac..127b8f2e56 100644 --- a/Mage.Sets/src/mage/cards/o/OnSerrasWings.java +++ b/Mage.Sets/src/mage/cards/o/OnSerrasWings.java @@ -74,7 +74,7 @@ public class OnSerrasWings extends CardImpl { Effect effect = new AddCardSuperTypeAttachedEffect(SuperType.LEGENDARY, Duration.WhileOnBattlefield, AttachmentType.AURA); effect.setText("Enchanted creature is legendary"); ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); - effect = new BoostEnchantedEffect(4, 4, Duration.WhileOnBattlefield); + effect = new BoostEnchantedEffect(1, 1, Duration.WhileOnBattlefield); effect.setText(", gets +1/+1"); ability.addEffect(effect); effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); From 112a7c7bc4e9cf89bb86ad5fb2ecc39db44010d3 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 22:13:01 +0200 Subject: [PATCH 14/29] * On Serras Wings - Fixed that the boost was +4/+4 instead of correctly +1/+1. --- Mage.Sets/src/mage/cards/o/OnSerrasWings.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/cards/o/OnSerrasWings.java b/Mage.Sets/src/mage/cards/o/OnSerrasWings.java index a16cc6b7ac..127b8f2e56 100644 --- a/Mage.Sets/src/mage/cards/o/OnSerrasWings.java +++ b/Mage.Sets/src/mage/cards/o/OnSerrasWings.java @@ -74,7 +74,7 @@ public class OnSerrasWings extends CardImpl { Effect effect = new AddCardSuperTypeAttachedEffect(SuperType.LEGENDARY, Duration.WhileOnBattlefield, AttachmentType.AURA); effect.setText("Enchanted creature is legendary"); ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); - effect = new BoostEnchantedEffect(4, 4, Duration.WhileOnBattlefield); + effect = new BoostEnchantedEffect(1, 1, Duration.WhileOnBattlefield); effect.setText(", gets +1/+1"); ability.addEffect(effect); effect = new GainAbilityAttachedEffect(FlyingAbility.getInstance(), AttachmentType.AURA); From bf65384886505541b065fcf4dd65768782473876 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 22:16:20 +0200 Subject: [PATCH 15/29] * Rona, Disciple of Gix - Fixed target text. --- .../src/mage/cards/r/RonaDiscipleOfGix.java | 334 +++++++++--------- 1 file changed, 167 insertions(+), 167 deletions(-) diff --git a/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java b/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java index f5f0c6a14a..85d43403ed 100644 --- a/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java +++ b/Mage.Sets/src/mage/cards/r/RonaDiscipleOfGix.java @@ -1,167 +1,167 @@ -/* - * 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.r; - -import java.util.UUID; -import mage.MageInt; -import mage.MageObject; -import mage.abilities.Ability; -import mage.abilities.common.EntersBattlefieldTriggeredAbility; -import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.common.TapSourceCost; -import mage.abilities.costs.mana.GenericManaCost; -import mage.abilities.effects.AsThoughEffectImpl; -import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.ExileTargetEffect; -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.SubType; -import mage.constants.SuperType; -import mage.constants.Zone; -import mage.filter.common.FilterHistoricCard; -import mage.game.ExileZone; -import mage.game.Game; -import mage.players.Player; -import mage.target.common.TargetCardInYourGraveyard; -import mage.util.CardUtil; - -/** - * - * @author LevelX2 - */ -public class RonaDiscipleOfGix extends CardImpl { - - public RonaDiscipleOfGix(UUID ownerId, CardSetInfo setInfo) { - super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}"); - - this.addSuperType(SuperType.LEGENDARY); - this.subtype.add(SubType.HUMAN); - this.subtype.add(SubType.ARTIFICER); - this.power = new MageInt(2); - this.toughness = new MageInt(2); - - // When Rona, Disciple of Gix enters the battlefield, you may exile target historic card from your graveyard. - String abilityText = "When Rona, Disciple of Gix enters the battlefield, you may exile target historic card from your graveyard."; - Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect().setToSourceExileZone(true), true, abilityText); - ability.addTarget(new TargetCardInYourGraveyard(new FilterHistoricCard())); - this.addAbility(ability); - - // You may cast nonland cards exiled with Rona. - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new RonaDiscipleOfGixPlayNonLandEffect())); - - // {4}, {T}: Exile the top card of your library. - ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RonaDiscipleOfGixExileEffect(), new GenericManaCost(4)); - ability.addCost(new TapSourceCost()); - this.addAbility(ability); - } - - public RonaDiscipleOfGix(final RonaDiscipleOfGix card) { - super(card); - } - - @Override - public RonaDiscipleOfGix copy() { - return new RonaDiscipleOfGix(this); - } -} - -class RonaDiscipleOfGixPlayNonLandEffect extends AsThoughEffectImpl { - - public RonaDiscipleOfGixPlayNonLandEffect() { - super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "You may cast nonland cards exiled with {this}"; - } - - public RonaDiscipleOfGixPlayNonLandEffect(final RonaDiscipleOfGixPlayNonLandEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - return true; - } - - @Override - public RonaDiscipleOfGixPlayNonLandEffect copy() { - return new RonaDiscipleOfGixPlayNonLandEffect(this); - } - - @Override - public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { - if (affectedControllerId.equals(source.getControllerId())) { - Card card = game.getCard(objectId); - MageObject sourceObject = source.getSourceObject(game); - if (card != null && !card.isLand() && sourceObject != null) { - UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); - if (exileId != null) { - ExileZone exileZone = game.getState().getExile().getExileZone(exileId); - return exileZone != null && exileZone.contains(objectId); - } - } - } - return false; - } -} - -class RonaDiscipleOfGixExileEffect extends OneShotEffect { - - public RonaDiscipleOfGixExileEffect() { - super(Outcome.Exile); - this.staticText = "Exile the top card of your library"; - } - - public RonaDiscipleOfGixExileEffect(final RonaDiscipleOfGixExileEffect effect) { - super(effect); - } - - @Override - public RonaDiscipleOfGixExileEffect copy() { - return new RonaDiscipleOfGixExileEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - MageObject sourceObject = source.getSourceObject(game); - if (controller != null && sourceObject != null) { - Card card = controller.getLibrary().getFromTop(game); - if (card != null) { - UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); - controller.moveCardsToExile(card, source, game, true, exileId, sourceObject.getIdName()); - } - return true; - } - return false; - } -} +/* + * 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.r; + +import java.util.UUID; +import mage.MageInt; +import mage.MageObject; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.AsThoughEffectImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ExileTargetEffect; +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.SubType; +import mage.constants.SuperType; +import mage.constants.Zone; +import mage.filter.common.FilterHistoricCard; +import mage.game.ExileZone; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetCardInYourGraveyard; +import mage.util.CardUtil; + +/** + * + * @author LevelX2 + */ +public class RonaDiscipleOfGix extends CardImpl { + + public RonaDiscipleOfGix(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}"); + + this.addSuperType(SuperType.LEGENDARY); + this.subtype.add(SubType.HUMAN); + this.subtype.add(SubType.ARTIFICER); + this.power = new MageInt(2); + this.toughness = new MageInt(2); + + // When Rona, Disciple of Gix enters the battlefield, you may exile target historic card from your graveyard. + String abilityText = "When {this} enters the battlefield, you may exile target historic card from your graveyard. <i>(Artifacts, legendaries, and Sagas are historic.)</i>"; + Ability ability = new EntersBattlefieldTriggeredAbility(new ExileTargetEffect().setToSourceExileZone(true), true, abilityText); + ability.addTarget(new TargetCardInYourGraveyard(new FilterHistoricCard("historic card from your graveyard"))); + this.addAbility(ability); + + // You may cast nonland cards exiled with Rona. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new RonaDiscipleOfGixPlayNonLandEffect())); + + // {4}, {T}: Exile the top card of your library. + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RonaDiscipleOfGixExileEffect(), new GenericManaCost(4)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public RonaDiscipleOfGix(final RonaDiscipleOfGix card) { + super(card); + } + + @Override + public RonaDiscipleOfGix copy() { + return new RonaDiscipleOfGix(this); + } +} + +class RonaDiscipleOfGixPlayNonLandEffect extends AsThoughEffectImpl { + + public RonaDiscipleOfGixPlayNonLandEffect() { + super(AsThoughEffectType.PLAY_FROM_NOT_OWN_HAND_ZONE, Duration.WhileOnBattlefield, Outcome.Benefit); + staticText = "You may cast nonland cards exiled with {this}"; + } + + public RonaDiscipleOfGixPlayNonLandEffect(final RonaDiscipleOfGixPlayNonLandEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public RonaDiscipleOfGixPlayNonLandEffect copy() { + return new RonaDiscipleOfGixPlayNonLandEffect(this); + } + + @Override + public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { + if (affectedControllerId.equals(source.getControllerId())) { + Card card = game.getCard(objectId); + MageObject sourceObject = source.getSourceObject(game); + if (card != null && !card.isLand() && sourceObject != null) { + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); + if (exileId != null) { + ExileZone exileZone = game.getState().getExile().getExileZone(exileId); + return exileZone != null && exileZone.contains(objectId); + } + } + } + return false; + } +} + +class RonaDiscipleOfGixExileEffect extends OneShotEffect { + + public RonaDiscipleOfGixExileEffect() { + super(Outcome.Exile); + this.staticText = "Exile the top card of your library"; + } + + public RonaDiscipleOfGixExileEffect(final RonaDiscipleOfGixExileEffect effect) { + super(effect); + } + + @Override + public RonaDiscipleOfGixExileEffect copy() { + return new RonaDiscipleOfGixExileEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + MageObject sourceObject = source.getSourceObject(game); + if (controller != null && sourceObject != null) { + Card card = controller.getLibrary().getFromTop(game); + if (card != null) { + UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); + controller.moveCardsToExile(card, source, game, true, exileId, sourceObject.getIdName()); + } + return true; + } + return false; + } +} From 19ad6da60873d98fb7ee6587d4b8987b01fa2760 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 22:33:51 +0200 Subject: [PATCH 16/29] * Knight of Malice - Fixed that all controlled creatures were boost instead of only the Knight. --- Mage.Sets/src/mage/cards/k/KnightOfMalice.java | 18 +++++------------- .../common/AnyPlayerControlsCondition.java | 10 +++++----- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/Mage.Sets/src/mage/cards/k/KnightOfMalice.java b/Mage.Sets/src/mage/cards/k/KnightOfMalice.java index e44e441052..3639a7263f 100644 --- a/Mage.Sets/src/mage/cards/k/KnightOfMalice.java +++ b/Mage.Sets/src/mage/cards/k/KnightOfMalice.java @@ -1,13 +1,13 @@ package mage.cards.k; +import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.AnyPlayerControlsCondition; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.keyword.FirstStrikeAbility; -import mage.abilities.keyword.HexproofFromBlackAbility; import mage.abilities.keyword.HexproofFromWhiteAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -18,8 +18,6 @@ import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.predicate.mageobject.ColorPredicate; -import java.util.UUID; - public class KnightOfMalice extends CardImpl { private static final FilterPermanent filter = new FilterPermanent("white permanent"); @@ -37,26 +35,20 @@ public class KnightOfMalice extends CardImpl { addAbility(FirstStrikeAbility.getInstance()); addAbility(HexproofFromWhiteAbility.getInstance()); - //Knight of Malice gets +1/+0 as long as any player controls a white permanent. addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield), + new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield), new AnyPlayerControlsCondition(filter), "{this} gets +1/+0 as long as any player controls a white permanent."))); - - - - } - public KnightOfMalice(final KnightOfMalice knightOfGrace){ + public KnightOfMalice(final KnightOfMalice knightOfGrace) { super(knightOfGrace); } - public KnightOfMalice copy(){ + public KnightOfMalice copy() { return new KnightOfMalice(this); } - } diff --git a/Mage/src/main/java/mage/abilities/condition/common/AnyPlayerControlsCondition.java b/Mage/src/main/java/mage/abilities/condition/common/AnyPlayerControlsCondition.java index 7a82029a15..e1f987096f 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/AnyPlayerControlsCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/AnyPlayerControlsCondition.java @@ -27,11 +27,11 @@ */ package mage.abilities.condition.common; +import java.util.UUID; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.filter.FilterPermanent; import mage.game.Game; -import java.util.UUID; /** * @author North @@ -47,12 +47,12 @@ public class AnyPlayerControlsCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - for (UUID player : game.getPlayers().keySet()) { - if(player != null && game.getBattlefield().countAll(filter, player, game)> 0){ - return true; + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { + if (game.getBattlefield().countAll(filter, playerId, game) == 0) { + return false; } } - return false; + return true; } } From 7ff67b30fa8cc62e131736efb23f5e6064cda83b Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 22:48:20 +0200 Subject: [PATCH 17/29] * Relic Runner - Fixed condional can't be blocked handling. --- Mage.Sets/src/mage/cards/r/RelicRunner.java | 8 +++----- Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java | 2 +- Mage.Sets/src/mage/cards/w/WarlordsFury.java | 5 +++-- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/Mage.Sets/src/mage/cards/r/RelicRunner.java b/Mage.Sets/src/mage/cards/r/RelicRunner.java index 85372c1e1e..8562438c5d 100644 --- a/Mage.Sets/src/mage/cards/r/RelicRunner.java +++ b/Mage.Sets/src/mage/cards/r/RelicRunner.java @@ -34,15 +34,13 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.decorator.ConditionalContinuousEffect; -import mage.abilities.effects.common.combat.CantBeBlockedAllEffect; import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; import mage.abilities.keyword.CantBeBlockedSourceAbility; -import mage.abilities.keyword.LifelinkAbility; -import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; +import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.stack.Spell; @@ -65,9 +63,9 @@ public class RelicRunner extends CardImpl { // Relic Runner can't be blocked if you've cast an historic spell this turn. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new GainAbilitySourceEffect(new CantBeBlockedSourceAbility(), Duration.EndOfTurn), + new GainAbilitySourceEffect(new CantBeBlockedSourceAbility(), Duration.WhileOnBattlefield), new CastHistoricSpellThisTurnCondition(), - "{this} can't be blocked if you've cast an historic spell this turn" + "{this} can't be blocked if you've cast an historic spell this turn. <i>(Artifacts, legendaries, and Sagas are historic.)</i>" ) ), new SpellsCastWatcher()); } diff --git a/Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java b/Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java index d3a07b30ff..22effec5ad 100644 --- a/Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java +++ b/Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java @@ -59,7 +59,7 @@ import mage.filter.predicate.permanent.AnotherPredicate; public class ShalaiVoiceOfPlenty extends CardImpl { private static final FilterControlledPermanent filter1 = new FilterControlledPermanent("planeswalkers you control"); - private static final FilterControlledPermanent filter2 = new FilterControlledPermanent("Humans you control"); + private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(); static { filter1.add(new CardTypePredicate(CardType.PLANESWALKER)); diff --git a/Mage.Sets/src/mage/cards/w/WarlordsFury.java b/Mage.Sets/src/mage/cards/w/WarlordsFury.java index 0ac1c86194..215b905778 100644 --- a/Mage.Sets/src/mage/cards/w/WarlordsFury.java +++ b/Mage.Sets/src/mage/cards/w/WarlordsFury.java @@ -35,7 +35,7 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; -import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.StaticFilters; /** * @@ -47,7 +47,8 @@ public class WarlordsFury extends CardImpl { super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{R}"); // Creatures you control gain first strike until end of turn. - getSpellAbility().addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent(), "Creatures you control gain first strike until end of turn")); + getSpellAbility().addEffect(new GainAbilityAllEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn, + StaticFilters.FILTER_CONTROLLED_CREATURES, "Creatures you control gain first strike until end of turn.<br>")); // Draw a card. getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); From e4fb9a6217eae496662c72ca5c6e6fad9300a0b4 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 23:04:03 +0200 Subject: [PATCH 18/29] * Shalai, Voice of Plenty - Fixed that it also gave wrongly hexproof to itself. --- Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java b/Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java index 22effec5ad..9ef1c4fc4f 100644 --- a/Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java +++ b/Mage.Sets/src/mage/cards/s/ShalaiVoiceOfPlenty.java @@ -47,10 +47,10 @@ import mage.constants.SubType; import mage.constants.SuperType; import mage.constants.Zone; import mage.counters.CounterType; +import mage.filter.StaticFilters; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.CardTypePredicate; -import mage.filter.predicate.permanent.AnotherPredicate; /** * @@ -59,12 +59,9 @@ import mage.filter.predicate.permanent.AnotherPredicate; public class ShalaiVoiceOfPlenty extends CardImpl { private static final FilterControlledPermanent filter1 = new FilterControlledPermanent("planeswalkers you control"); - private static final FilterControlledPermanent filter2 = new FilterControlledPermanent(); static { filter1.add(new CardTypePredicate(CardType.PLANESWALKER)); - filter2.add(new CardTypePredicate(CardType.CREATURE)); - filter2.add(new AnotherPredicate()); } public ShalaiVoiceOfPlenty(UUID ownerId, CardSetInfo setInfo) { @@ -85,7 +82,7 @@ public class ShalaiVoiceOfPlenty extends CardImpl { effect = new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, filter1); effect.setText(", planeswalkers you control"); ability.addEffect(effect); - effect = new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, filter2); + effect = new GainAbilityControlledEffect(HexproofAbility.getInstance(), Duration.WhileOnBattlefield, StaticFilters.FILTER_PERMANENT_CREATURES, true); effect.setText(", and other creatures you control have hexproof"); ability.addEffect(effect); this.addAbility(ability); From e7567b7e208866c444572dab9c939aee175f08a4 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov <jaydi85@gmail.com> Date: Fri, 20 Apr 2018 01:20:15 +0400 Subject: [PATCH 19/29] * Knight of Grace - Fixed that all controlled creatures were boost instead of only the Knight. --- Mage.Sets/src/mage/cards/k/KnightOfGrace.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/Mage.Sets/src/mage/cards/k/KnightOfGrace.java b/Mage.Sets/src/mage/cards/k/KnightOfGrace.java index 235258e950..c562e2ae63 100644 --- a/Mage.Sets/src/mage/cards/k/KnightOfGrace.java +++ b/Mage.Sets/src/mage/cards/k/KnightOfGrace.java @@ -7,6 +7,7 @@ import mage.abilities.condition.common.AnyPlayerControlsCondition; import mage.abilities.condition.common.DefendingPlayerControlsCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; +import mage.abilities.effects.common.continuous.BoostSourceEffect; import mage.abilities.effects.common.continuous.BoostSourceWhileControlsEffect; import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.HexproofFromBlackAbility; @@ -41,14 +42,10 @@ public class KnightOfGrace extends CardImpl { //Knight of Grace gets +1/+0 as long as any player controls a black permanent. addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( - new BoostControlledEffect(1, 0, Duration.WhileOnBattlefield), + new BoostSourceEffect(1, 0, Duration.WhileOnBattlefield), new AnyPlayerControlsCondition(filter), "{this} gets +1/+0 as long as any player controls a black permanent."))); - - - - } public KnightOfGrace(final KnightOfGrace knightOfGrace){ From 6eda81c1a71a471814e0d9659f34656a34ec9e83 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 23:23:20 +0200 Subject: [PATCH 20/29] * Fight with Fire - Fixed not working target handling. --- Mage.Sets/src/mage/cards/f/FightWithFire.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Mage.Sets/src/mage/cards/f/FightWithFire.java b/Mage.Sets/src/mage/cards/f/FightWithFire.java index 099186f56b..6e3e1cab17 100644 --- a/Mage.Sets/src/mage/cards/f/FightWithFire.java +++ b/Mage.Sets/src/mage/cards/f/FightWithFire.java @@ -40,6 +40,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.game.Game; import mage.target.common.TargetAnyTargetAmount; +import mage.target.common.TargetCreaturePermanent; /** * @@ -62,6 +63,7 @@ public class FightWithFire extends CardImpl { + "it deals 10 damage divided as you choose among any number of targets instead." + "<i> (Those targets can include players and planeswalkers.)</i>" )); + this.getSpellAbility().addTarget(new TargetCreaturePermanent()); } public FightWithFire(final FightWithFire card) { @@ -73,7 +75,7 @@ public class FightWithFire extends CardImpl { if (ability instanceof SpellAbility) { if (KickedCondition.instance.apply(game, ability)) { ability.getTargets().clear(); - getSpellAbility().addTarget(new TargetAnyTargetAmount(10)); + ability.addTarget(new TargetAnyTargetAmount(10)); } } } From 7a79b57515d8dda33c97a23b09d68c8707cf77ce Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Thu, 19 Apr 2018 23:32:04 +0200 Subject: [PATCH 21/29] * The Flame of Keld - Fixed game exception during copy. --- .../src/mage/cards/t/TheFlameOfKeld.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Mage.Sets/src/mage/cards/t/TheFlameOfKeld.java b/Mage.Sets/src/mage/cards/t/TheFlameOfKeld.java index 3fb08c92c7..a2b30e363f 100644 --- a/Mage.Sets/src/mage/cards/t/TheFlameOfKeld.java +++ b/Mage.Sets/src/mage/cards/t/TheFlameOfKeld.java @@ -28,17 +28,15 @@ package mage.cards.t; import java.util.UUID; - import mage.MageObject; import mage.abilities.Ability; import mage.abilities.common.SagaAbility; -import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.ReplacementEffectImpl; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.discard.DiscardHandControllerEffect; -import mage.constants.*; import mage.cards.CardImpl; import mage.cards.CardSetInfo; +import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; @@ -52,7 +50,7 @@ public class TheFlameOfKeld extends CardImpl { public TheFlameOfKeld(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{R}"); - + this.subtype.add(SubType.SAGA); // <i>(As this Saga enters and after your draw step, add a lore counter. Sacrifice after III.)</i> @@ -99,7 +97,7 @@ class TheFlameOfKeldDamageEffect extends ReplacementEffectImpl { @Override public boolean checksEventType(GameEvent event, Game game) { - switch(event.getType()) { + switch (event.getType()) { case DAMAGE_CREATURE: case DAMAGE_PLANESWALKER: case DAMAGE_PLAYER: @@ -111,13 +109,12 @@ class TheFlameOfKeldDamageEffect extends ReplacementEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { - if(source.getControllerId().equals(game.getControllerId(event.getSourceId()))) { + if (source.getControllerId().equals(game.getControllerId(event.getSourceId()))) { MageObject sourceObject; Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(event.getSourceId()); - if(sourcePermanent == null) { + if (sourcePermanent == null) { sourceObject = game.getObject(event.getSourceId()); - } - else { + } else { sourceObject = sourcePermanent; } return sourceObject != null && sourceObject.getColor(game).isRed() && !sourceObject.getId().equals(source.getSourceId()); @@ -126,7 +123,8 @@ class TheFlameOfKeldDamageEffect extends ReplacementEffectImpl { } @Override - public ContinuousEffect copy() { - return null; + public TheFlameOfKeldDamageEffect copy() { + return new TheFlameOfKeldDamageEffect(this); } + } From 4280d92a3714c9e80effc50e995a42fa6cb07fa4 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Fri, 20 Apr 2018 00:09:32 +0200 Subject: [PATCH 22/29] Xmage 1.4.29V1 --- Mage.Common/src/main/java/mage/utils/MageVersion.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Mage.Common/src/main/java/mage/utils/MageVersion.java b/Mage.Common/src/main/java/mage/utils/MageVersion.java index a429afc59a..678b175288 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<MageVersion> { public final static int MAGE_VERSION_MAJOR = 1; public final static int MAGE_VERSION_MINOR = 4; public final static int MAGE_VERSION_PATCH = 29; - public final static String MAGE_VERSION_MINOR_PATCH = "V0"; + public final static String MAGE_VERSION_MINOR_PATCH = "V1"; public final static String MAGE_VERSION_INFO = ""; private final int major; From 3c80a915fa319b95b741ee10f2c91d21234d8fa8 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov <jaydi85@gmail.com> Date: Fri, 20 Apr 2018 03:09:43 +0400 Subject: [PATCH 23/29] * Benalish Honor Guard - fixed +1/0 for all Legendary permanents instead creatures --- Mage.Sets/src/mage/cards/b/BenalishHonorGuard.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/cards/b/BenalishHonorGuard.java b/Mage.Sets/src/mage/cards/b/BenalishHonorGuard.java index 3d4662bf1b..eccc7ef530 100644 --- a/Mage.Sets/src/mage/cards/b/BenalishHonorGuard.java +++ b/Mage.Sets/src/mage/cards/b/BenalishHonorGuard.java @@ -40,6 +40,7 @@ import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SuperType; import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.mageobject.SupertypePredicate; @@ -49,8 +50,7 @@ import mage.filter.predicate.mageobject.SupertypePredicate; */ public class BenalishHonorGuard extends CardImpl { - private static final FilterControlledPermanent filter = new FilterControlledPermanent("legendary creature you control"); - + private static final FilterControlledPermanent filter = new FilterControlledCreaturePermanent("legendary creature you control"); static { filter.add(new SupertypePredicate(SuperType.LEGENDARY)); } From e3750ad335b3daa9eb9d75f96daa5ff9bf62be35 Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Fri, 20 Apr 2018 08:04:49 +0200 Subject: [PATCH 24/29] * Fixed Knight of Malice, Knight of Grace that boost only worked if all players had a permanent with the needed color (fixes #4811). --- Mage.Sets/src/mage/cards/h/HeartOfKiran.java | 2 +- .../condition/common/AnyPlayerControlsCondition.java | 10 +--------- .../game/command/emblems/LilianaTheLastHopeEmblem.java | 1 + 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/Mage.Sets/src/mage/cards/h/HeartOfKiran.java b/Mage.Sets/src/mage/cards/h/HeartOfKiran.java index 728776ed32..0c51696f4c 100644 --- a/Mage.Sets/src/mage/cards/h/HeartOfKiran.java +++ b/Mage.Sets/src/mage/cards/h/HeartOfKiran.java @@ -73,7 +73,7 @@ public class HeartOfKiran extends CardImpl { // You may remove a loyalty counter from a planeswalker you control rather than pay Heart of Kiran's crew cost. Cost cost = new HeartOfKiranAlternateCrewCost(CounterType.LOYALTY, 1); - Effect effect = new AddCardTypeSourceEffect(Duration.EndOfTurn, CardType.CREATURE, CardType.CREATURE); + Effect effect = new AddCardTypeSourceEffect(Duration.EndOfTurn, CardType.CREATURE); effect.setText("You may remove a loyalty counter from a planeswalker you control rather than pay {this}'s crew cost"); this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, cost)); } diff --git a/Mage/src/main/java/mage/abilities/condition/common/AnyPlayerControlsCondition.java b/Mage/src/main/java/mage/abilities/condition/common/AnyPlayerControlsCondition.java index e1f987096f..5a7434da34 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/AnyPlayerControlsCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/AnyPlayerControlsCondition.java @@ -27,7 +27,6 @@ */ package mage.abilities.condition.common; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.filter.FilterPermanent; @@ -46,13 +45,6 @@ public class AnyPlayerControlsCondition implements Condition { @Override public boolean apply(Game game, Ability source) { - - for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { - if (game.getBattlefield().countAll(filter, playerId, game) == 0) { - return false; - } - - } - return true; + return game.getBattlefield().count(filter, source.getSourceId(), source.getControllerId(), game) > 0; } } diff --git a/Mage/src/main/java/mage/game/command/emblems/LilianaTheLastHopeEmblem.java b/Mage/src/main/java/mage/game/command/emblems/LilianaTheLastHopeEmblem.java index 824ea46097..0199536c52 100644 --- a/Mage/src/main/java/mage/game/command/emblems/LilianaTheLastHopeEmblem.java +++ b/Mage/src/main/java/mage/game/command/emblems/LilianaTheLastHopeEmblem.java @@ -47,6 +47,7 @@ import mage.game.permanent.token.ZombieToken; */ public class LilianaTheLastHopeEmblem extends Emblem { + // "At the beginning of your end step, create X 2/2 black Zombie creature tokens, where X is two plus the number of Zombies you control." public LilianaTheLastHopeEmblem() { this.setName("Emblem Liliana"); Ability ability = new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new CreateTokenEffect(new ZombieToken(), new LilianaZombiesCount()), From 7116182aa2c3387c5036ef03060db0f828d1026d Mon Sep 17 00:00:00 2001 From: spjspj <spjspj4@gmail.com> Date: Fri, 20 Apr 2018 19:50:27 +1000 Subject: [PATCH 25/29] Fix for Agyrem Plane --- .../main/java/mage/game/command/planes/AgyremPlane.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java b/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java index 0d47827726..6582338512 100644 --- a/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java @@ -178,6 +178,15 @@ class AgyremRestrictionEffect extends RestrictionEffect { @Override public boolean canAttack(Permanent attacker, UUID defenderId, Ability source, Game game) { + Plane cPlane = game.getState().getCurrentPlane(); + if (cPlane == null) { + return true; + } + if (cPlane != null) { + if (cPlane.getName().equalsIgnoreCase("Plane - Agyrem")) { + return false; + } + } return !defenderId.equals(source.getControllerId()); } From c648ddd6e5b3e80d4036972c9b8aad12794e053b Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Fri, 20 Apr 2018 15:40:02 +0200 Subject: [PATCH 26/29] Fixed a problem with exiling copied spells from the stack (Time Stop and Hive Mind problem). --- Mage/src/main/java/mage/game/stack/Spell.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Mage/src/main/java/mage/game/stack/Spell.java b/Mage/src/main/java/mage/game/stack/Spell.java index c342549d36..8ff863febe 100644 --- a/Mage/src/main/java/mage/game/stack/Spell.java +++ b/Mage/src/main/java/mage/game/stack/Spell.java @@ -763,6 +763,10 @@ public class Spell extends StackObjImpl implements Card { @Override public boolean moveToExile(UUID exileId, String name, UUID sourceId, Game game, List<UUID> appliedEffects) { + if (this.isCopiedSpell()) { + game.getStack().remove(this); + return true; + } return this.card.moveToExile(exileId, name, sourceId, game, appliedEffects); } From c28790248cc0ac9181db3f722303e2e0ea1f16a7 Mon Sep 17 00:00:00 2001 From: Evan Kranzler <theelk801@gmail.com> Date: Fri, 20 Apr 2018 14:00:09 -0400 Subject: [PATCH 27/29] fixed Two-Headed Giant not gaining abilities --- Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java b/Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java index f78aecccc9..1e9bdd16e2 100644 --- a/Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java +++ b/Mage.Sets/src/mage/cards/t/TwoHeadedGiant.java @@ -39,6 +39,7 @@ import mage.constants.SubType; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Duration; import mage.constants.Outcome; import mage.game.Game; import mage.players.Player; @@ -98,9 +99,9 @@ class TwoHeadedGiantEffect extends OneShotEffect { boolean head2 = player.flipCoin(game); if (head1 == head2) { if (head1) { - new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance()).apply(game, source); + game.addEffect(new GainAbilitySourceEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn), source); } else { - new GainAbilitySourceEffect(new MenaceAbility()).apply(game, source); + game.addEffect(new GainAbilitySourceEffect(new MenaceAbility(), Duration.EndOfTurn), source); } } return true; From e4f09a53587ff687cc5ce17eda2fd6a190c401cb Mon Sep 17 00:00:00 2001 From: LevelX2 <ludwig.hirth@online.de> Date: Fri, 20 Apr 2018 20:09:25 +0200 Subject: [PATCH 28/29] * Fixed that casting Fervent Strike didn't give double strike to targeted creature with Kwende, Pride of Femeref onto battlefield (fixes #4813). --- .../mage/cards/k/KwendePrideOfFemeref.java | 14 ++++++----- .../continuous/GainAbilityAllEffect.java | 2 ++ .../continuous/GainAbilityAttachedEffect.java | 2 ++ .../GainAbilityControlledEffect.java | 23 ++++++++++--------- .../continuous/GainAbilitySourceEffect.java | 2 ++ .../continuous/GainAbilityTargetEffect.java | 2 ++ .../java/mage/constants/DependencyType.java | 1 + 7 files changed, 29 insertions(+), 17 deletions(-) diff --git a/Mage.Sets/src/mage/cards/k/KwendePrideOfFemeref.java b/Mage.Sets/src/mage/cards/k/KwendePrideOfFemeref.java index eac5239cb0..dfa5f73824 100644 --- a/Mage.Sets/src/mage/cards/k/KwendePrideOfFemeref.java +++ b/Mage.Sets/src/mage/cards/k/KwendePrideOfFemeref.java @@ -30,15 +30,17 @@ package mage.cards.k; import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ContinuousEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; -import mage.constants.SubType; -import mage.constants.SuperType; import mage.abilities.keyword.DoubleStrikeAbility; import mage.abilities.keyword.FirstStrikeAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.DependencyType; import mage.constants.Duration; +import mage.constants.SubType; +import mage.constants.SuperType; import mage.constants.Zone; import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.predicate.mageobject.AbilityPredicate; @@ -68,10 +70,10 @@ public class KwendePrideOfFemeref extends CardImpl { this.addAbility(DoubleStrikeAbility.getInstance()); // Creatures you control with first strike have double strike. - this.addAbility(new SimpleStaticAbility( - Zone.BATTLEFIELD, new GainAbilityAllEffect(DoubleStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, false) - .setText("Creatures you control with first strike have double strike") - )); + ContinuousEffect effect = new GainAbilityAllEffect(DoubleStrikeAbility.getInstance(), Duration.WhileOnBattlefield, filter, false); + effect.setText("Creatures you control with first strike have double strike"); + effect.setDependedToType(DependencyType.AddingAbility); // effects that add first strike need to be executed first + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, effect)); } public KwendePrideOfFemeref(final KwendePrideOfFemeref card) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java index f82d9011ac..0211176f39 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAllEffect.java @@ -38,6 +38,7 @@ import mage.abilities.Mode; import mage.abilities.TriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.DependencyType; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; @@ -80,6 +81,7 @@ public class GainAbilityAllEffect extends ContinuousEffectImpl { this.ability.newId(); this.filter = filter; this.excludeSource = excludeSource; + this.addDependencyType(DependencyType.AddingAbility); } public GainAbilityAllEffect(final GainAbilityAllEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAttachedEffect.java index 543c49bab4..40c9572615 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAttachedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityAttachedEffect.java @@ -30,6 +30,7 @@ package mage.abilities.effects.common.continuous; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffectImpl; import mage.constants.AttachmentType; +import mage.constants.DependencyType; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; @@ -75,6 +76,7 @@ public class GainAbilityAttachedEffect extends ContinuousEffectImpl { } else { this.staticText = rule; } + this.addDependencyType(DependencyType.AddingAbility); } public GainAbilityAttachedEffect(final GainAbilityAttachedEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java index 9018031b65..8812f967b1 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityControlledEffect.java @@ -1,16 +1,16 @@ /* * 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 @@ -20,12 +20,11 @@ * 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.abilities.effects.common.continuous; import java.util.HashMap; @@ -36,6 +35,7 @@ import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.CompoundAbility; import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.DependencyType; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; @@ -79,6 +79,7 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl { this.ability = ability; this.filter = filter; this.excludeSource = excludeSource; + this.addDependencyType(DependencyType.AddingAbility); setText(); } @@ -87,6 +88,7 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl { this.ability = effect.ability.copy(); this.filter = effect.filter.copy(); this.excludeSource = effect.excludeSource; + } @Override @@ -113,7 +115,7 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl { Permanent perm = it.next().getPermanentOrLKIBattlefield(game); //LKI is neccessary for "dies triggered abilities" to work given to permanets (e.g. Showstopper) if (perm != null) { for (Ability abilityToAdd : ability) { - perm.addAbility(abilityToAdd, source.getSourceId(), game, false); + perm.addAbility(abilityToAdd, source.getSourceId(), game, false); } } else { it.remove(); @@ -133,7 +135,7 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl { // still as long as the prev. permanent is known to the LKI (e.g. Mikaeus, the Unhallowed) so gained dies triggered ability will trigger HashMap<UUID, MageObject> LKIBattlefield = game.getLKI().get(Zone.BATTLEFIELD); if (LKIBattlefield != null) { - for (MageObject mageObject: LKIBattlefield.values()) { + for (MageObject mageObject : LKIBattlefield.values()) { Permanent perm = (Permanent) mageObject; if (!(excludeSource && perm.getId().equals(source.getSourceId()))) { if (filter.match(perm, source.getSourceId(), source.getControllerId(), game)) { @@ -168,13 +170,12 @@ public class GainAbilityControlledEffect extends ContinuousEffectImpl { if (gainedAbility.startsWith("Whenever ") || gainedAbility.startsWith("{T}")) { gainedAbility = '"' + gainedAbility + '"'; } - } - else { + } else { sb.append("gain "); } sb.append(gainedAbility); if (!duration.toString().isEmpty() && duration != Duration.EndOfGame) { - sb.append(' ').append(duration.toString()); + sb.append(' ').append(duration.toString()); } staticText = sb.toString(); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java index 3b4b491b5e..0583582141 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilitySourceEffect.java @@ -31,6 +31,7 @@ import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffectImpl; import mage.cards.Card; +import mage.constants.DependencyType; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; @@ -75,6 +76,7 @@ public class GainAbilitySourceEffect extends ContinuousEffectImpl implements Sou if (noStaticText) { staticText = null; } + this.addDependencyType(DependencyType.AddingAbility); } public GainAbilitySourceEffect(final GainAbilitySourceEffect effect) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityTargetEffect.java index 4660a926cd..dcf23d4d1c 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/GainAbilityTargetEffect.java @@ -33,6 +33,7 @@ import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.effects.ContinuousEffectImpl; import mage.cards.Card; +import mage.constants.DependencyType; import mage.constants.Duration; import mage.constants.Layer; import mage.constants.Outcome; @@ -75,6 +76,7 @@ public class GainAbilityTargetEffect extends ContinuousEffectImpl { this.ability = ability; staticText = rule; this.onCard = onCard; + this.addDependencyType(DependencyType.AddingAbility); } public GainAbilityTargetEffect(final GainAbilityTargetEffect effect) { diff --git a/Mage/src/main/java/mage/constants/DependencyType.java b/Mage/src/main/java/mage/constants/DependencyType.java index d5ada875ed..e5533442bf 100644 --- a/Mage/src/main/java/mage/constants/DependencyType.java +++ b/Mage/src/main/java/mage/constants/DependencyType.java @@ -42,6 +42,7 @@ public enum DependencyType { AuraAddingRemoving, ArtifactAddingRemoving, + AddingAbility, BecomeForest, BecomeIsland, BecomeMountain, From fc4986a589383cef2d0a7b111035bfb998d37a4a Mon Sep 17 00:00:00 2001 From: Evan Kranzler <theelk801@gmail.com> Date: Fri, 20 Apr 2018 14:54:24 -0400 Subject: [PATCH 29/29] updated some oracle text --- Mage.Sets/src/mage/cards/f/FoodChain.java | 2 +- Mage.Sets/src/mage/cards/g/GildedDrake.java | 2 +- Mage.Sets/src/mage/cards/k/KessDissidentMage.java | 4 ++-- Mage.Sets/src/mage/cards/m/Metamorphosis.java | 2 +- Mage.Sets/src/mage/cards/r/RallyTheHorde.java | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/Mage.Sets/src/mage/cards/f/FoodChain.java b/Mage.Sets/src/mage/cards/f/FoodChain.java index c9d3550414..5a781767be 100644 --- a/Mage.Sets/src/mage/cards/f/FoodChain.java +++ b/Mage.Sets/src/mage/cards/f/FoodChain.java @@ -89,7 +89,7 @@ class FoodChainManaBuilder extends ConditionalManaBuilder { class FoodChainManaEffect extends ManaEffect { FoodChainManaEffect() { - this.staticText = "Add X mana of any one color to your mana pool, where X is the exiled creature's converted mana cost plus one. Spend this mana only to cast creature spells."; + this.staticText = "Add X mana of any one color, where X is 1 plus the exiled creature's converted mana cost. Spend this mana only to cast creature spells"; } FoodChainManaEffect(final FoodChainManaEffect effect) { diff --git a/Mage.Sets/src/mage/cards/g/GildedDrake.java b/Mage.Sets/src/mage/cards/g/GildedDrake.java index cace6876be..5dfc648ca7 100644 --- a/Mage.Sets/src/mage/cards/g/GildedDrake.java +++ b/Mage.Sets/src/mage/cards/g/GildedDrake.java @@ -92,7 +92,7 @@ class GildedDrakeEffect extends OneShotEffect { public GildedDrakeEffect() { super(Outcome.GainControl); - this.staticText = "exchange control of {this} and up to one target creature an opponent controls. If you don't make an exchange, sacrifice {this}. This ability can't be countered except by spells and abilities"; + this.staticText = "exchange control of {this} and up to one target creature an opponent controls. If you don't or can't make an exchange, sacrifice {this}. This ability still resolves if its target becomes illegal"; } public GildedDrakeEffect(final GildedDrakeEffect effect) { diff --git a/Mage.Sets/src/mage/cards/k/KessDissidentMage.java b/Mage.Sets/src/mage/cards/k/KessDissidentMage.java index d5cf48c63e..8140b57de4 100644 --- a/Mage.Sets/src/mage/cards/k/KessDissidentMage.java +++ b/Mage.Sets/src/mage/cards/k/KessDissidentMage.java @@ -107,7 +107,7 @@ class KessDissidentMageContinuousEffect extends ContinuousEffectImpl { KessDissidentMageContinuousEffect() { super(Duration.WhileOnBattlefield, Layer.PlayerEffects, SubLayer.NA, Outcome.Benefit); - staticText = "During each of your turns, you may cast an instant or sorcery card from your graveyard. If a card cast this way would be put into your graveyard this turn, exile it instead"; + staticText = "During each of your turns, you may cast an instant or sorcery card from your graveyard. If a card cast this way would be put into your graveyard, exile it instead"; } KessDissidentMageContinuousEffect(final KessDissidentMageContinuousEffect effect) { @@ -183,7 +183,7 @@ class KessDissidentMageReplacementEffect extends ReplacementEffectImpl { KessDissidentMageReplacementEffect(UUID cardId) { super(Duration.EndOfTurn, Outcome.Exile); this.cardId = cardId; - staticText = "If a card cast this way would be put into your graveyard this turn, exile it instead"; + staticText = "If a card cast this way would be put into your graveyard, exile it instead"; } KessDissidentMageReplacementEffect(final KessDissidentMageReplacementEffect effect) { diff --git a/Mage.Sets/src/mage/cards/m/Metamorphosis.java b/Mage.Sets/src/mage/cards/m/Metamorphosis.java index b919e84843..87f260bb97 100644 --- a/Mage.Sets/src/mage/cards/m/Metamorphosis.java +++ b/Mage.Sets/src/mage/cards/m/Metamorphosis.java @@ -73,7 +73,7 @@ class MetamorphosisEffect extends OneShotEffect { public MetamorphosisEffect() { super(Outcome.PutManaInPool); - staticText = "Add X mana of any one color to your mana pool, for creatures."; + staticText = "Add X mana of any one color, where X is 1 plus the sacrificed creature's converted mana cost. Spend this mana only to cast creature spells."; } public MetamorphosisEffect(final MetamorphosisEffect effect) { diff --git a/Mage.Sets/src/mage/cards/r/RallyTheHorde.java b/Mage.Sets/src/mage/cards/r/RallyTheHorde.java index 88fad34d70..8e7e069917 100644 --- a/Mage.Sets/src/mage/cards/r/RallyTheHorde.java +++ b/Mage.Sets/src/mage/cards/r/RallyTheHorde.java @@ -68,7 +68,7 @@ class RallyTheHordeEffect extends OneShotEffect { public RallyTheHordeEffect() { super(Outcome.PutCreatureInPlay); - this.staticText = "Exile the top card of your library. Exile the top card of your library. Exile the top card of your library. If the last card exiled isn't a land, repeat this process. Create a 1/1 red Warrior creature token for each nonland card exiled this way"; + this.staticText = "Exile the top card of your library. Exile the top card of your library. Exile the top card of your library. If the last card exiled isn't a land card, repeat this process. Create a 1/1 red Warrior creature token for each nonland card exiled this way."; } public RallyTheHordeEffect(final RallyTheHordeEffect effect) {