From 247f8f5be1ee2e0d1ce6aac76d8f70f99872fb4c Mon Sep 17 00:00:00 2001 From: Agetian Date: Tue, 27 Jun 2017 16:35:49 +0000 Subject: [PATCH] - Integrating the zone restriction check as a mandatory part of SpellAbility#canTarget. --- .../forge/ai/ability/ChangeTargetsAi.java | 2 +- .../ability/effects/ChangeTargetsEffect.java | 4 ++-- .../forge/game/spellability/SpellAbility.java | 22 ++++++------------- 3 files changed, 10 insertions(+), 18 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeTargetsAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeTargetsAi.java index 16929b21c7e..7baceb3cc71 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeTargetsAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeTargetsAi.java @@ -63,7 +63,7 @@ public class ChangeTargetsAi extends SpellAbilityAi { // make sure not to redirect our own abilities return false; } - if (!topSa.canTarget(sa.getHostCard(), true)) { + if (!topSa.canTarget(sa.getHostCard())) { // don't try targeting it if we can't legally target the host card with it in the first place return false; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeTargetsEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeTargetsEffect.java index 9f50d0b472d..37dd888a875 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeTargetsEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeTargetsEffect.java @@ -81,7 +81,7 @@ public class ChangeTargetsEffect extends SpellAbilityEffect { // 3. test if updated choices would be correct. GameObject newTarget = Iterables.getFirst(getDefinedCardsOrTargeted(sa), null); - if (replaceIn.getSpellAbility(true).canTarget(newTarget, true)) { + if (replaceIn.getSpellAbility(true).canTarget(newTarget)) { newTargetBlock.add(newTarget); replaceIn.updateTarget(newTargetBlock, oldTarget, newTarget); } @@ -103,7 +103,7 @@ public class ChangeTargetsEffect extends SpellAbilityEffect { } else if (sa.hasParam("DefinedMagnet")){ GameObject newTarget = Iterables.getFirst(getDefinedCardsOrTargeted(sa, "DefinedMagnet"), null); - if (newTarget != null && changingTgtSA.canTarget(newTarget, true)) { + if (newTarget != null && changingTgtSA.canTarget(newTarget)) { changingTgtSA.resetTargets(); changingTgtSA.getTargets().add(newTarget); changingTgtSI.updateTarget(changingTgtSA.getTargets(), null, newTarget); diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index e9e5f8c90ac..136d7c3a0a2 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -973,27 +973,19 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit return false; } } + + if (entity instanceof Card) { + final Card c = (Card) entity; + if (!tr.getZone().contains(c.getZone().getZoneType())) { + return false; + } + } } // Restrictions coming from target return entity.canBeTargetedBy(this); } - public final boolean canTarget(final GameObject object, final boolean zoneCheck) { - // TODO: the zone check should most likely be integrated as a part of the - // regular canTarget call, but that needs testing. - boolean zoneTestPassed = true; - if (object instanceof Card && zoneCheck) { - final TargetRestrictions tr = getTargetRestrictions(); - final Card c = (Card)object; - if (!tr.getZone().contains(c.getZone().getZoneType())) { - zoneTestPassed = false; - } - } - - return zoneTestPassed && canTarget(object); - } - // is this a wrapping ability (used by trigger abilities) public boolean isWrapper() { return false;