diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index 3b5e4d736b6..b6084332f8c 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -41,6 +41,7 @@ import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.util.HashMap; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; @@ -324,7 +325,7 @@ public class GamePanel extends javax.swing.JPanel { this.feedbackPanel.getFeedback(FeedbackMode.QUESTION, question, true, false); } - public void pickTarget(String message, CardsView cardView, GameView gameView, boolean required) { + public void pickTarget(String message, CardsView cardView, GameView gameView, Set targets, boolean required) { updateGame(gameView); this.feedbackPanel.getFeedback(required?FeedbackMode.INFORM:FeedbackMode.CANCEL, message, false, gameView.getSpecial()); if (cardView != null && cardView.size() > 0) { diff --git a/Mage.Client/src/main/java/mage/client/remote/Client.java b/Mage.Client/src/main/java/mage/client/remote/Client.java index 0a0f15ced53..23623b818ea 100644 --- a/Mage.Client/src/main/java/mage/client/remote/Client.java +++ b/Mage.Client/src/main/java/mage/client/remote/Client.java @@ -111,7 +111,7 @@ public class Client implements CallbackClient { } else if (callback.getMethod().equals("gameTarget")) { GameClientMessage message = (GameClientMessage) callback.getData(); - session.getGame().pickTarget(message.getMessage(), message.getCardsView(), message.getGameView(), message.isFlag()); + session.getGame().pickTarget(message.getMessage(), message.getCardsView(), message.getGameView(), message.getTargets(), message.isFlag()); } else if (callback.getMethod().equals("gameSelect")) { GameClientMessage message = (GameClientMessage) callback.getData(); diff --git a/Mage.Common/src/mage/view/GameClientMessage.java b/Mage.Common/src/mage/view/GameClientMessage.java index b6bcb1b2738..25899ce935e 100644 --- a/Mage.Common/src/mage/view/GameClientMessage.java +++ b/Mage.Common/src/mage/view/GameClientMessage.java @@ -29,6 +29,8 @@ package mage.view; import java.io.Serializable; +import java.util.Set; +import java.util.UUID; /** * @@ -42,6 +44,7 @@ public class GameClientMessage implements Serializable { private AbilityPickerView abilityView; private boolean flag; private String[] strings; + private Set targets; private int min; private int max; @@ -54,10 +57,11 @@ public class GameClientMessage implements Serializable { this.message = message; } - public GameClientMessage(GameView gameView, String question, CardsView cardView, boolean required) { + public GameClientMessage(GameView gameView, String question, CardsView cardView, Set targets, boolean required) { this.gameView = gameView; this.message = question; this.cardsView = cardView; + this.targets = targets; this.flag = required; } @@ -101,6 +105,10 @@ public class GameClientMessage implements Serializable { return strings; } + public Set getTargets() { + return targets; + } + public int getMin() { return min; } diff --git a/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index c51679eaed7..3f6e79d0711 100644 --- a/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -182,7 +182,7 @@ public class HumanPlayer extends PlayerImpl { @Override public boolean choose(Outcome outcome, Target target, Game game) { while (!abort) { - game.fireSelectTargetEvent(playerId, target.getMessage(), target.isRequired()); + game.fireSelectTargetEvent(playerId, target.getMessage(), target.possibleTargets(null, playerId, game), target.isRequired()); waitForResponse(); if (response.getUUID() != null) { if (target.canTarget(response.getUUID(), game)) { @@ -199,7 +199,7 @@ public class HumanPlayer extends PlayerImpl { @Override public boolean chooseTarget(Outcome outcome, Target target, Ability source, Game game) { while (!abort) { - game.fireSelectTargetEvent(playerId, target.getMessage(), target.isRequired()); + game.fireSelectTargetEvent(playerId, target.getMessage(), target.possibleTargets(source==null?null:source.getId(), playerId, game), target.isRequired()); waitForResponse(); if (response.getUUID() != null) { if (target.canTarget(response.getUUID(), source, game)) { @@ -250,7 +250,7 @@ public class HumanPlayer extends PlayerImpl { @Override public boolean chooseTargetAmount(Outcome outcome, TargetAmount target, Ability source, Game game) { while (!abort) { - game.fireSelectTargetEvent(playerId, target.getMessage() + "\n Amount remaining:" + target.getAmountRemaining(), target.isRequired()); + game.fireSelectTargetEvent(playerId, target.getMessage() + "\n Amount remaining:" + target.getAmountRemaining(), target.possibleTargets(source==null?null:source.getId(), playerId, game), target.isRequired()); waitForResponse(); if (response.getUUID() != null) { if (target.canTarget(response.getUUID(), source, game)) { @@ -421,7 +421,7 @@ public class HumanPlayer extends PlayerImpl { protected void selectCombatGroup(UUID blockerId, Game game) { TargetAttackingCreature target = new TargetAttackingCreature(); - game.fireSelectTargetEvent(playerId, "Select attacker to block", target.isRequired()); + game.fireSelectTargetEvent(playerId, "Select attacker to block", target.possibleTargets(null, playerId, game), target.isRequired()); waitForResponse(); if (response.getBoolean() != null) { return; diff --git a/Mage.Server/plugins/mage-deck-constructed.jar b/Mage.Server/plugins/mage-deck-constructed.jar index f41775255bd..c710247d4e4 100644 Binary files a/Mage.Server/plugins/mage-deck-constructed.jar and b/Mage.Server/plugins/mage-deck-constructed.jar differ diff --git a/Mage.Server/plugins/mage-game-freeforall.jar b/Mage.Server/plugins/mage-game-freeforall.jar index 59b39d07087..b37b9531660 100644 Binary files a/Mage.Server/plugins/mage-game-freeforall.jar and b/Mage.Server/plugins/mage-game-freeforall.jar differ diff --git a/Mage.Server/plugins/mage-game-twoplayerduel.jar b/Mage.Server/plugins/mage-game-twoplayerduel.jar index 3cddc1d3e33..4ea1a72214d 100644 Binary files a/Mage.Server/plugins/mage-game-twoplayerduel.jar and b/Mage.Server/plugins/mage-game-twoplayerduel.jar differ diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index 5af375336e5..a1bcb78999b 100644 Binary files a/Mage.Server/plugins/mage-player-ai.jar and b/Mage.Server/plugins/mage-player-ai.jar differ diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index 6ec2d2a440a..8e17983a2a4 100644 Binary files a/Mage.Server/plugins/mage-player-aiminimax.jar and b/Mage.Server/plugins/mage-player-aiminimax.jar differ diff --git a/Mage.Server/plugins/mage-player-human.jar b/Mage.Server/plugins/mage-player-human.jar index 09b3ca52c52..69755666c2a 100644 Binary files a/Mage.Server/plugins/mage-player-human.jar and b/Mage.Server/plugins/mage-player-human.jar differ diff --git a/Mage.Server/src/main/java/mage/server/game/GameController.java b/Mage.Server/src/main/java/mage/server/game/GameController.java index dc3ee1f2bb3..2615cfd5abb 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameController.java +++ b/Mage.Server/src/main/java/mage/server/game/GameController.java @@ -124,7 +124,7 @@ public class GameController implements GameCallback { ask(event.getPlayerId(), event.getMessage()); break; case PICK_TARGET: - target(event.getPlayerId(), event.getMessage(), event.getCards(), event.isRequired()); + target(event.getPlayerId(), event.getMessage(), event.getCards(), event.getTargets(), event.isRequired()); break; case PICK_ABILITY: target(event.getPlayerId(), event.getMessage(), event.getAbilities(), event.isRequired()); @@ -317,19 +317,19 @@ public class GameController implements GameCallback { informOthers(playerId); } - private synchronized void target(UUID playerId, String question, Cards cards, boolean required) { + private synchronized void target(UUID playerId, String question, Cards cards, Set targets, boolean required) { if (gameSessions.containsKey(playerId)) { if (cards != null) - gameSessions.get(playerId).target(question, new CardsView(cards.getCards(game)), required, getGameView(playerId)); + gameSessions.get(playerId).target(question, new CardsView(cards.getCards(game)), targets, required, getGameView(playerId)); else - gameSessions.get(playerId).target(question, new CardsView(), required, getGameView(playerId)); + gameSessions.get(playerId).target(question, new CardsView(), targets, required, getGameView(playerId)); } informOthers(playerId); } private synchronized void target(UUID playerId, String question, Collection abilities, boolean required) { if (gameSessions.containsKey(playerId)) - gameSessions.get(playerId).target(question, new CardsView(abilities, game.getState()), required, getGameView(playerId)); + gameSessions.get(playerId).target(question, new CardsView(abilities, game.getState()), null, required, getGameView(playerId)); informOthers(playerId); } diff --git a/Mage.Server/src/main/java/mage/server/game/GameSession.java b/Mage.Server/src/main/java/mage/server/game/GameSession.java index 238a3f1a7a6..687176a8481 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameSession.java +++ b/Mage.Server/src/main/java/mage/server/game/GameSession.java @@ -71,12 +71,12 @@ public class GameSession extends GameWatcher { } } - public void target(final String question, final CardsView cardView, final boolean required, final GameView gameView) { + public void target(final String question, final CardsView cardView, final Set targets, final boolean required, final GameView gameView) { if (!killed) { setupTimeout(); Session session = SessionManager.getInstance().getSession(sessionId); if (session != null) - session.fireCallback(new ClientCallback("gameTarget", new GameClientMessage(gameView, question, cardView, required))); + session.fireCallback(new ClientCallback("gameTarget", new GameClientMessage(gameView, question, cardView, targets, required))); } } diff --git a/Mage/src/mage/game/Game.java b/Mage/src/mage/game/Game.java index 7ecb3b88a28..024188000b3 100644 --- a/Mage/src/mage/game/Game.java +++ b/Mage/src/mage/game/Game.java @@ -109,7 +109,7 @@ public interface Game extends MageItem, Serializable { public void addPlayerQueryEventListener(Listener listener); public void fireAskPlayerEvent(UUID playerId, String message); public void fireChooseEvent(UUID playerId, Choice choice); - public void fireSelectTargetEvent(UUID playerId, String message, boolean required); + public void fireSelectTargetEvent(UUID playerId, String message, Set targets, boolean required); public void fireSelectTargetEvent(UUID playerId, String message, Cards cards, boolean required); public void fireSelectTargetEvent(UUID playerId, String message, TriggeredAbilities abilities, boolean required); public void fireRevealCardsEvent(String message, Cards cards); diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 53a6bb7df99..c62965f8963 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -715,8 +715,8 @@ public abstract class GameImpl> implements Game, Serializa } @Override - public void fireSelectTargetEvent(UUID playerId, String message, boolean required) { - playerQueryEventSource.target(playerId, message, required); + public void fireSelectTargetEvent(UUID playerId, String message, Set targets, boolean required) { + playerQueryEventSource.target(playerId, message, targets, required); } @Override diff --git a/Mage/src/mage/game/events/PlayerQueryEvent.java b/Mage/src/mage/game/events/PlayerQueryEvent.java index 6915d497dca..08281e159a4 100644 --- a/Mage/src/mage/game/events/PlayerQueryEvent.java +++ b/Mage/src/mage/game/events/PlayerQueryEvent.java @@ -51,6 +51,7 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri private String message; private Collection abilities; private Set choices; + private Set targets; private Cards cards; private QueryType queryType; private UUID playerId; @@ -58,13 +59,14 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri private int min; private int max; - private PlayerQueryEvent(UUID playerId, String message, Collection abilities, Set choices, Cards cards, QueryType queryType, int min, int max, boolean required) { + private PlayerQueryEvent(UUID playerId, String message, Collection abilities, Set choices, Set targets, Cards cards, QueryType queryType, int min, int max, boolean required) { super(playerId); this.queryType = queryType; this.message = message; this.playerId = playerId; this.abilities = abilities; this.choices = choices; + this.targets = targets; this.cards = cards; this.required = required; this.min = min; @@ -72,46 +74,46 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri } public static PlayerQueryEvent askEvent(UUID playerId, String message) { - return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.ASK, 0, 0, false); + return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.ASK, 0, 0, false); } public static PlayerQueryEvent chooseAbilityEvent(UUID playerId, String message, Collection choices) { - return new PlayerQueryEvent(playerId, message, choices, null, null, QueryType.CHOOSE_ABILITY, 0, 0, false); + return new PlayerQueryEvent(playerId, message, choices, null, null, null, QueryType.CHOOSE_ABILITY, 0, 0, false); } public static PlayerQueryEvent chooseEvent(UUID playerId, String message, Set choices) { - return new PlayerQueryEvent(playerId, message, null, choices, null, QueryType.CHOOSE, 0, 0, false); + return new PlayerQueryEvent(playerId, message, null, choices, null, null, QueryType.CHOOSE, 0, 0, false); } - public static PlayerQueryEvent targetEvent(UUID playerId, String message, boolean required) { - return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.PICK_TARGET, 0, 0, required); + public static PlayerQueryEvent targetEvent(UUID playerId, String message, Set targets, boolean required) { + return new PlayerQueryEvent(playerId, message, null, null, targets, null, QueryType.PICK_TARGET, 0, 0, required); } public static PlayerQueryEvent targetEvent(UUID playerId, String message, Cards cards, boolean required) { - return new PlayerQueryEvent(playerId, message, null, null, cards, QueryType.PICK_TARGET, 0, 0, required); + return new PlayerQueryEvent(playerId, message, null, null, null, cards, QueryType.PICK_TARGET, 0, 0, required); } public static PlayerQueryEvent targetEvent(UUID playerId, String message, TriggeredAbilities abilities, boolean required) { - return new PlayerQueryEvent(playerId, message, abilities, null, null, QueryType.PICK_ABILITY, 0, 0, required); + return new PlayerQueryEvent(playerId, message, abilities, null, null, null, QueryType.PICK_ABILITY, 0, 0, required); } public static PlayerQueryEvent selectEvent(UUID playerId, String message) { - return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.SELECT, 0, 0, false); + return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.SELECT, 0, 0, false); } public static PlayerQueryEvent playManaEvent(UUID playerId, String message) { - return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.PLAY_MANA, 0, 0, false); + return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.PLAY_MANA, 0, 0, false); } public static PlayerQueryEvent playXManaEvent(UUID playerId, String message) { - return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.PLAY_X_MANA, 0, 0, false); + return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.PLAY_X_MANA, 0, 0, false); } public static PlayerQueryEvent amountEvent(UUID playerId, String message, int min , int max) { - return new PlayerQueryEvent(playerId, message, null, null, null, QueryType.AMOUNT, min, max, false); + return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.AMOUNT, min, max, false); } public static PlayerQueryEvent lookEvent(UUID playerId, String message, Cards cards) { - return new PlayerQueryEvent(playerId, message, null, null, cards, QueryType.LOOK, 0, 0, false); + return new PlayerQueryEvent(playerId, message, null, null, cards, null, QueryType.LOOK, 0, 0, false); } public String getMessage() { @@ -130,6 +132,10 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri return choices; } + public Set getTargets() { + return targets; + } + public UUID getPlayerId() { return playerId; } diff --git a/Mage/src/mage/game/events/PlayerQueryEventSource.java b/Mage/src/mage/game/events/PlayerQueryEventSource.java index d7bb42fd8b7..1f939a25dcb 100644 --- a/Mage/src/mage/game/events/PlayerQueryEventSource.java +++ b/Mage/src/mage/game/events/PlayerQueryEventSource.java @@ -61,8 +61,8 @@ public class PlayerQueryEventSource implements EventSource, Se dispatcher.fireEvent(PlayerQueryEvent.chooseAbilityEvent(playerId, message, choices)); } - public void target(UUID playerId, String message, boolean required) { - dispatcher.fireEvent(PlayerQueryEvent.targetEvent(playerId, message, required)); + public void target(UUID playerId, String message, Set targets, boolean required) { + dispatcher.fireEvent(PlayerQueryEvent.targetEvent(playerId, message, targets, required)); } public void target(UUID playerId, String message, Cards cards, boolean required) { diff --git a/Mage/src/mage/target/Target.java b/Mage/src/mage/target/Target.java index 3b73f189343..d02e3716592 100644 --- a/Mage/src/mage/target/Target.java +++ b/Mage/src/mage/target/Target.java @@ -30,6 +30,7 @@ package mage.target; import java.io.Serializable; import java.util.List; +import java.util.Set; import java.util.UUID; import mage.Constants.Outcome; import mage.Constants.Zone; @@ -48,7 +49,7 @@ public interface Target extends Serializable { public void clearChosen(); public boolean isNotTarget(); public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game); - public List possibleTargets(UUID sourceId, UUID sourceControllerId, Game game); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game); public boolean choose(Outcome outcome, UUID playerId, Game game); public boolean chooseTarget(Outcome outcome, UUID playerId, Ability source, Game game); public String getMessage(); diff --git a/Mage/src/mage/target/TargetCard.java b/Mage/src/mage/target/TargetCard.java index e18cc8dfb64..6e5450e84e7 100644 --- a/Mage/src/mage/target/TargetCard.java +++ b/Mage/src/mage/target/TargetCard.java @@ -28,10 +28,8 @@ package mage.target; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.Constants.Zone; import mage.cards.Card; @@ -78,23 +76,6 @@ public class TargetCard> extends TargetObject= minNumberOfTargets; -// if (!player.chooseTarget(cards, this, game)) { -// return chosen; -// } -// chosen = targets.size() >= minNumberOfTargets; -// } -// while (!doneChosing()) { -// if (!player.chooseTarget(cards, this, game)) { -// break; -// } -// } -// return chosen = true; -// } - @Override public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) { @@ -122,30 +103,30 @@ public class TargetCard> extends TargetObject possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - Map possibleTargets = new HashMap(); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = new HashSet(); Player player = game.getPlayer(sourceControllerId); if (player != null) { switch (zone) { case HAND: for (Card card: player.getHand().getCards(filter, game)) { - possibleTargets.put(card.getName(), card.getId()); + possibleTargets.add(card.getId()); } break; case GRAVEYARD: for (Card card: player.getGraveyard().getCards(filter, game)) { - possibleTargets.put(card.getName(), card.getId()); + possibleTargets.add(card.getId()); } break; case LIBRARY: for (Card card: player.getLibrary().getUniqueCards(game)) { if (filter.match(card)) - possibleTargets.put(card.getName(), card.getId()); + possibleTargets.add(card.getId()); } break; } } - return new ArrayList(possibleTargets.values()); + return possibleTargets; } public boolean canTarget(UUID id, Cards cards, Game game) { diff --git a/Mage/src/mage/target/TargetPermanent.java b/Mage/src/mage/target/TargetPermanent.java index 28bdf6fb9bf..ed3a1e7d04d 100644 --- a/Mage/src/mage/target/TargetPermanent.java +++ b/Mage/src/mage/target/TargetPermanent.java @@ -28,10 +28,8 @@ package mage.target; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.Constants.Zone; import mage.MageObject; @@ -111,15 +109,15 @@ public class TargetPermanent> extends TargetObject< } @Override - public List possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - Map possibleTargets = new HashMap(); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = new HashSet(); MageObject targetSource = game.getObject(sourceId); for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, sourceControllerId, game)) { if (permanent.canBeTargetedBy(targetSource)) { - possibleTargets.put(permanent.getValue().hashCode(), permanent.getId()); + possibleTargets.add(permanent.getId()); } } - return new ArrayList(possibleTargets.values()); + return possibleTargets; } @Override diff --git a/Mage/src/mage/target/TargetPlayer.java b/Mage/src/mage/target/TargetPlayer.java index eb0c53047e5..d88833a5347 100644 --- a/Mage/src/mage/target/TargetPlayer.java +++ b/Mage/src/mage/target/TargetPlayer.java @@ -28,8 +28,8 @@ package mage.target; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; @@ -88,8 +88,8 @@ public class TargetPlayer> extends TargetImpl possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - List possibleTargets = new ArrayList(); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = new HashSet(); MageObject targetSource = game.getObject(sourceId); for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) { Player player = game.getPlayer(playerId); diff --git a/Mage/src/mage/target/TargetSpell.java b/Mage/src/mage/target/TargetSpell.java index 7097d57382f..42cce3df6eb 100644 --- a/Mage/src/mage/target/TargetSpell.java +++ b/Mage/src/mage/target/TargetSpell.java @@ -28,8 +28,8 @@ package mage.target; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.Constants.Zone; import mage.abilities.Ability; @@ -99,8 +99,8 @@ public class TargetSpell extends TargetObject { } @Override - public List possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - List possibleTargets = new ArrayList(); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = new HashSet(); for (StackObject stackObject: game.getStack()) { if (stackObject instanceof Spell && game.getPlayer(sourceControllerId).getInRange().contains(stackObject.getControllerId()) && filter.match((Spell)stackObject)) { possibleTargets.add(stackObject.getId()); diff --git a/Mage/src/mage/target/TargetStackObject.java b/Mage/src/mage/target/TargetStackObject.java index 76f5dedc6ee..316d763417c 100644 --- a/Mage/src/mage/target/TargetStackObject.java +++ b/Mage/src/mage/target/TargetStackObject.java @@ -28,8 +28,8 @@ package mage.target; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.Constants.Zone; import mage.abilities.Ability; @@ -98,8 +98,8 @@ public class TargetStackObject extends TargetObject { } @Override - public List possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - List possibleTargets = new ArrayList(); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = new HashSet(); for (StackObject stackObject: game.getStack()) { if (game.getPlayer(sourceControllerId).getInRange().contains(stackObject.getControllerId()) && filter.match(stackObject)) { possibleTargets.add(stackObject.getId()); diff --git a/Mage/src/mage/target/common/TargetCreatureOrPlayer.java b/Mage/src/mage/target/common/TargetCreatureOrPlayer.java index ac539a77eea..3e218d35e91 100644 --- a/Mage/src/mage/target/common/TargetCreatureOrPlayer.java +++ b/Mage/src/mage/target/common/TargetCreatureOrPlayer.java @@ -28,10 +28,8 @@ package mage.target.common; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.Constants.Zone; import mage.MageObject; @@ -132,21 +130,21 @@ public class TargetCreatureOrPlayer extends TargetImpl { } @Override - public List possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - Map possibleTargets = new HashMap(); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = new HashSet(); MageObject targetSource = game.getObject(sourceId); for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) { Player player = game.getPlayer(playerId); if (player != null && player.canBeTargetedBy(targetSource) && filter.match(player)) { - possibleTargets.put(player.hashCode(), playerId); + possibleTargets.add(playerId); } } for (Permanent permanent: game.getBattlefield().getActivePermanents(FilterCreaturePermanent.getDefault(), sourceControllerId, game)) { if (permanent.canBeTargetedBy(targetSource) && filter.match(permanent, sourceControllerId, game)) { - possibleTargets.put(permanent.getValue().hashCode(), permanent.getId()); + possibleTargets.add(permanent.getId()); } } - return new ArrayList(possibleTargets.values()); + return possibleTargets; } @Override diff --git a/Mage/src/mage/target/common/TargetCreatureOrPlayerAmount.java b/Mage/src/mage/target/common/TargetCreatureOrPlayerAmount.java index ffd0a53683c..507fb70c561 100644 --- a/Mage/src/mage/target/common/TargetCreatureOrPlayerAmount.java +++ b/Mage/src/mage/target/common/TargetCreatureOrPlayerAmount.java @@ -28,10 +28,8 @@ package mage.target.common; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.HashSet; +import java.util.Set; import java.util.UUID; import mage.Constants.Zone; import mage.MageObject; @@ -123,21 +121,21 @@ public class TargetCreatureOrPlayerAmount extends TargetAmount possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - Map possibleTargets = new HashMap(); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = new HashSet(); MageObject targetSource = game.getObject(sourceId); for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) { Player player = game.getPlayer(playerId); if (player != null && player.canBeTargetedBy(targetSource) && filter.match(player)) { - possibleTargets.put(player.hashCode(), playerId); + possibleTargets.add(playerId); } } for (Permanent permanent: game.getBattlefield().getActivePermanents(FilterCreaturePermanent.getDefault(), sourceControllerId, game)) { if (permanent.canBeTargetedBy(targetSource) && filter.match(permanent, sourceControllerId, game)) { - possibleTargets.put(permanent.getValue().hashCode(), permanent.getId()); + possibleTargets.add(permanent.getId()); } } - return new ArrayList(possibleTargets.values()); + return possibleTargets; } @Override diff --git a/Mage/src/mage/target/common/TargetDefender.java b/Mage/src/mage/target/common/TargetDefender.java index f14548ed0e3..fbf43277e1b 100644 --- a/Mage/src/mage/target/common/TargetDefender.java +++ b/Mage/src/mage/target/common/TargetDefender.java @@ -28,11 +28,9 @@ package mage.target.common; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; import java.util.Set; import java.util.UUID; -import mage.Constants.CardType; import mage.Constants.Zone; import mage.MageObject; import mage.abilities.Ability; @@ -104,8 +102,8 @@ public class TargetDefender extends TargetImpl { } @Override - public List possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { - List possibleTargets = new ArrayList(); + public Set possibleTargets(UUID sourceId, UUID sourceControllerId, Game game) { + Set possibleTargets = new HashSet(); MageObject targetSource = game.getObject(sourceId); for (UUID playerId: game.getPlayer(sourceControllerId).getInRange()) { Player player = game.getPlayer(playerId);