From 76b15e86af59b7439ede7056865909daccc244b1 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sun, 22 Apr 2018 17:52:38 +0400 Subject: [PATCH] Fixed broken "any target" spells (can't target to planeswalkers) --- .../mage/target/common/TargetAnyTarget.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/Mage/src/main/java/mage/target/common/TargetAnyTarget.java b/Mage/src/main/java/mage/target/common/TargetAnyTarget.java index 2fbe3046eda..8204246dc78 100644 --- a/Mage/src/main/java/mage/target/common/TargetAnyTarget.java +++ b/Mage/src/main/java/mage/target/common/TargetAnyTarget.java @@ -104,6 +104,7 @@ public class TargetAnyTarget extends TargetImpl { @Override public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { int count = 0; + MageObject targetSource = game.getObject(sourceId); for (UUID playerId : game.getState().getPlayersInRange(sourceControllerId, game)) { Player player = game.getPlayer(playerId); @@ -114,6 +115,7 @@ public class TargetAnyTarget extends TargetImpl { } } } + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter.getCreatureFilter(), sourceControllerId, game)) { if (permanent.canBeTargetedBy(targetSource, sourceControllerId, game) && filter.match(permanent, sourceId, sourceControllerId, game)) { count++; @@ -122,6 +124,16 @@ public class TargetAnyTarget extends TargetImpl { } } } + + for (Permanent planeswalker : game.getBattlefield().getActivePermanents(filter.getPlaneswalkerFilter(), sourceControllerId, game)) { + if (planeswalker.canBeTargetedBy(targetSource, sourceControllerId, game) && filter.match(planeswalker, sourceId, sourceControllerId, game)) { + count++; + if (count >= this.minNumberOfTargets) { + return true; + } + } + } + return false; } @@ -137,6 +149,7 @@ public class TargetAnyTarget extends TargetImpl { @Override public boolean canChoose(UUID sourceControllerId, Game game) { int count = 0; + for (UUID playerId : game.getState().getPlayersInRange(sourceControllerId, game)) { Player player = game.getPlayer(playerId); if (player != null && filter.match(player, game)) { @@ -146,6 +159,7 @@ public class TargetAnyTarget extends TargetImpl { } } } + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter.getCreatureFilter(), sourceControllerId, game)) { if (filter.match(permanent, null, sourceControllerId, game)) { count++; @@ -154,6 +168,16 @@ public class TargetAnyTarget extends TargetImpl { } } } + + for (Permanent planeswalker : game.getBattlefield().getActivePermanents(filter.getPlaneswalkerFilter(), sourceControllerId, game)) { + if (filter.match(planeswalker, null, sourceControllerId, game)) { + count++; + if (count >= this.minNumberOfTargets) { + return true; + } + } + } + return false; } @@ -161,6 +185,7 @@ public class TargetAnyTarget extends TargetImpl { public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { Set possibleTargets = new HashSet<>(); MageObject targetSource = game.getObject(sourceId); + for (UUID playerId : game.getState().getPlayersInRange(sourceControllerId, game)) { Player player = game.getPlayer(playerId); if (player != null @@ -169,29 +194,47 @@ public class TargetAnyTarget extends TargetImpl { possibleTargets.add(playerId); } } + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter.getCreatureFilter(), sourceControllerId, game)) { if (permanent.canBeTargetedBy(targetSource, sourceControllerId, game) && filter.getCreatureFilter().match(permanent, sourceId, sourceControllerId, game)) { possibleTargets.add(permanent.getId()); } } + + for (Permanent planeswalker : game.getBattlefield().getActivePermanents(filter.getPlaneswalkerFilter(), sourceControllerId, game)) { + if (planeswalker.canBeTargetedBy(targetSource, sourceControllerId, game) + && filter.getPlaneswalkerFilter().match(planeswalker, sourceId, sourceControllerId, game)) { + possibleTargets.add(planeswalker.getId()); + } + } + return possibleTargets; } @Override public Set possibleTargets(UUID sourceControllerId, Game game) { Set possibleTargets = new HashSet<>(); + for (UUID playerId : game.getState().getPlayersInRange(sourceControllerId, game)) { Player player = game.getPlayer(playerId); if (player != null && filter.getPlayerFilter().match(player, game)) { possibleTargets.add(playerId); } } + for (Permanent permanent : game.getBattlefield().getActivePermanents(filter.getCreatureFilter(), sourceControllerId, game)) { if (filter.getCreatureFilter().match(permanent, null, sourceControllerId, game)) { possibleTargets.add(permanent.getId()); } } + + for (Permanent planeswalker : game.getBattlefield().getActivePermanents(filter.getPlaneswalkerFilter(), sourceControllerId, game)) { + if (filter.getPlaneswalkerFilter().match(planeswalker, null, sourceControllerId, game)) { + possibleTargets.add(planeswalker.getId()); + } + } + return possibleTargets; }