From 84c1fbccdcb9308df2c1aa2a0ad748536a839396 Mon Sep 17 00:00:00 2001 From: North Date: Fri, 24 Jun 2011 23:42:03 +0300 Subject: [PATCH] Moved effect from framework to card implementation (only one card used it and very few cards can use it) Also some small refactoring. --- .../sets/newphyrexia/ApostlesBlessing.java | 63 ++++++++++++- .../mage/abilities/effects/EffectImpl.java | 1 + .../effects/common/DamageAllEffect.java | 4 +- .../common/DamageEverythingEffect.java | 4 +- ...ctionFromColorOrArtifactsTargetEffect.java | 92 ------------------- 5 files changed, 65 insertions(+), 99 deletions(-) delete mode 100644 Mage/src/mage/abilities/effects/common/continious/GainProtectionFromColorOrArtifactsTargetEffect.java diff --git a/Mage.Sets/src/mage/sets/newphyrexia/ApostlesBlessing.java b/Mage.Sets/src/mage/sets/newphyrexia/ApostlesBlessing.java index 1663580f740..60b623eca3d 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/ApostlesBlessing.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/ApostlesBlessing.java @@ -32,21 +32,26 @@ import java.util.UUID; import mage.Constants; import mage.Constants.CardType; +import mage.Constants.Duration; import mage.Constants.Rarity; -import mage.abilities.effects.common.continious.GainProtectionFromColorOrArtifactsTargetEffect; +import mage.abilities.Ability; +import mage.abilities.effects.common.continious.GainAbilityTargetEffect; +import mage.abilities.keyword.ProtectionAbility; import mage.cards.CardImpl; import mage.choices.ChoiceColorOrArtifact; -import mage.filter.FilterPermanent; +import mage.filter.Filter.ComparisonScope; +import mage.filter.FilterCard; import mage.filter.common.FilterControlledPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; import mage.target.common.TargetControlledPermanent; -import org.apache.log4j.spi.Filter; /** * * @author Loki */ public class ApostlesBlessing extends CardImpl { - private static FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature you control"); + private static final FilterControlledPermanent filter = new FilterControlledPermanent("artifact or creature you control"); static { filter.getCardType().add(CardType.ARTIFACT); @@ -58,7 +63,7 @@ public class ApostlesBlessing extends CardImpl { super(ownerId, 2, "Apostle's Blessing", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{1}{WP}"); this.expansionSetCode = "NPH"; this.color.setWhite(true); - this.getSpellAbility().addEffect(new GainProtectionFromColorOrArtifactsTargetEffect(Constants.Duration.EndOfTurn)); + this.getSpellAbility().addEffect(new ApostlesBlessingEffect(Duration.EndOfTurn)); this.getSpellAbility().addTarget(new TargetControlledPermanent(filter)); this.getSpellAbility().addChoice(new ChoiceColorOrArtifact()); } @@ -73,3 +78,51 @@ public class ApostlesBlessing extends CardImpl { } } + +class ApostlesBlessingEffect extends GainAbilityTargetEffect { + + FilterCard protectionFilter; + + public ApostlesBlessingEffect(Duration duration) { + super(new ProtectionAbility(new FilterCard()), duration); + protectionFilter = (FilterCard)((ProtectionAbility)ability).getFilter(); + } + + public ApostlesBlessingEffect(final ApostlesBlessingEffect effect) { + super(effect); + this.protectionFilter = effect.protectionFilter.copy(); + } + + @Override + public ApostlesBlessingEffect copy() { + return new ApostlesBlessingEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + ChoiceColorOrArtifact choice = (ChoiceColorOrArtifact) source.getChoices().get(0); + if (choice.isArtifactSelected()) { + protectionFilter.getCardType().add(Constants.CardType.ARTIFACT); + protectionFilter.setScopeCardType(ComparisonScope.Any); + } else { + protectionFilter.setColor(choice.getColor()); + protectionFilter.setUseColor(true); + protectionFilter.setScopeColor(ComparisonScope.Any); + } + + protectionFilter.setMessage(choice.getChoice()); + Permanent creature = game.getPermanent(source.getFirstTarget()); + if (creature != null) { + creature.addAbility(ability); + return true; + } + return false; + } + + @Override + public String getText(Ability source) { + return "target " + source.getTargets().get(0).getTargetName() + " gains protection from artifacts or from the color of your choice " + duration.toString(); + + } + +} diff --git a/Mage/src/mage/abilities/effects/EffectImpl.java b/Mage/src/mage/abilities/effects/EffectImpl.java index eb6206dc501..14a9052b118 100644 --- a/Mage/src/mage/abilities/effects/EffectImpl.java +++ b/Mage/src/mage/abilities/effects/EffectImpl.java @@ -92,6 +92,7 @@ public abstract class EffectImpl> implements Effect { return effectType; } + @Override public void setTargetPointer(TargetPointer targetPointer) { this.targetPointer = targetPointer; } diff --git a/Mage/src/mage/abilities/effects/common/DamageAllEffect.java b/Mage/src/mage/abilities/effects/common/DamageAllEffect.java index df5c0892dfb..626f39a6186 100644 --- a/Mage/src/mage/abilities/effects/common/DamageAllEffect.java +++ b/Mage/src/mage/abilities/effects/common/DamageAllEffect.java @@ -28,6 +28,7 @@ package mage.abilities.effects.common; +import java.util.List; import mage.Constants.Outcome; import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; @@ -68,7 +69,8 @@ public class DamageAllEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { + List permanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game); + for (Permanent permanent: permanents) { permanent.damage(amount.calculate(game, source), source.getId(), game, true, false); } return true; diff --git a/Mage/src/mage/abilities/effects/common/DamageEverythingEffect.java b/Mage/src/mage/abilities/effects/common/DamageEverythingEffect.java index 6b819d39f5f..57674dbf7e1 100644 --- a/Mage/src/mage/abilities/effects/common/DamageEverythingEffect.java +++ b/Mage/src/mage/abilities/effects/common/DamageEverythingEffect.java @@ -28,6 +28,7 @@ package mage.abilities.effects.common; +import java.util.List; import java.util.UUID; import mage.Constants.Outcome; import mage.abilities.Ability; @@ -62,7 +63,8 @@ public class DamageEverythingEffect extends OneShotEffect permanents = game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), game); + for (Permanent permanent: permanents) { permanent.damage(amount, source.getId(), game, true, false); } for (UUID playerId: game.getPlayer(source.getControllerId()).getInRange()) { diff --git a/Mage/src/mage/abilities/effects/common/continious/GainProtectionFromColorOrArtifactsTargetEffect.java b/Mage/src/mage/abilities/effects/common/continious/GainProtectionFromColorOrArtifactsTargetEffect.java deleted file mode 100644 index ae7496b8b01..00000000000 --- a/Mage/src/mage/abilities/effects/common/continious/GainProtectionFromColorOrArtifactsTargetEffect.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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.continious; - -import mage.Constants; -import mage.Constants.Duration; -import mage.abilities.Ability; -import mage.abilities.keyword.ProtectionAbility; -import mage.choices.ChoiceColor; -import mage.choices.ChoiceColorOrArtifact; -import mage.filter.Filter.ComparisonScope; -import mage.filter.FilterCard; -import mage.game.Game; -import mage.game.permanent.Permanent; - -/** - * - * @author BetaSteward_at_googlemail.com - */ -public class GainProtectionFromColorOrArtifactsTargetEffect extends GainAbilityTargetEffect { - - FilterCard protectionFilter; - - public GainProtectionFromColorOrArtifactsTargetEffect(Duration duration) { - super(new ProtectionAbility(new FilterCard()), duration); - protectionFilter = (FilterCard)((ProtectionAbility)ability).getFilter(); - } - - public GainProtectionFromColorOrArtifactsTargetEffect(final GainProtectionFromColorOrArtifactsTargetEffect effect) { - super(effect); - this.protectionFilter = effect.protectionFilter.copy(); - } - - @Override - public GainProtectionFromColorOrArtifactsTargetEffect copy() { - return new GainProtectionFromColorOrArtifactsTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - ChoiceColorOrArtifact choice = (ChoiceColorOrArtifact) source.getChoices().get(0); - if (choice.isArtifactSelected()) { - protectionFilter.getCardType().add(Constants.CardType.ARTIFACT); - protectionFilter.setScopeCardType(ComparisonScope.Any); - } else { - protectionFilter.setColor(choice.getColor()); - protectionFilter.setUseColor(true); - protectionFilter.setScopeColor(ComparisonScope.Any); - } - - protectionFilter.setMessage(choice.getChoice()); - Permanent creature = game.getPermanent(source.getFirstTarget()); - if (creature != null) { - creature.addAbility(ability); - return true; - } - return false; - } - - @Override - public String getText(Ability source) { - return "target " + source.getTargets().get(0).getTargetName() + " gains protection from artifacts or from the color of your choice " + duration.toString(); - - } - -}