diff --git a/Mage.Sets/src/mage/sets/alliances/ForceOfWill.java b/Mage.Sets/src/mage/sets/alliances/ForceOfWill.java new file mode 100644 index 00000000000..07c83af0386 --- /dev/null +++ b/Mage.Sets/src/mage/sets/alliances/ForceOfWill.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.alliances; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.ObjectColor; +import mage.abilities.costs.AlternativeCostImpl; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.costs.CostsImpl; +import mage.abilities.costs.common.ExileFromHandCost; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.effects.common.CounterTargetEffect; +import mage.cards.CardImpl; +import mage.filter.common.FilterOwnedCard; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.mageobject.CardIdPredicate; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.TargetSpell; +import mage.target.common.TargetCardInHand; + +/** + * + * @author Plopman + */ +public class ForceOfWill extends CardImpl { + + public ForceOfWill(UUID ownerId) { + super(ownerId, 42, "Force of Will", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{U}{U}"); + this.expansionSetCode = "ALL"; + + this.color.setBlue(true); + + // You may pay 1 life and exile a blue card from your hand rather than pay Force of Will's mana cost. + FilterOwnedCard filter = new FilterOwnedCard("blue card from your hand"); + filter.add(new ColorPredicate(ObjectColor.BLUE)); + filter.add(Predicates.not(new CardIdPredicate(this.getId()))); // the exile cost can never be paid with the card itself + CostsImpl costs = new CostsImpl(); + costs.add(new PayLifeCost(1)); + costs.add(new ExileFromHandCost(new TargetCardInHand(filter))); + this.getSpellAbility().addAlternativeCost(new AlternativeCostImpl("Pay 1 life and exile a blue card from your hand rather than pay Force of Will's mana cost", costs)); + + // Counter target spell. + this.getSpellAbility().addEffect(new CounterTargetEffect()); + this.getSpellAbility().addTarget(new TargetSpell()); + } + + public ForceOfWill(final ForceOfWill card) { + super(card); + } + + @Override + public ForceOfWill copy() { + return new ForceOfWill(this); + } +} diff --git a/Mage.Sets/src/mage/sets/alliances/HelmOfObedience.java b/Mage.Sets/src/mage/sets/alliances/HelmOfObedience.java new file mode 100644 index 00000000000..9262112f6c1 --- /dev/null +++ b/Mage.Sets/src/mage/sets/alliances/HelmOfObedience.java @@ -0,0 +1,134 @@ +/* + * 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.alliances; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.VariableManaCost; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.ManacostVariableValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetOpponent; + +/** + * + * @author Plopman + */ +public class HelmOfObedience extends CardImpl { + + public HelmOfObedience(UUID ownerId) { + super(ownerId, 163, "Helm of Obedience", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{4}"); + this.expansionSetCode = "ALL"; + + // {X}, {tap}: Target opponent puts cards from the top of his or her library into his or her graveyard until a creature card or X cards are put into that graveyard this way, whichever comes first. If a creature card is put into that graveyard this way, sacrifice Helm of Obedience and put that card onto the battlefield under your control. X can't be 0. + SimpleActivatedAbility abilitiy = new SimpleActivatedAbility(Constants.Zone.BATTLEFIELD, new HelmOfObedienceEffect(), new TapSourceCost()); + abilitiy.addCost(new VariableManaCost()); + abilitiy.addTarget(new TargetOpponent()); + this.addAbility(abilitiy); + } + + public HelmOfObedience(final HelmOfObedience card) { + super(card); + } + + @Override + public HelmOfObedience copy() { + return new HelmOfObedience(this); + } +} + + +class HelmOfObedienceEffect extends OneShotEffect { + + + private static final ManacostVariableValue amount = new ManacostVariableValue(); + + public HelmOfObedienceEffect() { + super(Constants.Outcome.Detriment); + } + + public HelmOfObedienceEffect(final HelmOfObedienceEffect effect) { + super(effect); + } + + + @Override + public HelmOfObedienceEffect copy() { + return new HelmOfObedienceEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(targetPointer.getFirst(game, source)); + if (player != null) { + int max = amount.calculate(game, source); + if(max != 0){ + int numberOfCard = 0; + + while(player.getLibrary().size() > 0) { + Card card = player.getLibrary().removeFromTop(game); + if (card != null){ + if(card.moveToZone(Constants.Zone.GRAVEYARD, source.getId(), game, false)){ + if(card.getCardType().contains(CardType.CREATURE)){ + break; + } + else{ + numberOfCard++; + if(numberOfCard >= max){ + break; + } + } + } + } + else{ + return false; + } + } + } + } + return true; + } + + @Override + public String getText(Mode mode) { + return "Target opponent puts cards from the top of his or her library into his or her graveyard until a creature card or X cards are put into that graveyard this way, whichever comes first. If a creature card is put into that graveyard this way, sacrifice Helm of Obedience and put that card onto the battlefield under your control. X can't be 0"; + } + +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/eighthedition/EnsnaringBridge.java b/Mage.Sets/src/mage/sets/eighthedition/EnsnaringBridge.java new file mode 100644 index 00000000000..a6d394db51a --- /dev/null +++ b/Mage.Sets/src/mage/sets/eighthedition/EnsnaringBridge.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 Plopman + */ +public class EnsnaringBridge extends mage.sets.stronghold.EnsnaringBridge { + + public EnsnaringBridge(UUID ownerId) { + super(ownerId); + this.cardNumber = 300; + this.expansionSetCode = "8ED"; + } + + public EnsnaringBridge(final EnsnaringBridge card) { + super(card); + } + + @Override + public EnsnaringBridge copy() { + return new EnsnaringBridge(this); + } +} diff --git a/Mage.Sets/src/mage/sets/seventhedition/EnsnaringBridge.java b/Mage.Sets/src/mage/sets/seventhedition/EnsnaringBridge.java new file mode 100644 index 00000000000..6132c0a8467 --- /dev/null +++ b/Mage.Sets/src/mage/sets/seventhedition/EnsnaringBridge.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.seventhedition; + +import java.util.UUID; + +/** + * + * @author Plopman + */ +public class EnsnaringBridge extends mage.sets.stronghold.EnsnaringBridge { + + public EnsnaringBridge(UUID ownerId) { + super(ownerId); + this.cardNumber = 294; + this.expansionSetCode = "7ED"; + } + + public EnsnaringBridge(final EnsnaringBridge card) { + super(card); + } + + @Override + public EnsnaringBridge copy() { + return new EnsnaringBridge(this); + } +} diff --git a/Mage.Sets/src/mage/sets/stronghold/EnsnaringBridge.java b/Mage.Sets/src/mage/sets/stronghold/EnsnaringBridge.java new file mode 100644 index 00000000000..b333f0abe9b --- /dev/null +++ b/Mage.Sets/src/mage/sets/stronghold/EnsnaringBridge.java @@ -0,0 +1,117 @@ +/* + * 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.Duration; +import mage.Constants.Outcome; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.ReplacementEffectImpl; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author Plopman + */ +public class EnsnaringBridge extends CardImpl { + + public EnsnaringBridge(UUID ownerId) { + super(ownerId, 127, "Ensnaring Bridge", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}"); + this.expansionSetCode = "STH"; + + // Creatures with power greater than the number of cards in your hand can't attack. + this.addAbility(new SimpleStaticAbility(Constants.Zone.BATTLEFIELD, new EnsnaringBridgeEffect())); + } + + public EnsnaringBridge(final EnsnaringBridge card) { + super(card); + } + + @Override + public EnsnaringBridge copy() { + return new EnsnaringBridge(this); + } +} + +class EnsnaringBridgeEffect extends ReplacementEffectImpl { + + + public EnsnaringBridgeEffect() { + super(Duration.WhileOnBattlefield, Outcome.Detriment); + staticText = "Creatures with power greater than the number of cards in your hand can't attack"; + } + + public EnsnaringBridgeEffect(final EnsnaringBridgeEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public EnsnaringBridgeEffect copy() { + return new EnsnaringBridgeEffect(this); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + return true; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getType() == EventType.DECLARE_ATTACKER) { + Permanent permanent = game.getPermanent(event.getSourceId()); + if (permanent != null) { + Player player = game.getPlayer(source.getControllerId()); + if (player.getInRange().contains(permanent.getControllerId())) { + Player controller = game.getPlayer(source.getControllerId()); + if(player != null){ + int cardInHand = controller.getHand().size(); + if (permanent.getPower().getValue() > cardInHand){ + return true; + } + } + } + } + } + return false; + } + +} diff --git a/Mage.Sets/src/mage/sets/urzassaga/EnergyField.java b/Mage.Sets/src/mage/sets/urzassaga/EnergyField.java new file mode 100644 index 00000000000..136e4a8cde3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/urzassaga/EnergyField.java @@ -0,0 +1,150 @@ +/* + * 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.urzassaga; + +import java.util.UUID; +import mage.Constants; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.abilities.Ability; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.PreventionEffectImpl; +import mage.abilities.effects.common.SacrificeSourceEffect; +import mage.cards.CardImpl; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; + +/** + * + * @author Plopman + */ +public class EnergyField extends CardImpl { + + public EnergyField(UUID ownerId) { + super(ownerId, 73, "Energy Field", Rarity.RARE, new CardType[]{CardType.ENCHANTMENT}, "{1}{U}"); + this.expansionSetCode = "USG"; + + this.color.setBlue(true); + + // Prevent all damage that would be dealt to you by sources you don't control. + this.addAbility(new SimpleStaticAbility(Constants.Zone.BATTLEFIELD, new EnergyFieldEffect())); + // When a card is put into your graveyard from anywhere, sacrifice Energy Field. + this.addAbility(new PutIntoYourGraveyardTriggeredAbility()); + } + + public EnergyField(final EnergyField card) { + super(card); + } + + @Override + public EnergyField copy() { + return new EnergyField(this); + } +} + +class EnergyFieldEffect extends PreventionEffectImpl { + + public EnergyFieldEffect() { + super(Constants.Duration.WhileOnBattlefield); + staticText = "Prevent all damage that would be dealt to you by sources you don't control"; + } + + public EnergyFieldEffect(EnergyFieldEffect effect) { + super(effect); + } + + @Override + public boolean replaceEvent(GameEvent event, Ability source, Game game) { + GameEvent preventEvent = new GameEvent(GameEvent.EventType.PREVENT_DAMAGE, source.getFirstTarget(), source.getId(), source.getControllerId(), event.getAmount(), false); + if (!game.replaceEvent(preventEvent)) { + int damage = event.getAmount(); + event.setAmount(0); + game.informPlayers("Damage has been prevented: " + damage); + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.PREVENTED_DAMAGE, source.getFirstTarget(), source.getId(), source.getControllerId(), damage)); + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return true; + } + + @Override + public boolean applies(GameEvent event, Ability source, Game game) { + if (event.getType().equals(GameEvent.EventType.DAMAGE_PLAYER)) { + if (event.getTargetId().equals(source.getControllerId()) && game.getControllerId(event.getSourceId()) != source.getControllerId()){ + return super.applies(event, source, game); + } + } + return false; + } + + @Override + public EnergyFieldEffect copy() { + return new EnergyFieldEffect(this); + } +} + +class PutIntoYourGraveyardTriggeredAbility extends TriggeredAbilityImpl { + + + + public PutIntoYourGraveyardTriggeredAbility() { + super(Constants.Zone.BATTLEFIELD, new SacrificeSourceEffect(), false); + } + + public PutIntoYourGraveyardTriggeredAbility(PutIntoYourGraveyardTriggeredAbility ability) { + super(ability); + } + + @Override + public PutIntoYourGraveyardTriggeredAbility copy() { + return new PutIntoYourGraveyardTriggeredAbility(this); + } + + @Override + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == GameEvent.EventType.ZONE_CHANGE) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + if (zEvent.getToZone() == Constants.Zone.GRAVEYARD) { + if(game.getControllerId(event.getTargetId()) != this.getControllerId()){ + return true; + } + } + } + return false; + } + + @Override + public String getRule() { + return "When a card is put into your graveyard from anywhere, " + super.getRule(); + } +} \ No newline at end of file