diff --git a/Mage.Sets/src/mage/sets/eighthedition/CityOfBrass.java b/Mage.Sets/src/mage/sets/eighthedition/CityOfBrass.java new file mode 100644 index 00000000000..ac77a081e9e --- /dev/null +++ b/Mage.Sets/src/mage/sets/eighthedition/CityOfBrass.java @@ -0,0 +1,52 @@ +/* + * 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.eighthedition; + +import java.util.UUID; + +/** + * + * @author jeffwadsworth + */ +public class CityOfBrass extends mage.sets.seventhedition.CityOfBrass { + + public CityOfBrass(UUID ownerId) { + super(ownerId); + this.cardNumber = 322; + this.expansionSetCode = "8ED"; + } + + public CityOfBrass(final CityOfBrass card) { + super(card); + } + + @Override + public CityOfBrass copy() { + return new CityOfBrass(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/CityOfBrass.java b/Mage.Sets/src/mage/sets/fifthedition/CityOfBrass.java new file mode 100644 index 00000000000..f9f6d055d9f --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/CityOfBrass.java @@ -0,0 +1,52 @@ +/* + * 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.fifthedition; + +import java.util.UUID; + +/** + * + * @author jeffwadsworth + */ +public class CityOfBrass extends mage.sets.seventhedition.CityOfBrass { + + public CityOfBrass(UUID ownerId) { + super(ownerId); + this.cardNumber = 413; + this.expansionSetCode = "5ED"; + } + + public CityOfBrass(final CityOfBrass card) { + super(card); + } + + @Override + public CityOfBrass copy() { + return new CityOfBrass(this); + } +} diff --git a/Mage.Sets/src/mage/sets/seventhedition/CityOfBrass.java b/Mage.Sets/src/mage/sets/seventhedition/CityOfBrass.java new file mode 100644 index 00000000000..096ef183332 --- /dev/null +++ b/Mage.Sets/src/mage/sets/seventhedition/CityOfBrass.java @@ -0,0 +1,63 @@ +/* + * 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.seventhedition; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.common.BecomesTappedTriggeredAbility; +import mage.abilities.effects.common.DamageControllerEffect; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.CardImpl; + +/** + * + * @author jeffwadsworth + */ +public class CityOfBrass extends CardImpl { + + public CityOfBrass(UUID ownerId) { + super(ownerId, 327, "City of Brass", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "7ED"; + + // Whenever City of Brass becomes tapped, it deals 1 damage to you. + this.addAbility(new BecomesTappedTriggeredAbility(new DamageControllerEffect(1))); + + // {tap}: Add one mana of any color to your mana pool. + this.addAbility(new AnyColorManaAbility()); + } + + public CityOfBrass(final CityOfBrass card) { + super(card); + } + + @Override + public CityOfBrass copy() { + return new CityOfBrass(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shadowmoor/ReflectingPool.java b/Mage.Sets/src/mage/sets/shadowmoor/ReflectingPool.java new file mode 100644 index 00000000000..4f3cf686112 --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowmoor/ReflectingPool.java @@ -0,0 +1,52 @@ +/* + * 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; + +/** + * + * @author jeffwadsworth + */ +public class ReflectingPool extends mage.sets.tempest.ReflectingPool { + + public ReflectingPool(UUID ownerId) { + super(ownerId); + this.cardNumber = 278; + this.expansionSetCode = "SHM"; + } + + public ReflectingPool(final ReflectingPool card) { + super(card); + } + + @Override + public ReflectingPool copy() { + return new ReflectingPool(this); + } +} diff --git a/Mage.Sets/src/mage/sets/sixthedition/CityOfBrass.java b/Mage.Sets/src/mage/sets/sixthedition/CityOfBrass.java new file mode 100644 index 00000000000..87d82dfde8a --- /dev/null +++ b/Mage.Sets/src/mage/sets/sixthedition/CityOfBrass.java @@ -0,0 +1,52 @@ +/* + * 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.sixthedition; + +import java.util.UUID; + +/** + * + * @author jeffwadsworth + */ +public class CityOfBrass extends mage.sets.seventhedition.CityOfBrass { + + public CityOfBrass(UUID ownerId) { + super(ownerId); + this.cardNumber = 321; + this.expansionSetCode = "6ED"; + } + + public CityOfBrass(final CityOfBrass card) { + super(card); + } + + @Override + public CityOfBrass copy() { + return new CityOfBrass(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/VolrathsStronghold.java b/Mage.Sets/src/mage/sets/stronghold/VolrathsStronghold.java new file mode 100644 index 00000000000..67acf4f9c78 --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/VolrathsStronghold.java @@ -0,0 +1,83 @@ +/* + * 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.stronghold; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.Constants.TargetController; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.PutOnLibraryTargetEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.target.common.TargetCardInGraveyard; + +/** + * + * @author jeffwadsworth + */ +public class VolrathsStronghold extends CardImpl { + + private static final FilterCard filter = new FilterCard("creature card from your graveyard"); + + static { + filter.add(new CardTypePredicate(CardType.CREATURE)); + filter.add(new ControllerPredicate(TargetController.YOU)); + } + + public VolrathsStronghold(UUID ownerId) { + super(ownerId, 137, "Volrath's Stronghold", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "STH"; + this.supertype.add("Legendary"); + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + + // {1}{B}, {tap}: Put target creature card from your graveyard on top of your library. + Ability ability = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new PutOnLibraryTargetEffect(true), new ManaCostsImpl("{1}{B}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCardInGraveyard(filter)); + this.addAbility(ability); + } + + public VolrathsStronghold(final VolrathsStronghold card) { + super(card); + } + + @Override + public VolrathsStronghold copy() { + return new VolrathsStronghold(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tempest/ReflectingPool.java b/Mage.Sets/src/mage/sets/tempest/ReflectingPool.java new file mode 100644 index 00000000000..11efda33694 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tempest/ReflectingPool.java @@ -0,0 +1,158 @@ +/* + * 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.tempest; + +import java.util.List; +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.Constants.TargetController; +import mage.Mana; +import mage.abilities.Abilities; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.ManaEffect; +import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.mana.ManaAbility; +import mage.cards.CardImpl; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author jeffwadsworth + */ +public class ReflectingPool extends CardImpl { + + public ReflectingPool(UUID ownerId) { + super(ownerId, 328, "Reflecting Pool", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "TMP"; + + // {tap}: Add to your mana pool one mana of any type that a land you control could produce. + this.addAbility(new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new ReflectingPoolEffect(), new TapSourceCost())); + } + + public ReflectingPool(final ReflectingPool card) { + super(card); + } + + @Override + public ReflectingPool copy() { + return new ReflectingPool(this); + } +} + +class ReflectingPoolEffect extends ManaEffect { + + public ReflectingPoolEffect() { + super(); + staticText = "Add to your mana pool one mana of any type that a land you control could produce"; + } + + public ReflectingPoolEffect(final ReflectingPoolEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + FilterPermanent filter = new FilterPermanent(); + filter.add(new CardTypePredicate(CardType.LAND)); + filter.add(new ControllerPredicate(TargetController.YOU)); + List lands = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game); + for (Permanent land : lands) { + Abilities mana = land.getAbilities().getManaAbilities(Constants.Zone.BATTLEFIELD); + Mana types = new Mana(); + for (ManaAbility ability : mana) { + types.add(ability.getNetMana(game)); + } + Choice choice = new ChoiceImpl(true); + choice.setMessage("Pick a mana color"); + if (types.getBlack() > 0) { + choice.getChoices().add("Black"); + } + if (types.getRed() > 0) { + choice.getChoices().add("Red"); + } + if (types.getBlue() > 0) { + choice.getChoices().add("Blue"); + } + if (types.getGreen() > 0) { + choice.getChoices().add("Green"); + } + if (types.getWhite() > 0) { + choice.getChoices().add("White"); + } + if (types.getColorless() > 0) { + choice.getChoices().add("Colorless"); + } + if (types.getAny() > 0) { + choice.getChoices().add("Black"); + choice.getChoices().add("Red"); + choice.getChoices().add("Blue"); + choice.getChoices().add("Green"); + choice.getChoices().add("White"); + choice.getChoices().add("Colorless"); + } + if (choice.getChoices().size() > 0) { + Player player = game.getPlayer(source.getControllerId()); + if (choice.getChoices().size() == 1) { + choice.setChoice(choice.getChoices().iterator().next()); + } else { + player.choose(outcome, choice, game); + } + if (choice.getChoice().equals("Black")) { + player.getManaPool().addMana(Mana.BlackMana, game, source); + } else if (choice.getChoice().equals("Blue")) { + player.getManaPool().addMana(Mana.BlueMana, game, source); + } else if (choice.getChoice().equals("Red")) { + player.getManaPool().addMana(Mana.RedMana, game, source); + } else if (choice.getChoice().equals("Green")) { + player.getManaPool().addMana(Mana.GreenMana, game, source); + } else if (choice.getChoice().equals("White")) { + player.getManaPool().addMana(Mana.WhiteMana, game, source); + } else if (choice.getChoice().equals("Colorless")) { + player.getManaPool().addMana(Mana.ColorlessMana, game, source); + } + } + } + return true; + } + + @Override + public ReflectingPoolEffect copy() { + return new ReflectingPoolEffect(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/timeshifted/GemstoneMine.java b/Mage.Sets/src/mage/sets/timeshifted/GemstoneMine.java new file mode 100644 index 00000000000..6c88a4bab5d --- /dev/null +++ b/Mage.Sets/src/mage/sets/timeshifted/GemstoneMine.java @@ -0,0 +1,127 @@ +/* + * 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.timeshifted; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.StateTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.PermanentHasCounterCondition; +import mage.abilities.condition.common.PermanentHasCounterCondition.CountType; +import mage.abilities.costs.common.RemoveCountersSourceCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.counters.CounterType; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +/** + * + * @author jeffwadsworth + */ +public class GemstoneMine extends CardImpl { + + final static private FilterPermanent filter = new FilterPermanent(); + + static { + filter.add(Predicates.not(new AnotherPredicate())); + } + + public GemstoneMine(UUID ownerId) { + super(ownerId, 119, "Gemstone Mine", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "TSB"; + + // Gemstone Mine enters the battlefield with three mining counters on it. + this.addAbility(new EntersBattlefieldTriggeredAbility(new AddCountersSourceEffect(CounterType.MINING.createInstance(3)))); + + // {tap}, Remove a mining counter from Gemstone Mine: Add one mana of any color to your mana pool. If there are no mining counters on Gemstone Mine, sacrifice it. + Ability ability = new AnyColorManaAbility(); + ability.addCost(new RemoveCountersSourceCost(CounterType.MINING.createInstance(1))); + this.addAbility(ability); + this.addAbility(new GemstoneMineTriggeredAbility()); + } + + public GemstoneMine(final GemstoneMine card) { + super(card); + } + + @Override + public GemstoneMine copy() { + return new GemstoneMine(this); + } +} + +class GemstoneMineTriggeredAbility extends StateTriggeredAbility { + + private static final String staticText = "If there are no mining counters on {this}, sacrifice it."; + + public GemstoneMineTriggeredAbility() { + super(Constants.Zone.BATTLEFIELD, new SacrificeSourceEffect()); + } + + public GemstoneMineTriggeredAbility(GemstoneMineTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.COUNTER_REMOVED) { + Permanent gemstoneMine = game.getPermanent(this.getSourceId()); + if (gemstoneMine != null) { + if (!gemstoneMine.getCounters().containsKey(CounterType.MINING)) { + return true; + } + } + } + return false; + } + + @Override + public GemstoneMineTriggeredAbility copy() { + return new GemstoneMineTriggeredAbility(this); + } + + @Override + public String getRule() { + return staticText; + } +} diff --git a/Mage.Sets/src/mage/sets/visions/UndiscoveredParadise.java b/Mage.Sets/src/mage/sets/visions/UndiscoveredParadise.java new file mode 100644 index 00000000000..bc0e489f1c4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/visions/UndiscoveredParadise.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.visions; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.DelayedTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ReturnToHandSourceEffect; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.permanent.Permanent; + +/** + * + * @author jeffwadsworth + */ +public class UndiscoveredParadise extends CardImpl { + + public UndiscoveredParadise(UUID ownerId) { + super(ownerId, 167, "Undiscovered Paradise", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "VIS"; + + // {tap}: Add one mana of any color to your mana pool. During your next untap step, as you untap your permanents, return Undiscovered Paradise to its owner's hand. + Ability ability = new AnyColorManaAbility(); + ability.addEffect(new UndiscoveredParadiseEffect()); + this.addAbility(ability); + } + + public UndiscoveredParadise(final UndiscoveredParadise card) { + super(card); + } + + @Override + public UndiscoveredParadise copy() { + return new UndiscoveredParadise(this); + } +} + +class UndiscoveredParadiseEffect extends OneShotEffect { + + public UndiscoveredParadiseEffect() { + super(Constants.Outcome.Neutral); + staticText = "During your next untap step, as you untap your permanents, return {this} to its owner's hand"; + } + + public UndiscoveredParadiseEffect(final UndiscoveredParadiseEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getSourceId()); + if (permanent != null) { + AtBeginningOfUntapDelayedTriggeredAbility delayedAbility = new AtBeginningOfUntapDelayedTriggeredAbility(new ReturnToHandSourceEffect(true)); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + game.addDelayedTriggeredAbility(delayedAbility); + return true; + } + return false; + } + + @Override + public UndiscoveredParadiseEffect copy() { + return new UndiscoveredParadiseEffect(this); + } +} + +class AtBeginningOfUntapDelayedTriggeredAbility extends DelayedTriggeredAbility { + + public AtBeginningOfUntapDelayedTriggeredAbility(Effect effect) { + super(effect); + } + + public AtBeginningOfUntapDelayedTriggeredAbility(AtBeginningOfUntapDelayedTriggeredAbility ability) { + super(ability); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.UNTAP_STEP_PRE && game.getActivePlayerId().equals(controllerId)) { + return true; + } + return false; + } + + @Override + public AtBeginningOfUntapDelayedTriggeredAbility copy() { + return new AtBeginningOfUntapDelayedTriggeredAbility(this); + } + + @Override + public String getRule() { + return "At the beginning of your untap step, return {this} to its owner's hand"; + } +} diff --git a/Mage.Sets/src/mage/sets/weatherlight/GemstoneMine.java b/Mage.Sets/src/mage/sets/weatherlight/GemstoneMine.java new file mode 100644 index 00000000000..46a50d1b24a --- /dev/null +++ b/Mage.Sets/src/mage/sets/weatherlight/GemstoneMine.java @@ -0,0 +1,54 @@ +/* + * 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.weatherlight; + +import java.util.UUID; +import mage.Constants.Rarity; + +/** + * + * @author jeffwadsworth + */ +public class GemstoneMine extends mage.sets.timeshifted.GemstoneMine { + + public GemstoneMine(UUID ownerId) { + super(ownerId); + this.cardNumber = 164; + this.expansionSetCode = "WTH"; + this.rarity = Rarity.UNCOMMON; + } + + public GemstoneMine(final GemstoneMine card) { + super(card); + } + + @Override + public GemstoneMine copy() { + return new GemstoneMine(this); + } +} diff --git a/Mage/src/mage/abilities/effects/common/ReturnToHandSourceEffect.java b/Mage/src/mage/abilities/effects/common/ReturnToHandSourceEffect.java index 5e10390d4a5..269be029b9b 100644 --- a/Mage/src/mage/abilities/effects/common/ReturnToHandSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/ReturnToHandSourceEffect.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.effects.common; import mage.Constants.Outcome; @@ -41,13 +40,21 @@ import mage.game.permanent.Permanent; */ public class ReturnToHandSourceEffect extends OneShotEffect { + boolean fromBattlefieldOnly = false; + public ReturnToHandSourceEffect() { super(Outcome.ReturnToHand); staticText = "Return {this} to it's owner's hand"; } + public ReturnToHandSourceEffect(boolean fromBattlefieldOnly) { + super(Outcome.ReturnToHand); + this.fromBattlefieldOnly = fromBattlefieldOnly; + } + public ReturnToHandSourceEffect(final ReturnToHandSourceEffect effect) { super(effect); + this.fromBattlefieldOnly = effect.fromBattlefieldOnly; } @Override @@ -67,10 +74,12 @@ public class ReturnToHandSourceEffect extends OneShotEffect { + + public MiningCounter() { + super("mining"); + this.count = 1; + } + + public MiningCounter(int amount) { + super("mining"); + this.count = amount; + } +} \ No newline at end of file