diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java b/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java
index 2850ae81954..2ae3081eefe 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/HeartbeatOfSpring.java
@@ -29,7 +29,7 @@ package mage.sets.championsofkamigawa;
import java.util.UUID;
import mage.abilities.common.TapForManaAllTriggeredManaAbility;
-import mage.abilities.effects.common.AddManaOfAnyColorTargetCanProduceEffect;
+import mage.abilities.effects.common.AddManaOfAnyTypeProducedEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
@@ -49,7 +49,7 @@ public class HeartbeatOfSpring extends CardImpl {
// Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
this.addAbility(new TapForManaAllTriggeredManaAbility(
- new AddManaOfAnyColorTargetCanProduceEffect(),
+ new AddManaOfAnyTypeProducedEffect(),
new FilterLandPermanent("a player taps a land"),
SetTargetPointer.PERMANENT));
}
diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ZhurTaaAncient.java b/Mage.Sets/src/mage/sets/dragonsmaze/ZhurTaaAncient.java
index e844d069cf6..e865494afa8 100644
--- a/Mage.Sets/src/mage/sets/dragonsmaze/ZhurTaaAncient.java
+++ b/Mage.Sets/src/mage/sets/dragonsmaze/ZhurTaaAncient.java
@@ -30,7 +30,7 @@ package mage.sets.dragonsmaze;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.TapForManaAllTriggeredManaAbility;
-import mage.abilities.effects.common.AddManaOfAnyColorTargetCanProduceEffect;
+import mage.abilities.effects.common.AddManaOfAnyTypeProducedEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
@@ -55,7 +55,7 @@ public class ZhurTaaAncient extends CardImpl {
// Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
this.addAbility(new TapForManaAllTriggeredManaAbility(
- new AddManaOfAnyColorTargetCanProduceEffect(),
+ new AddManaOfAnyTypeProducedEffect(),
new FilterLandPermanent("a player taps a land"),
SetTargetPointer.PERMANENT));
}
diff --git a/Mage.Sets/src/mage/sets/fourthedition/ManaFlare.java b/Mage.Sets/src/mage/sets/fourthedition/ManaFlare.java
index ae0574d6ac2..5d876c7b705 100644
--- a/Mage.Sets/src/mage/sets/fourthedition/ManaFlare.java
+++ b/Mage.Sets/src/mage/sets/fourthedition/ManaFlare.java
@@ -29,7 +29,7 @@ package mage.sets.fourthedition;
import java.util.UUID;
import mage.abilities.common.TapForManaAllTriggeredManaAbility;
-import mage.abilities.effects.common.AddManaOfAnyColorTargetCanProduceEffect;
+import mage.abilities.effects.common.AddManaOfAnyTypeProducedEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
@@ -48,7 +48,7 @@ public class ManaFlare extends CardImpl {
// Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
this.addAbility(new TapForManaAllTriggeredManaAbility(
- new AddManaOfAnyColorTargetCanProduceEffect(),
+ new AddManaOfAnyTypeProducedEffect(),
new FilterLandPermanent("a player taps a land"),
SetTargetPointer.PERMANENT));
}
diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/DictateOfKarametra.java b/Mage.Sets/src/mage/sets/journeyintonyx/DictateOfKarametra.java
index dbc335daec7..85bc5e7b0f5 100644
--- a/Mage.Sets/src/mage/sets/journeyintonyx/DictateOfKarametra.java
+++ b/Mage.Sets/src/mage/sets/journeyintonyx/DictateOfKarametra.java
@@ -29,7 +29,7 @@ package mage.sets.journeyintonyx;
import java.util.UUID;
import mage.abilities.common.TapForManaAllTriggeredManaAbility;
-import mage.abilities.effects.common.AddManaOfAnyColorTargetCanProduceEffect;
+import mage.abilities.effects.common.AddManaOfAnyTypeProducedEffect;
import mage.abilities.keyword.FlashAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
@@ -53,7 +53,7 @@ public class DictateOfKarametra extends CardImpl {
this.addAbility(FlashAbility.getInstance());
// Whenever a player taps a land for mana, that player adds one mana to his or her mana pool of any type that land produced.
this.addAbility(new TapForManaAllTriggeredManaAbility(
- new AddManaOfAnyColorTargetCanProduceEffect(),
+ new AddManaOfAnyTypeProducedEffect(),
new FilterLandPermanent("a player taps a land"),
SetTargetPointer.PERMANENT));
diff --git a/Mage.Sets/src/mage/sets/judgment/MirarisWake.java b/Mage.Sets/src/mage/sets/judgment/MirarisWake.java
index 27cf5bff089..f10c861aa4d 100644
--- a/Mage.Sets/src/mage/sets/judgment/MirarisWake.java
+++ b/Mage.Sets/src/mage/sets/judgment/MirarisWake.java
@@ -30,7 +30,7 @@ package mage.sets.judgment;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.TapForManaAllTriggeredManaAbility;
-import mage.abilities.effects.common.AddManaOfAnyColorTargetCanProduceEffect;
+import mage.abilities.effects.common.AddManaOfAnyTypeProducedEffect;
import mage.abilities.effects.common.continious.BoostControlledEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
@@ -57,7 +57,7 @@ public class MirarisWake extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1,1,Duration.WhileOnBattlefield)));
// Whenever you tap a land for mana, add one mana to your mana pool of any type that land produced.
this.addAbility(new TapForManaAllTriggeredManaAbility(
- new AddManaOfAnyColorTargetCanProduceEffect(),
+ new AddManaOfAnyTypeProducedEffect(),
new FilterControlledLandPermanent("you tap a land"),
SetTargetPointer.PERMANENT));
diff --git a/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java b/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java
index 35d9f5ff184..56d44ab81ea 100644
--- a/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java
+++ b/Mage.Sets/src/mage/sets/newphyrexia/VorinclexVoiceOfHunger.java
@@ -31,7 +31,7 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.TapForManaAllTriggeredManaAbility;
-import mage.abilities.effects.common.AddManaOfAnyColorTargetCanProduceEffect;
+import mage.abilities.effects.common.AddManaOfAnyTypeProducedEffect;
import mage.abilities.effects.common.DontUntapInControllersNextUntapStepTargetEffect;
import mage.abilities.keyword.TrampleAbility;
import mage.cards.CardImpl;
@@ -64,7 +64,7 @@ public class VorinclexVoiceOfHunger extends CardImpl {
this.addAbility(TrampleAbility.getInstance());
// Whenever you tap a land for mana, add one mana to your mana pool of any type that land produced.
this.addAbility(new TapForManaAllTriggeredManaAbility(
- new AddManaOfAnyColorTargetCanProduceEffect(),
+ new AddManaOfAnyTypeProducedEffect(),
new FilterControlledLandPermanent("you tap a land"),
SetTargetPointer.PERMANENT));
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/FateTransfer.java b/Mage.Sets/src/mage/sets/shadowmoor/FateTransfer.java
new file mode 100644
index 00000000000..e9216df5fba
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/shadowmoor/FateTransfer.java
@@ -0,0 +1,109 @@
+/*
+ * 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.shadowmoor;
+
+import java.util.UUID;
+import mage.abilities.Ability;
+import mage.abilities.effects.OneShotEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.Rarity;
+import mage.counters.Counter;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.game.Game;
+import mage.game.permanent.Permanent;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author jeffwadsworth
+ */
+public class FateTransfer extends CardImpl {
+
+ private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("target creature to move all counters from");
+ private static final FilterCreaturePermanent filter2 = new FilterCreaturePermanent("target creature to move all counters to");
+
+ public FateTransfer(UUID ownerId) {
+ super(ownerId, 161, "Fate Transfer", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{U/B}");
+ this.expansionSetCode = "SHM";
+
+ this.color.setBlue(true);
+ this.color.setBlack(true);
+
+ // Move all counters from target creature onto another target creature.
+ this.getSpellAbility().addEffect(new FateTransferEffect());
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
+ this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter2));
+
+ }
+
+ public FateTransfer(final FateTransfer card) {
+ super(card);
+ }
+
+ @Override
+ public FateTransfer copy() {
+ return new FateTransfer(this);
+ }
+}
+
+class FateTransferEffect extends OneShotEffect {
+
+ public FateTransferEffect() {
+ super(Outcome.AIDontUseIt);
+ staticText = "Move all counters from target creature onto another target creature";
+ }
+
+ public FateTransferEffect(final FateTransferEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public FateTransferEffect copy() {
+ return new FateTransferEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Permanent creatureToMoveCountersFrom = game.getPermanent(source.getTargets().get(0).getFirstTarget());
+ Permanent creatureToMoveCountersTo = game.getPermanent(source.getTargets().get(1).getFirstTarget());
+
+ if (creatureToMoveCountersFrom != null
+ && creatureToMoveCountersTo != null) {
+ Permanent copyCreature = creatureToMoveCountersFrom.copy();
+ for (Counter counter : copyCreature.getCounters().values()) {
+ Counter newCounterTest = new Counter(counter.getName(), counter.getCount());
+ creatureToMoveCountersFrom.removeCounters(newCounterTest, game);
+ creatureToMoveCountersTo.addCounters(newCounterTest, game);
+ }
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/GhastlordOfFugue.java b/Mage.Sets/src/mage/sets/shadowmoor/GhastlordOfFugue.java
new file mode 100644
index 00000000000..886b508b477
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/shadowmoor/GhastlordOfFugue.java
@@ -0,0 +1,128 @@
+/*
+ * 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.shadowmoor;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.MageObject;
+import mage.abilities.Ability;
+import mage.abilities.common.DealsCombatDamageToAPlayerTriggeredAbility;
+import mage.abilities.common.SimpleStaticAbility;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.combat.UnblockableSourceEffect;
+import mage.cards.Card;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Outcome;
+import mage.constants.Rarity;
+import mage.constants.Zone;
+import mage.filter.FilterCard;
+import mage.game.Game;
+import mage.players.Player;
+import mage.target.common.TargetCardInHand;
+
+/**
+ *
+ * @author jeffwadsworth
+ */
+public class GhastlordOfFugue extends CardImpl {
+
+ public GhastlordOfFugue(UUID ownerId) {
+ super(ownerId, 162, "Ghastlord of Fugue", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{U/B}{U/B}{U/B}{U/B}{U/B}");
+ this.expansionSetCode = "SHM";
+ this.subtype.add("Spirit");
+ this.subtype.add("Avatar");
+
+ this.color.setBlue(true);
+ this.color.setBlack(true);
+ this.power = new MageInt(4);
+ this.toughness = new MageInt(4);
+
+ // Ghastlord of Fugue is unblockable.
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new UnblockableSourceEffect(Duration.WhileOnBattlefield)));
+
+ // Whenever Ghastlord of Fugue deals combat damage to a player, that player reveals his or her hand. You choose a card from it. That player exiles that card.
+ this.addAbility(new DealsCombatDamageToAPlayerTriggeredAbility(new GhastlordOfFugueEffect(), false, true));
+
+ }
+
+ public GhastlordOfFugue(final GhastlordOfFugue card) {
+ super(card);
+ }
+
+ @Override
+ public GhastlordOfFugue copy() {
+ return new GhastlordOfFugue(this);
+ }
+}
+
+class GhastlordOfFugueEffect extends OneShotEffect {
+
+ public GhastlordOfFugueEffect() {
+ super(Outcome.Benefit);
+ staticText = "that player reveals his or her hand. You choose a card from it. That player exiles that card";
+ }
+
+ public GhastlordOfFugueEffect(final GhastlordOfFugueEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player targetPlayer = game.getPlayer(source.getFirstTarget());
+ Player controller = game.getPlayer(source.getControllerId());
+ MageObject sourceObject = game.getObject(source.getSourceId());
+ if (targetPlayer != null
+ && sourceObject != null
+ && controller != null) {
+
+ // reveal hand of target player
+ targetPlayer.revealCards(sourceObject.getLogName(), targetPlayer.getHand(), game);
+
+ // You choose a card from it
+ TargetCardInHand target = new TargetCardInHand(new FilterCard());
+ target.setNotTarget(true);
+ Card chosenCard = null;
+ if (controller.choose(Outcome.Benefit, targetPlayer.getHand(), target, game)) {
+ chosenCard = game.getCard(target.getFirstTarget());
+ }
+ if (chosenCard != null) {
+ controller.moveCardToExileWithInfo(chosenCard, null, "", source.getSourceId(), game, Zone.HAND);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public GhastlordOfFugueEffect copy() {
+ return new GhastlordOfFugueEffect(this);
+ }
+
+}
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/MerrowGrimeblotter.java b/Mage.Sets/src/mage/sets/shadowmoor/MerrowGrimeblotter.java
new file mode 100644
index 00000000000..86b53f37b54
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/shadowmoor/MerrowGrimeblotter.java
@@ -0,0 +1,77 @@
+/*
+ * 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.shadowmoor;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.SimpleActivatedAbility;
+import mage.abilities.costs.common.UntapSourceCost;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.common.continious.BoostTargetEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.Duration;
+import mage.constants.Rarity;
+import mage.constants.Zone;
+import mage.target.common.TargetCreaturePermanent;
+
+/**
+ *
+ * @author jeffwadsworth
+ */
+public class MerrowGrimeblotter extends CardImpl {
+
+ public MerrowGrimeblotter(UUID ownerId) {
+ super(ownerId, 171, "Merrow Grimeblotter", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{U/B}");
+ this.expansionSetCode = "SHM";
+ this.subtype.add("Merfolk");
+ this.subtype.add("Wizard");
+
+ this.color.setBlack(true);
+ this.color.setBlue(true);
+ this.power = new MageInt(2);
+ this.toughness = new MageInt(2);
+
+ // {1}{UB}, {untap}: Target creature gets -2/-0 until end of turn.
+ Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BoostTargetEffect(-2, 0, Duration.EndOfTurn), new ManaCostsImpl("{1}{U/B}"));
+ ability.addCost(new UntapSourceCost());
+ ability.addTarget(new TargetCreaturePermanent());
+ this.addAbility(ability);
+
+ }
+
+ public MerrowGrimeblotter(final MerrowGrimeblotter card) {
+ super(card);
+ }
+
+ @Override
+ public MerrowGrimeblotter copy() {
+ return new MerrowGrimeblotter(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/shadowmoor/RepelIntruders.java b/Mage.Sets/src/mage/sets/shadowmoor/RepelIntruders.java
new file mode 100644
index 00000000000..a3d86d4bcd3
--- /dev/null
+++ b/Mage.Sets/src/mage/sets/shadowmoor/RepelIntruders.java
@@ -0,0 +1,81 @@
+/*
+ * 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.shadowmoor;
+
+import java.util.UUID;
+import mage.abilities.condition.common.ManaWasSpentCondition;
+import mage.abilities.decorator.ConditionalOneShotEffect;
+import mage.abilities.effects.common.CounterTargetEffect;
+import mage.abilities.effects.common.CreateTokenEffect;
+import mage.cards.CardImpl;
+import mage.constants.CardType;
+import mage.constants.ColoredManaSymbol;
+import mage.constants.Rarity;
+import mage.filter.common.FilterCreatureSpell;
+import mage.game.permanent.token.KithkinToken;
+import mage.target.TargetSpell;
+import mage.watchers.common.ManaSpentToCastWatcher;
+
+/**
+ *
+ * @author jeffwadsworth
+ */
+public class RepelIntruders extends CardImpl {
+
+ public RepelIntruders(UUID ownerId) {
+ super(ownerId, 147, "Repel Intruders", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{W/U}");
+ this.expansionSetCode = "SHM";
+
+ this.color.setWhite(true);
+ this.color.setBlue(true);
+
+ // Put two 1/1 white Kithkin Soldier creature tokens onto the battlefield if {W} was spent to cast Repel Intruders. Counter up to one target creature spell if {U} was spent to cast Repel Intruders.
+ TargetSpell target = new TargetSpell(0,1, new FilterCreatureSpell());
+ target.setRequired(false);
+ this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
+ new CreateTokenEffect(new KithkinToken(), 2),
+ new ManaWasSpentCondition(ColoredManaSymbol.W), "Put two 1/1 white Kithkin Soldier creature tokens onto the battlefield if {W} was spent to cast {this}"));
+ this.getSpellAbility().addEffect(new ConditionalOneShotEffect(
+ new CounterTargetEffect(),
+ new ManaWasSpentCondition(ColoredManaSymbol.U), " Counter up to one target creature spell if {U} was spent to cast {this}"));
+ this.getSpellAbility().addTarget(target);
+ this.addInfo("Info1", "(Do both if {W}{U} was spent.)");
+ this.addWatcher(new ManaSpentToCastWatcher());
+
+ }
+
+ public RepelIntruders(final RepelIntruders card) {
+ super(card);
+ }
+
+ @Override
+ public RepelIntruders copy() {
+ return new RepelIntruders(this);
+ }
+}
+
diff --git a/Mage.Sets/src/mage/sets/shardsofalara/KeeperOfProgenitus.java b/Mage.Sets/src/mage/sets/shardsofalara/KeeperOfProgenitus.java
index daeed72c382..f59829a1d4f 100644
--- a/Mage.Sets/src/mage/sets/shardsofalara/KeeperOfProgenitus.java
+++ b/Mage.Sets/src/mage/sets/shardsofalara/KeeperOfProgenitus.java
@@ -30,7 +30,7 @@ package mage.sets.shardsofalara;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.TapForManaAllTriggeredManaAbility;
-import mage.abilities.effects.common.AddManaOfAnyColorTargetCanProduceEffect;
+import mage.abilities.effects.common.AddManaOfAnyTypeProducedEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
@@ -67,7 +67,7 @@ public class KeeperOfProgenitus extends CardImpl {
// Whenever a player taps a Mountain, Forest, or Plains for mana, that player adds one mana to his or her mana pool of any type that land produced.
this.addAbility(new TapForManaAllTriggeredManaAbility(
- new AddManaOfAnyColorTargetCanProduceEffect(),
+ new AddManaOfAnyTypeProducedEffect(),
filter, SetTargetPointer.PERMANENT));
}
diff --git a/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorTargetCanProduceEffect.java b/Mage/src/mage/abilities/effects/common/AddManaOfAnyTypeProducedEffect.java
similarity index 83%
rename from Mage/src/mage/abilities/effects/common/AddManaOfAnyColorTargetCanProduceEffect.java
rename to Mage/src/mage/abilities/effects/common/AddManaOfAnyTypeProducedEffect.java
index 32c2dd833a1..cd3f1b5b39f 100644
--- a/Mage/src/mage/abilities/effects/common/AddManaOfAnyColorTargetCanProduceEffect.java
+++ b/Mage/src/mage/abilities/effects/common/AddManaOfAnyTypeProducedEffect.java
@@ -29,12 +29,9 @@
package mage.abilities.effects.common;
import mage.Mana;
-import mage.abilities.Abilities;
import mage.abilities.Ability;
-import mage.abilities.mana.ManaAbility;
import mage.choices.Choice;
import mage.choices.ChoiceImpl;
-import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
@@ -44,14 +41,14 @@ import mage.players.Player;
* @author LevelX2
*/
-public class AddManaOfAnyColorTargetCanProduceEffect extends ManaEffect {
+public class AddManaOfAnyTypeProducedEffect extends ManaEffect {
- public AddManaOfAnyColorTargetCanProduceEffect() {
+ public AddManaOfAnyTypeProducedEffect() {
super();
staticText = "that player adds one mana to his or her mana pool of any type that land produced";
}
- public AddManaOfAnyColorTargetCanProduceEffect(final AddManaOfAnyColorTargetCanProduceEffect effect) {
+ public AddManaOfAnyTypeProducedEffect(final AddManaOfAnyTypeProducedEffect effect) {
super(effect);
}
@@ -63,13 +60,7 @@ public class AddManaOfAnyColorTargetCanProduceEffect extends ManaEffect {
if (targetController == null) {
return false;
}
- Abilities mana = permanent.getAbilities().getManaAbilities(Zone.BATTLEFIELD);
- Mana types = new Mana();
- for (ManaAbility ability : mana) {
- for(Mana netMana: ability.getNetMana(game)) {
- types.add(netMana);
- }
- }
+ Mana types = (Mana) this.getValue("mana");
Choice choice = new ChoiceImpl(true);
choice.setMessage("Pick the type of mana to produce");
if (types.getBlack() > 0) {
@@ -129,14 +120,12 @@ public class AddManaOfAnyColorTargetCanProduceEffect extends ManaEffect {
}
@Override
- public AddManaOfAnyColorTargetCanProduceEffect copy() {
- return new AddManaOfAnyColorTargetCanProduceEffect(this);
+ public AddManaOfAnyTypeProducedEffect copy() {
+ return new AddManaOfAnyTypeProducedEffect(this);
}
@Override
public Mana getMana(Game game, Ability source) {
return null;
}
-
-
}