diff --git a/Mage/src/main/java/mage/abilities/AbilityImpl.java b/Mage/src/main/java/mage/abilities/AbilityImpl.java index fe39fd4adf..d15005ecf3 100644 --- a/Mage/src/main/java/mage/abilities/AbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/AbilityImpl.java @@ -346,23 +346,6 @@ public abstract class AbilityImpl implements Ability { } } } - //20100716 - 601.2e - if (sourceObject != null) { - sourceObject.adjustCosts(this, game); - if (sourceObject instanceof Card) { - for (Ability ability : ((Card) sourceObject).getAbilities(game)) { - if (ability instanceof AdjustingSourceCosts) { - ((AdjustingSourceCosts) ability).adjustCosts(this, game); - } - } - } else { - for (Ability ability : sourceObject.getAbilities()) { - if (ability instanceof AdjustingSourceCosts) { - ((AdjustingSourceCosts) ability).adjustCosts(this, game); - } - } - } - } // this is a hack to prevent mana abilities with mana costs from causing endless loops - pay other costs first if (this instanceof ActivatedManaAbilityImpl && !costs.pay(this, game, sourceId, controllerId, noMana, null)) { @@ -372,6 +355,26 @@ public abstract class AbilityImpl implements Ability { //20101001 - 601.2e if (costModificationActive) { + + // TODO: replace all AdjustingSourceCosts abilities to continuus effect, see Affinity example + //20100716 - 601.2e + if (sourceObject != null) { + sourceObject.adjustCosts(this, game); + if (sourceObject instanceof Card) { + for (Ability ability : ((Card) sourceObject).getAbilities(game)) { + if (ability instanceof AdjustingSourceCosts) { + ((AdjustingSourceCosts) ability).adjustCosts(this, game); + } + } + } else { + for (Ability ability : sourceObject.getAbilities()) { + if (ability instanceof AdjustingSourceCosts) { + ((AdjustingSourceCosts) ability).adjustCosts(this, game); + } + } + } + } + game.getContinuousEffects().costModification(this, game); } else { costModificationActive = true; diff --git a/Mage/src/main/java/mage/abilities/costs/AdjustingSourceCosts.java b/Mage/src/main/java/mage/abilities/costs/AdjustingSourceCosts.java index e1723c5b46..34d951a97c 100644 --- a/Mage/src/main/java/mage/abilities/costs/AdjustingSourceCosts.java +++ b/Mage/src/main/java/mage/abilities/costs/AdjustingSourceCosts.java @@ -7,12 +7,14 @@ import mage.game.Game; * Interface for abilities that adjust source and only source costs. For the * cases when some permanent adjusts costs of other spells use * {@link mage.abilities.effects.CostModificationEffect}. - * + * <p> * Example of such source costs adjusting: * {@link mage.abilities.keyword.AffinityForArtifactsAbility} * * @author nantuko */ +@Deprecated +// replace all AdjustingSourceCosts with "extends CostModificationEffectImpl with zone.ALL" (see Affinity example) @FunctionalInterface public interface AdjustingSourceCosts { diff --git a/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java b/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java index 12e4e37797..cb7991935c 100644 --- a/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/AffinityForArtifactsAbility.java @@ -1,24 +1,21 @@ - package mage.abilities.keyword; -import mage.abilities.Ability; -import mage.abilities.SpellAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.costs.AdjustingSourceCosts; import mage.abilities.effects.common.AffinityEffect; +import mage.abilities.hint.common.ArtifactsYouControlHint; import mage.constants.Zone; import mage.filter.StaticFilters; -import mage.game.Game; -import mage.util.CardUtil; /** * Affinity for artifacts */ -public class AffinityForArtifactsAbility extends SimpleStaticAbility implements AdjustingSourceCosts { +public class AffinityForArtifactsAbility extends SimpleStaticAbility { public AffinityForArtifactsAbility() { - super(Zone.OUTSIDE, new AffinityEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT)); + super(Zone.ALL, new AffinityEffect(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT)); setRuleAtTheTop(true); + + this.addHint(ArtifactsYouControlHint.instance); } public AffinityForArtifactsAbility(final AffinityForArtifactsAbility ability) { @@ -34,14 +31,4 @@ public class AffinityForArtifactsAbility extends SimpleStaticAbility implements public String getRule() { return "affinity for artifacts <i>(This spell costs {1} less to cast for each artifact you control.)</i>"; } - - @Override - public void adjustCosts(Ability ability, Game game) { - if (ability instanceof SpellAbility) { - int count = game.getBattlefield().getAllActivePermanents(StaticFilters.FILTER_CONTROLLED_PERMANENT_ARTIFACT, ability.getControllerId(), game).size(); - if (count > 0) { - CardUtil.adjustCost((SpellAbility)ability, count); - } - } - } }