diff --git a/Mage.Sets/src/mage/sets/commander/Oblation.java b/Mage.Sets/src/mage/sets/commander/Oblation.java new file mode 100644 index 00000000000..b5d9aa4d222 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/Oblation.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.commander; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class Oblation extends mage.sets.onslaught.Oblation { + + public Oblation(UUID ownerId) { + super(ownerId); + this.cardNumber = 22; + this.expansionSetCode = "CMD"; + } + + public Oblation(final Oblation card) { + super(card); + } + + @Override + public Oblation copy() { + return new Oblation(this); + } +} diff --git a/Mage.Sets/src/mage/sets/commander/ReturnToDust.java b/Mage.Sets/src/mage/sets/commander/ReturnToDust.java new file mode 100644 index 00000000000..e59845e4289 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/ReturnToDust.java @@ -0,0 +1,88 @@ +/* + * 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.commander; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.filter.FilterPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.Game; +import mage.target.TargetPermanent; + +/** + * + * @author emerald000 + */ +public class ReturnToDust extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("artifact or enchantment"); + static { + filter.add(Predicates.or(new CardTypePredicate(CardType.ARTIFACT), + new CardTypePredicate(CardType.ENCHANTMENT))); + } + + public ReturnToDust(UUID ownerId) { + super(ownerId, 28, "Return to Dust", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{W}{W}"); + this.expansionSetCode = "CMD"; + + this.color.setWhite(true); + + // Exile target artifact or enchantment. If you cast this spell during your main phase, you may exile up to one other target artifact or enchantment. + Effect effect = new ExileTargetEffect(); + effect.setText("Exile target artifact or enchantment. If you cast this spell during your main phase, you may exile up to one other target artifact or enchantment"); + this.getSpellAbility().addEffect(effect); + } + + public ReturnToDust(final ReturnToDust card) { + super(card); + } + + @Override + public void adjustTargets(Ability ability, Game game) { + if (ability instanceof SpellAbility) { + if (game.getActivePlayerId().equals(ability.getControllerId()) && game.isMainPhase()) { + ability.addTarget(new TargetPermanent(1, 2, filter, false)); + } + else { + ability.addTarget(new TargetPermanent(filter)); + } + } + } + + @Override + public ReturnToDust copy() { + return new ReturnToDust(this); + } +} diff --git a/Mage.Sets/src/mage/sets/guildpact/TeysaOrzhovScion.java b/Mage.Sets/src/mage/sets/guildpact/TeysaOrzhovScion.java new file mode 100644 index 00000000000..4978c411623 --- /dev/null +++ b/Mage.Sets/src/mage/sets/guildpact/TeysaOrzhovScion.java @@ -0,0 +1,97 @@ +/* + * 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.guildpact; + +import java.util.UUID; +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ExileTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.filter.predicate.permanent.AnotherPredicate; +import mage.filter.predicate.permanent.ControllerPredicate; +import mage.game.permanent.token.SpiritWhiteToken; +import mage.target.common.TargetControlledCreaturePermanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author emerald000 + */ +public class TeysaOrzhovScion extends CardImpl { + + private final static FilterControlledCreaturePermanent filterWhite = new FilterControlledCreaturePermanent("three white creatures"); + private final static FilterCreaturePermanent filterBlack = new FilterCreaturePermanent("another black creature you control"); + static { + filterWhite.add(new ColorPredicate(ObjectColor.WHITE)); + filterBlack.add(new ColorPredicate(ObjectColor.BLACK)); + filterBlack.add(new AnotherPredicate()); + filterBlack.add(new ControllerPredicate(TargetController.YOU)); + } + + public TeysaOrzhovScion(UUID ownerId) { + super(ownerId, 134, "Teysa, Orzhov Scion", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{1}{W}{B}"); + this.expansionSetCode = "GPT"; + this.supertype.add("Legendary"); + this.subtype.add("Human"); + this.subtype.add("Advisor"); + + this.color.setWhite(true); + this.color.setBlack(true); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + // Sacrifice three white creatures: Exile target creature. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new ExileTargetEffect(), new SacrificeTargetCost(new TargetControlledCreaturePermanent(3, 3, filterWhite, true))); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + + // Whenever another black creature you control dies, put a 1/1 white Spirit creature token with flying onto the battlefield. + this.addAbility(new DiesCreatureTriggeredAbility(new CreateTokenEffect(new SpiritWhiteToken("GPT")), false, filterBlack)); + } + + public TeysaOrzhovScion(final TeysaOrzhovScion card) { + super(card); + } + + @Override + public TeysaOrzhovScion copy() { + return new TeysaOrzhovScion(this); + } +} diff --git a/Mage.Sets/src/mage/sets/legends/InTheEyeOfChaos.java b/Mage.Sets/src/mage/sets/legends/InTheEyeOfChaos.java new file mode 100644 index 00000000000..3f5bbbd5622 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/InTheEyeOfChaos.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.legends; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SpellCastAllTriggeredAbility; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.effects.OneShotEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterSpell; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.game.Game; +import mage.game.stack.StackObject; +import mage.players.Player; + +/** + * + * @author emerald000 + */ +public class InTheEyeOfChaos extends CardImpl { + + private static final FilterSpell filter = new FilterSpell("an instant spell"); + static { + filter.add(new CardTypePredicate(CardType.INSTANT)); + } + + public InTheEyeOfChaos(UUID ownerId) { + super(ownerId, 61, "In the Eye of Chaos", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{U}"); + this.expansionSetCode = "LEG"; + this.supertype.add("World"); + + this.color.setBlue(true); + + // Whenever a player casts an instant spell, counter it unless that player pays {X}, where X is its converted mana cost. + this.addAbility(new SpellCastAllTriggeredAbility(Zone.BATTLEFIELD, new InTheEyeOfChaosEffect(), filter, false, true)); + } + + public InTheEyeOfChaos(final InTheEyeOfChaos card) { + super(card); + } + + @Override + public InTheEyeOfChaos copy() { + return new InTheEyeOfChaos(this); + } +} + +class InTheEyeOfChaosEffect extends OneShotEffect { + + InTheEyeOfChaosEffect() { + super(Outcome.Detriment); + this.staticText = "counter it unless that player pays {X}, where X is its converted mana cost"; + } + + InTheEyeOfChaosEffect(final InTheEyeOfChaosEffect effect) { + super(effect); + } + + @Override + public InTheEyeOfChaosEffect copy() { + return new InTheEyeOfChaosEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + StackObject spell = game.getStack().getStackObject(targetPointer.getFirst(game, source)); + if (spell != null) { + Player player = game.getPlayer(spell.getControllerId()); + if (player != null) { + GenericManaCost cost = new GenericManaCost(spell.getManaCost().convertedManaCost()); + if (!cost.pay(source, game, source.getSourceId(), player.getId(), false)) { + game.getStack().counter(spell.getId(), source.getSourceId(), game); + } + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/legends/TheAbyss.java b/Mage.Sets/src/mage/sets/legends/TheAbyss.java new file mode 100644 index 00000000000..ad7e78b65ad --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/TheAbyss.java @@ -0,0 +1,118 @@ +/* + * 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.legends; + +import java.util.UUID; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardTypePredicate; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.players.Player; +import mage.target.Target; +import mage.target.common.TargetCreaturePermanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author emerald000 + */ +public class TheAbyss extends CardImpl { + + public TheAbyss(UUID ownerId) { + super(ownerId, 70, "The Abyss", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}"); + this.expansionSetCode = "LEG"; + this.supertype.add("World"); + + this.color.setBlack(true); + + // At the beginning of each player's upkeep, destroy target nonartifact creature that player controls of his or her choice. It can't be regenerated. + this.addAbility(new TheAbyssTriggeredAbility()); + } + + public TheAbyss(final TheAbyss card) { + super(card); + } + + @Override + public TheAbyss copy() { + return new TheAbyss(this); + } +} + +class TheAbyssTriggeredAbility extends TriggeredAbilityImpl { + + TheAbyssTriggeredAbility() { + super(Zone.BATTLEFIELD, new DestroyTargetEffect(true), false); + } + + TheAbyssTriggeredAbility(final TheAbyssTriggeredAbility ability) { + super(ability); + } + + @Override + public TheAbyssTriggeredAbility copy() { + return new TheAbyssTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.UPKEEP_STEP_PRE) { + Player player = game.getPlayer(event.getPlayerId()); + if (player != null) { + FilterCreaturePermanent filter = new FilterCreaturePermanent("nonartifact creature you control"); + filter.add(Predicates.not(new CardTypePredicate(CardType.ARTIFACT))); + filter.add(new ControllerIdPredicate(player.getId())); + Target target = new TargetCreaturePermanent(filter); + if (target.canChoose(this.getSourceId(), this.getControllerId(), game) && player.chooseTarget(Outcome.DestroyPermanent, target, this, game)) { + for (Effect effect: this.getEffects()) { + if (effect instanceof DestroyTargetEffect) { + effect.setTargetPointer(new FixedTarget(target.getFirstTarget())); + } + } + return true; + } + } + } + return false; + } + + @Override + public String getRule() { + return "At the beginning of each player's upkeep, destroy target nonartifact creature that player controls of his or her choice. It can't be regenerated."; + } +} diff --git a/Mage.Sets/src/mage/sets/lorwyn/Dread.java b/Mage.Sets/src/mage/sets/lorwyn/Dread.java new file mode 100644 index 00000000000..b46a8564ec8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/lorwyn/Dread.java @@ -0,0 +1,119 @@ +/* + * 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.lorwyn; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.PutIntoGraveFromAnywhereTriggeredAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect; +import mage.abilities.keyword.FearAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.target.targetpointer.FixedTarget; + +/** + * + * @author emerald000 + */ +public class Dread extends CardImpl { + + public Dread(UUID ownerId) { + super(ownerId, 107, "Dread", Rarity.RARE, new CardType[]{CardType.CREATURE}, "{3}{B}{B}{B}"); + this.expansionSetCode = "LRW"; + this.subtype.add("Elemental"); + this.subtype.add("Incarnation"); + + this.color.setBlack(true); + this.power = new MageInt(6); + this.toughness = new MageInt(6); + + // Fear + this.addAbility(FearAbility.getInstance()); + + // Whenever a creature deals damage to you, destroy it. + this.addAbility(new DreadTriggeredAbility()); + + // When Dread is put into a graveyard from anywhere, shuffle it into its owner's library. + this.addAbility(new PutIntoGraveFromAnywhereTriggeredAbility(new ShuffleIntoLibrarySourceEffect())); + } + + public Dread(final Dread card) { + super(card); + } + + @Override + public Dread copy() { + return new Dread(this); + } +} + +class DreadTriggeredAbility extends TriggeredAbilityImpl { + + DreadTriggeredAbility() { + super(Zone.BATTLEFIELD, new DestroyTargetEffect(), false); + } + + DreadTriggeredAbility(final DreadTriggeredAbility ability) { + super(ability); + } + + @Override + public DreadTriggeredAbility copy() { + return new DreadTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.DAMAGED_PLAYER && event.getPlayerId().equals(this.getControllerId())) { + Permanent permanent = game.getPermanent(event.getSourceId()); + if (permanent != null && permanent.getCardType().contains(CardType.CREATURE)) { + for (Effect effect : this.getEffects()) { + if (effect instanceof DestroyTargetEffect) { + effect.setTargetPointer(new FixedTarget(event.getSourceId())); + } + } + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a creature deals damage to you, destroy it."; + } +} diff --git a/Mage.Sets/src/mage/sets/odyssey/KarmicJustice.java b/Mage.Sets/src/mage/sets/odyssey/KarmicJustice.java new file mode 100644 index 00000000000..12b474837ad --- /dev/null +++ b/Mage.Sets/src/mage/sets/odyssey/KarmicJustice.java @@ -0,0 +1,108 @@ +/* + * 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.odyssey; + +import java.util.UUID; +import mage.MageObject; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.DestroyTargetEffect; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.predicate.permanent.ControllerIdPredicate; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.target.Target; +import mage.target.TargetPermanent; + +/** + * + * @author emerald000 + */ +public class KarmicJustice extends CardImpl { + + public KarmicJustice(UUID ownerId) { + super(ownerId, 26, "Karmic Justice", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{2}{W}"); + this.expansionSetCode = "ODY"; + + this.color.setWhite(true); + + // Whenever a spell or ability an opponent controls destroys a noncreature permanent you control, you may destroy target permanent that opponent controls. + this.addAbility(new KarmicJusticeTriggeredAbility()); + } + + public KarmicJustice(final KarmicJustice card) { + super(card); + } + + @Override + public KarmicJustice copy() { + return new KarmicJustice(this); + } +} + +class KarmicJusticeTriggeredAbility extends TriggeredAbilityImpl { + + KarmicJusticeTriggeredAbility() { + super(Zone.BATTLEFIELD, new DestroyTargetEffect(), true); + } + + KarmicJusticeTriggeredAbility(final KarmicJusticeTriggeredAbility ability) { + super(ability); + } + + @Override + public KarmicJusticeTriggeredAbility copy() { + return new KarmicJusticeTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.DESTROYED_PERMANENT && event.getPlayerId().equals(controllerId) + && game.getOpponents(this.getControllerId()).contains(game.getControllerId(event.getSourceId()))) { + MageObject mageObject = game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); + if (!mageObject.getCardType().contains(CardType.CREATURE)) { + this.getTargets().clear(); + FilterPermanent filter = new FilterPermanent("target permanent that opponent controls"); + filter.add(new ControllerIdPredicate(game.getControllerId(event.getSourceId()))); + Target target = new TargetPermanent(filter); + this.getTargets().add(target); + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a spell or ability an opponent controls destroys a noncreature permanent you control, you may destroy target permanent that opponent controls"; + } +} diff --git a/Mage.Sets/src/mage/sets/onslaught/Oblation.java b/Mage.Sets/src/mage/sets/onslaught/Oblation.java new file mode 100644 index 00000000000..19a85f7cfe9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/Oblation.java @@ -0,0 +1,100 @@ +/* + * 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.onslaught; + +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.constants.Zone; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.common.TargetNonlandPermanent; + +/** + * + * @author emerald000 + */ +public class Oblation extends CardImpl { + + public Oblation(UUID ownerId) { + super(ownerId, 46, "Oblation", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{2}{W}"); + this.expansionSetCode = "ONS"; + + this.color.setWhite(true); + + // The owner of target nonland permanent shuffles it into his or her library, then draws two cards. + this.getSpellAbility().addEffect(new OblationEffect()); + this.getSpellAbility().addTarget(new TargetNonlandPermanent()); + } + + public Oblation(final Oblation card) { + super(card); + } + + @Override + public Oblation copy() { + return new Oblation(this); + } +} + +class OblationEffect extends OneShotEffect { + + OblationEffect() { + super(Outcome.Removal); + this.staticText = "The owner of target nonland permanent shuffles it into his or her library, then draws two cards"; + } + + OblationEffect(final OblationEffect effect) { + super(effect); + } + + @Override + public OblationEffect copy() { + return new OblationEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); + if (permanent != null) { + Player player = game.getPlayer(permanent.getOwnerId()); + if (player != null) { + player.moveCardToLibraryWithInfo(permanent, source.getSourceId(), game, Zone.BATTLEFIELD, true, true); + player.shuffleLibrary(game); + player.drawCards(2, game); + return true; + } + } + return false; + } +} diff --git a/Mage.Sets/src/mage/sets/onslaught/WordsOfWar.java b/Mage.Sets/src/mage/sets/onslaught/WordsOfWar.java index 928ccbbdeca..e87423a472d 100644 --- a/Mage.Sets/src/mage/sets/onslaught/WordsOfWar.java +++ b/Mage.Sets/src/mage/sets/onslaught/WordsOfWar.java @@ -77,7 +77,7 @@ class WordsOfWarEffect extends ReplacementEffectImpl { WordsOfWarEffect() { super(Duration.EndOfTurn, Outcome.Damage); - staticText = "The next time you would draw a card this turn, Words of War deals 2 damage to target creature or player instead."; + staticText = "The next time you would draw a card this turn, {this} deals 2 damage to target creature or player instead."; } WordsOfWarEffect(final WordsOfWarEffect effect) { @@ -98,7 +98,7 @@ class WordsOfWarEffect extends ReplacementEffectImpl { public boolean replaceEvent(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { - Player player = game.getPlayer(source.getFirstTarget()); + Player player = game.getPlayer(targetPointer.getFirst(game, source)); if (player != null) { player.damage(2, source.getSourceId(), game, false, true); used = true; diff --git a/Mage.Sets/src/mage/sets/returntoravnica/WorldspineWurm.java b/Mage.Sets/src/mage/sets/returntoravnica/WorldspineWurm.java index faae1f0e630..96f0492f90a 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/WorldspineWurm.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/WorldspineWurm.java @@ -28,22 +28,16 @@ package mage.sets.returntoravnica; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.DiesTriggeredAbility; import mage.abilities.common.PutIntoGraveFromAnywhereTriggeredAbility; -import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.CreateTokenEffect; +import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect; import mage.abilities.keyword.TrampleAbility; -import mage.cards.Card; import mage.cards.CardImpl; -import mage.constants.Outcome; -import mage.game.Game; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.game.permanent.token.Token; -import mage.players.Player; /** * @@ -62,10 +56,12 @@ public class WorldspineWurm extends CardImpl { // Trample this.addAbility(TrampleAbility.getInstance()); + // When Worldspine Wurm dies, put three 5/5 green Wurm creature tokens with trample onto the battlefield. this.addAbility(new DiesTriggeredAbility(new CreateTokenEffect(new WorldspineWurmToken(), 3))); + // When Worldspine Wurm is put into a graveyard from anywhere, shuffle it into its owner's library. - this.addAbility(new PutIntoGraveFromAnywhereTriggeredAbility(new WorldspineWurmEffect())); + this.addAbility(new PutIntoGraveFromAnywhereTriggeredAbility(new ShuffleIntoLibrarySourceEffect())); } public WorldspineWurm(final WorldspineWurm card) { @@ -78,40 +74,6 @@ public class WorldspineWurm extends CardImpl { } } - -class WorldspineWurmEffect extends OneShotEffect { - WorldspineWurmEffect() { - super(Outcome.Neutral); - staticText = "shuffle it into its owner's library"; - } - - WorldspineWurmEffect(final WorldspineWurmEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player != null) { - Card c = player.getGraveyard().get(source.getSourceId(), game); - if (c != null) { - player.getGraveyard().remove(c); - player.getLibrary().putOnTop(c, game); - player.shuffleLibrary(game); - return true; - } - - } - return false; - } - - @Override - public WorldspineWurmEffect copy() { - return new WorldspineWurmEffect(this); - } -} - - class WorldspineWurmToken extends Token { public WorldspineWurmToken() { diff --git a/Mage.Sets/src/mage/sets/seventhedition/Compost.java b/Mage.Sets/src/mage/sets/seventhedition/Compost.java new file mode 100644 index 00000000000..15d7b4f7602 --- /dev/null +++ b/Mage.Sets/src/mage/sets/seventhedition/Compost.java @@ -0,0 +1,99 @@ +/* + * 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.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.events.ZoneChangeEvent; + +/** + * + * @author emerald000 + */ +public class Compost extends CardImpl { + + public Compost(UUID ownerId) { + super(ownerId, 235, "Compost", Rarity.UNCOMMON, new CardType[]{CardType.ENCHANTMENT}, "{1}{G}"); + this.expansionSetCode = "7ED"; + + this.color.setGreen(true); + + // Whenever a black card is put into an opponent's graveyard from anywhere, you may draw a card. + this.addAbility(new CompostTriggeredAbility()); + } + + public Compost(final Compost card) { + super(card); + } + + @Override + public Compost copy() { + return new Compost(this); + } +} + +class CompostTriggeredAbility extends TriggeredAbilityImpl { + + CompostTriggeredAbility() { + super(Zone.BATTLEFIELD, new DrawCardSourceControllerEffect(1), true); + } + + CompostTriggeredAbility(final CompostTriggeredAbility ability) { + super(ability); + } + + @Override + public CompostTriggeredAbility copy() { + return new CompostTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.ZONE_CHANGE && ((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD) { + Card card = game.getCard(event.getTargetId()); + if (card != null && card.getColor().isBlack() && game.getOpponents(controllerId).contains(card.getOwnerId())) { + return true; + } + } + return false; + } + + @Override + public String getRule() { + return "Whenever a black card is put into an opponent's graveyard from anywhere, you may draw a card"; + } +} diff --git a/Mage.Sets/src/mage/sets/timespiral/ReturnToDust.java b/Mage.Sets/src/mage/sets/timespiral/ReturnToDust.java new file mode 100644 index 00000000000..3ebd2caa77d --- /dev/null +++ b/Mage.Sets/src/mage/sets/timespiral/ReturnToDust.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.timespiral; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class ReturnToDust extends mage.sets.commander.ReturnToDust { + + public ReturnToDust(UUID ownerId) { + super(ownerId); + this.cardNumber = 39; + this.expansionSetCode = "TSP"; + } + + public ReturnToDust(final ReturnToDust card) { + super(card); + } + + @Override + public ReturnToDust copy() { + return new ReturnToDust(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/Compost.java b/Mage.Sets/src/mage/sets/urzasdestiny/Compost.java new file mode 100644 index 00000000000..e57f24adf54 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzasdestiny/Compost.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.urzasdestiny; + +import java.util.UUID; + +/** + * + * @author emerald000 + */ +public class Compost extends mage.sets.seventhedition.Compost { + + public Compost(UUID ownerId) { + super(ownerId); + this.cardNumber = 102; + this.expansionSetCode = "UDS"; + } + + public Compost(final Compost card) { + super(card); + } + + @Override + public Compost copy() { + return new Compost(this); + } +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/SerraAvatar.java b/Mage.Sets/src/mage/sets/urzassaga/SerraAvatar.java index 7f71d7d6289..931962a30d0 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/SerraAvatar.java +++ b/Mage.Sets/src/mage/sets/urzassaga/SerraAvatar.java @@ -28,19 +28,17 @@ package mage.sets.urzassaga; import java.util.UUID; - -import mage.constants.*; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.PutIntoGraveFromAnywhereTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.dynamicvalue.common.ControllerLifeCount; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.ShuffleIntoLibrarySourceEffect; import mage.abilities.effects.common.continious.SetPowerToughnessSourceEffect; -import mage.cards.Card; import mage.cards.CardImpl; -import mage.game.Game; -import mage.players.Player; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; /** * @@ -59,8 +57,9 @@ public class SerraAvatar extends CardImpl { // Serra Avatar's power and toughness are each equal to your life total. this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new ControllerLifeCount(), Duration.EndOfGame))); + // When Serra Avatar is put into a graveyard from anywhere, shuffle it into its owner's library. - this.addAbility(new PutIntoGraveFromAnywhereTriggeredAbility(new SerraAvatarEffect())); + this.addAbility(new PutIntoGraveFromAnywhereTriggeredAbility(new ShuffleIntoLibrarySourceEffect())); } public SerraAvatar(final SerraAvatar card) { @@ -72,35 +71,3 @@ public class SerraAvatar extends CardImpl { return new SerraAvatar(this); } } - -class SerraAvatarEffect extends OneShotEffect { - SerraAvatarEffect() { - super(Outcome.ReturnToHand); - staticText = "shuffle it into its owner's library"; - } - - SerraAvatarEffect(final SerraAvatarEffect effect) { - super(effect); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player != null) { - Card c = player.getGraveyard().get(source.getSourceId(), game); - if (c != null) { - player.getGraveyard().remove(c); - player.getLibrary().putOnTop(c, game); - player.shuffleLibrary(game); - return true; - } - - } - return false; - } - - @Override - public SerraAvatarEffect copy() { - return new SerraAvatarEffect(this); - } -} diff --git a/Mage/src/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java b/Mage/src/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java new file mode 100644 index 00000000000..22f8bf9f667 --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/ShuffleIntoLibrarySourceEffect.java @@ -0,0 +1,74 @@ +/* + * 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.abilities.effects.common; + +import mage.abilities.Ability; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; + +/** + * + * @author emerald000 + */ + +public class ShuffleIntoLibrarySourceEffect extends OneShotEffect { + + public ShuffleIntoLibrarySourceEffect() { + super(Outcome.Neutral); + staticText = "shuffle it into its owner's library"; + } + + public ShuffleIntoLibrarySourceEffect(final ShuffleIntoLibrarySourceEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Card card = game.getCard(source.getSourceId()); + if (card != null) { + Player player = game.getPlayer(card.getOwnerId()); + if (player != null) { + Zone fromZone = game.getState().getZone(card.getId()); + player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, fromZone, true, true); + player.shuffleLibrary(game); + return true; + } + } + return false; + } + + @Override + public ShuffleIntoLibrarySourceEffect copy() { + return new ShuffleIntoLibrarySourceEffect(this); + } +}