diff --git a/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java b/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java index 9a65514959..b4f77b1dc4 100644 --- a/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java +++ b/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java @@ -83,9 +83,6 @@ class AnimarCostReductionEffect extends CostModificationEffectImpl { if (abilityToModify.isControlledBy(source.getControllerId())) { Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game); if (spellCard != null) { - if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { - spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game); - } return spellCard.isCreature(); } } diff --git a/Mage.Sets/src/mage/cards/e/ElspethConquersDeath.java b/Mage.Sets/src/mage/cards/e/ElspethConquersDeath.java index 117721c4f4..9ea54575cf 100644 --- a/Mage.Sets/src/mage/cards/e/ElspethConquersDeath.java +++ b/Mage.Sets/src/mage/cards/e/ElspethConquersDeath.java @@ -102,9 +102,6 @@ class ElspethConquersDeathCostEffect extends CostModificationEffectImpl { && game.getOpponents(source.getControllerId()).contains(abilityToModify.getControllerId())) { Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game); if (spellCard != null) { - if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { - spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game); - } return !spellCard.isCreature(); } } diff --git a/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java b/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java index 8cf5a54708..b462ecff10 100644 --- a/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java +++ b/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java @@ -60,9 +60,6 @@ class HumOfTheRadixCostIncreaseEffect extends CostModificationEffectImpl { if (abilityToModify instanceof SpellAbility) { Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game); if (spellCard != null) { - if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { - spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game); - } return !spellCard.isArtifact(); } } diff --git a/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java b/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java index 0fdb43f8e3..e47929beac 100644 --- a/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java +++ b/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java @@ -117,9 +117,6 @@ class RakdosLordOfRiotsCostReductionEffect extends CostModificationEffectImpl { if (abilityToModify.isControlledBy(source.getControllerId())) { Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game); if (spellCard != null) { - if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { - spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game); - } return spellCard.isCreature(); } } diff --git a/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java b/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java index 1830867721..7cfdf8817b 100644 --- a/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java +++ b/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java @@ -110,9 +110,6 @@ class SemblanceAnvilCostReductionEffect extends CostModificationEffectImpl { && abilityToModify.isControlledBy(source.getControllerId())) { Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game); if (spellCard != null) { - if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { - spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game); - } Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { List<UUID> imprinted = permanent.getImprinted(); diff --git a/Mage/src/main/java/mage/abilities/SpellAbility.java b/Mage/src/main/java/mage/abilities/SpellAbility.java index 82593588e4..d76b52e478 100644 --- a/Mage/src/main/java/mage/abilities/SpellAbility.java +++ b/Mage/src/main/java/mage/abilities/SpellAbility.java @@ -12,11 +12,11 @@ import mage.cards.SplitCard; import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.stack.Spell; import mage.players.Player; import java.util.Optional; import java.util.UUID; +import javax.naming.directory.InvalidAttributesException; /** * @author BetaSteward_at_googlemail.com @@ -236,12 +236,25 @@ public class SpellAbility extends ActivatedAbilityImpl { return this; } + /** + * Returns a card object with the spell characteristics like calor, types, + * subtypes etc. E.g. if you cast a Bestow card as enchantment, the + * characteristics don't include the creature type. + * + * @param game + * @return card object with the spell characteristics + */ public Card getCharacteristics(Game game) { - Spell spell = game.getSpell(this.getId()); - if (spell != null) { - return spell; + Card spellCharacteristics = game.getSpell(this.getId()); + if (spellCharacteristics == null) { + spellCharacteristics = game.getCard(this.getSourceId()); } - return game.getCard(this.getSourceId()); + if (spellCharacteristics != null) { + if (getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { + spellCharacteristics = getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCharacteristics, game); + } + } + return spellCharacteristics; } public static SpellAbility getSpellAbilityFromEvent(GameEvent event, Game game) { diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java index db88ba0bcb..5bfc2e76a6 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java @@ -3,6 +3,7 @@ package mage.abilities.effects.common.cost; import java.util.LinkedHashSet; import java.util.Set; import java.util.UUID; +import javax.naming.directory.InvalidAttributesException; import mage.Mana; import mage.abilities.Ability; import mage.abilities.SpellAbility; @@ -11,7 +12,6 @@ import mage.choices.ChoiceImpl; import mage.constants.CostModificationType; import mage.constants.Duration; import mage.constants.Outcome; -import mage.constants.SpellAbilityCastMode; import mage.filter.FilterCard; import mage.game.Game; import mage.players.Player; @@ -124,9 +124,6 @@ public class SpellsCostReductionAllEffect extends CostModificationEffectImpl { if (abilityToModify instanceof SpellAbility) { Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game); if (spellCard != null) { - if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { - spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game); - } return this.filter.match(spellCard, game) && selectedByRuntimeData(spellCard, source, game); } } diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java index 2b68bfd19e..8819933e7d 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java @@ -115,9 +115,6 @@ public class SpellsCostReductionControllerEffect extends CostModificationEffectI if (abilityToModify.isControlledBy(source.getControllerId())) { Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game);; if (spellCard != null) { - if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { - spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game); - } return this.filter.match(spellCard, source.getSourceId(), source.getControllerId(), game); } } diff --git a/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java b/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java index 3f737edfbb..99b658cde3 100644 --- a/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java @@ -111,9 +111,6 @@ class TurriIslandEffect extends CostModificationEffectImpl { } Card spellCard = ((SpellAbility) abilityToModify).getCharacteristics(game); if (spellCard != null) { - if (((SpellAbility) abilityToModify).getSpellAbilityCastMode() != SpellAbilityCastMode.NORMAL) { - spellCard = ((SpellAbility) abilityToModify).getSpellAbilityCastMode().getTypeModifiedCardObjectCopy(spellCard, game); - } return filter.match(spellCard, game) && selectedByRuntimeData(spellCard, source, game); } }