diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index 517e175d149..7238c0ab417 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -164,7 +164,7 @@ public class ComputerPlayer extends PlayerImpl { boolean required = target.isRequired(sourceId, game); Set possibleTargets = target.possibleTargets(abilityControllerId, source, game); - if (possibleTargets.isEmpty() || target.getTargets().size() >= target.getNumberOfTargets()) { + if (possibleTargets.isEmpty() || target.getTargets().size() >= target.getMinNumberOfTargets()) { required = false; } @@ -251,7 +251,7 @@ public class ComputerPlayer extends PlayerImpl { for (Permanent permanent : targets) { if (target.canTarget(abilityControllerId, permanent.getId(), source, game) && !target.getTargets().contains(permanent.getId())) { // stop to add targets if not needed and outcome is no advantage for AI player - if (target.getNumberOfTargets() == target.getTargets().size()) { + if (target.getMinNumberOfTargets() == target.getTargets().size()) { if (outcome.isGood() && hasOpponent(permanent.getControllerId(), game)) { return true; } @@ -348,7 +348,7 @@ public class ComputerPlayer extends PlayerImpl { target.add(randomOpponentId, game); return true; } - if (!target.isRequired(sourceId, game) || target.getNumberOfTargets() == 0) { + if (!target.isRequired(sourceId, game) || target.getMinNumberOfTargets() == 0) { return false; } if (target.canTarget(abilityControllerId, randomOpponentId, source, game)) { @@ -548,7 +548,7 @@ public class ComputerPlayer extends PlayerImpl { boolean required = target.isRequired(sourceId, game); Set possibleTargets = target.possibleTargets(abilityControllerId, source, game); - if (possibleTargets.isEmpty() || target.getTargets().size() >= target.getNumberOfTargets()) { + if (possibleTargets.isEmpty() || target.getTargets().size() >= target.getMinNumberOfTargets()) { required = false; } @@ -672,7 +672,7 @@ public class ComputerPlayer extends PlayerImpl { for (Permanent permanent : targets) { if (target.canTarget(abilityControllerId, permanent.getId(), source, game)) { target.addTarget(permanent.getId(), source, game); - if (target.getNumberOfTargets() <= target.getTargets().size() && (!outcome.isGood() || target.getMaxNumberOfTargets() <= target.getTargets().size())) { + if (target.getMinNumberOfTargets() <= target.getTargets().size() && (!outcome.isGood() || target.getMaxNumberOfTargets() <= target.getTargets().size())) { return true; } } @@ -2051,9 +2051,9 @@ public class ComputerPlayer extends PlayerImpl { cardChoices.remove(card); } else { // We don't have any valid target to choose so stop choosing - return target.getTargets().size() >= target.getNumberOfTargets(); + return target.getTargets().size() >= target.getMinNumberOfTargets(); } - if (outcome == Outcome.Neutral && target.getTargets().size() > target.getNumberOfTargets() + (target.getMaxNumberOfTargets() - target.getNumberOfTargets()) / 2) { + if (outcome == Outcome.Neutral && target.getTargets().size() > target.getMinNumberOfTargets() + (target.getMaxNumberOfTargets() - target.getMinNumberOfTargets()) / 2) { return true; } } @@ -2082,9 +2082,9 @@ public class ComputerPlayer extends PlayerImpl { cardChoices.remove(card); // selectCard don't remove cards (only on second+ tries) } else { // We don't have any valid target to choose so stop choosing - return target.getTargets().size() >= target.getNumberOfTargets(); + return target.getTargets().size() >= target.getMinNumberOfTargets(); } - if (outcome == Outcome.Neutral && target.getTargets().size() > target.getNumberOfTargets() + (target.getMaxNumberOfTargets() - target.getNumberOfTargets()) / 2) { + if (outcome == Outcome.Neutral && target.getTargets().size() > target.getMinNumberOfTargets() + (target.getMaxNumberOfTargets() - target.getMinNumberOfTargets()) / 2) { return true; } } diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index 34e9baec448..5d73229b5fb 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -699,11 +699,11 @@ public class HumanPlayer extends PlayerImpl { while (canRespond()) { Set possibleTargetIds = target.possibleTargets(abilityControllerId, source, game); if (possibleTargetIds == null || possibleTargetIds.isEmpty()) { - return target.getTargets().size() >= target.getNumberOfTargets(); + return target.getTargets().size() >= target.getMinNumberOfTargets(); } boolean required = target.isRequired(source != null ? source.getSourceId() : null, game); - if (target.getTargets().size() >= target.getNumberOfTargets()) { + if (target.getTargets().size() >= target.getMinNumberOfTargets()) { required = false; } @@ -770,7 +770,7 @@ public class HumanPlayer extends PlayerImpl { // send other command like cancel or done (??sends other commands like concede??) // auto-complete on all selected - if (target.getTargets().size() >= target.getNumberOfTargets()) { + if (target.getTargets().size() >= target.getMinNumberOfTargets()) { return true; } @@ -802,7 +802,7 @@ public class HumanPlayer extends PlayerImpl { Set possibleTargetIds = target.possibleTargets(abilityControllerId, source, game); boolean required = target.isRequired(source != null ? source.getSourceId() : null, game); if (possibleTargetIds.isEmpty() - || target.getTargets().size() >= target.getNumberOfTargets()) { + || target.getTargets().size() >= target.getMinNumberOfTargets()) { required = false; } @@ -840,7 +840,7 @@ public class HumanPlayer extends PlayerImpl { } } } else { - if (target.getTargets().size() >= target.getNumberOfTargets()) { + if (target.getTargets().size() >= target.getMinNumberOfTargets()) { return true; } if (!required) { @@ -856,7 +856,7 @@ public class HumanPlayer extends PlayerImpl { if (options == null) { options = new HashMap<>(); } - if (target.getTargets().size() >= target.getNumberOfTargets() + if (target.getTargets().size() >= target.getMinNumberOfTargets() && !options.containsKey("UI.right.btn.text")) { options.put("UI.right.btn.text", "Done"); } @@ -887,7 +887,7 @@ public class HumanPlayer extends PlayerImpl { boolean required = target.isRequired(source != null ? source.getSourceId() : null, game); int count = cards.count(target.getFilter(), abilityControllerId, source, game); if (count == 0 - || target.getTargets().size() >= target.getNumberOfTargets()) { + || target.getTargets().size() >= target.getMinNumberOfTargets()) { required = false; } @@ -933,7 +933,7 @@ public class HumanPlayer extends PlayerImpl { } } } else { - if (target.getTargets().size() >= target.getNumberOfTargets()) { + if (target.getTargets().size() >= target.getMinNumberOfTargets()) { return true; } if (!required) { @@ -968,7 +968,7 @@ public class HumanPlayer extends PlayerImpl { boolean required = target.isRequiredExplicitlySet() ? target.isRequired() : target.isRequired(source); int count = cards.count(target.getFilter(), abilityControllerId, source, game); if (count == 0 - || target.getTargets().size() >= target.getNumberOfTargets()) { + || target.getTargets().size() >= target.getMinNumberOfTargets()) { required = false; } @@ -1013,7 +1013,7 @@ public class HumanPlayer extends PlayerImpl { } } } else { - if (target.getTargets().size() >= target.getNumberOfTargets()) { + if (target.getTargets().size() >= target.getMinNumberOfTargets()) { return true; } if (!required) { @@ -1061,7 +1061,7 @@ public class HumanPlayer extends PlayerImpl { Set possibleTargetIds = target.possibleTargets(abilityControllerId, source, game); boolean required = target.isRequired(source.getSourceId(), game); if (possibleTargetIds.isEmpty() - || target.getSize() >= target.getNumberOfTargets()) { + || target.getSize() >= target.getMinNumberOfTargets()) { required = false; } diff --git a/Mage.Sets/src/mage/cards/a/ArchdruidsCharm.java b/Mage.Sets/src/mage/cards/a/ArchdruidsCharm.java index a50c5b90541..7f9b0caa593 100644 --- a/Mage.Sets/src/mage/cards/a/ArchdruidsCharm.java +++ b/Mage.Sets/src/mage/cards/a/ArchdruidsCharm.java @@ -137,7 +137,7 @@ class ArchdruidsCharmMode1Effect extends SearchEffect { private void setText() { StringBuilder sb = new StringBuilder(); sb.append("Search your library for "); - if (target.getNumberOfTargets() == 0 && target.getMaxNumberOfTargets() > 0) { + if (target.getMinNumberOfTargets() == 0 && target.getMaxNumberOfTargets() > 0) { sb.append("up to ").append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' '); sb.append(target.getTargetName()).append(revealCards ? " and reveal them." : "."); } else { diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 453ddb9c8b3..4f5c180df56 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -539,7 +539,7 @@ public class TestPlayer implements Player { } // found, can use as target - if (currentTarget.getNumberOfTargets() == 1) { + if (currentTarget.getMinNumberOfTargets() == 1) { currentTarget.clearChosen(); } if (currentTarget.getOriginalTarget() instanceof TargetCreaturePermanentAmount) { diff --git a/Mage/src/main/java/mage/abilities/costs/common/DiscardTargetCost.java b/Mage/src/main/java/mage/abilities/costs/common/DiscardTargetCost.java index 70d268f8dd5..83b12475790 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/DiscardTargetCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/DiscardTargetCost.java @@ -47,7 +47,7 @@ public class DiscardTargetCost extends CostImpl { if (player == null) { return false; } - int amount = this.getTargets().get(0).getNumberOfTargets(); + int amount = this.getTargets().get(0).getMinNumberOfTargets(); if (randomDiscard) { this.cards.addAll(player.discard(amount, true, true, source, game).getCards(game)); } else if (this.getTargets().choose(Outcome.Discard, controllerId, source.getSourceId(), source, game)) { diff --git a/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java b/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java index e3b234cb4e2..552ab89af2d 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/ExileFromGraveCost.java @@ -33,9 +33,9 @@ public class ExileFromGraveCost extends CostImpl { this.addTarget(target); if (target.getMaxNumberOfTargets() > 1) { this.text = "exile " - + (target.getNumberOfTargets() == 1 + + (target.getMinNumberOfTargets() == 1 && target.getMaxNumberOfTargets() == Integer.MAX_VALUE ? "one or more" - : ((target.getNumberOfTargets() < target.getMaxNumberOfTargets() ? "up to " : "")) + : ((target.getMinNumberOfTargets() < target.getMaxNumberOfTargets() ? "up to " : "")) + CardUtil.numberToText(target.getMaxNumberOfTargets())) + ' ' + target.getTargetName(); } else { diff --git a/Mage/src/main/java/mage/abilities/costs/common/ReturnToHandChosenControlledPermanentCost.java b/Mage/src/main/java/mage/abilities/costs/common/ReturnToHandChosenControlledPermanentCost.java index 5d2144e5244..640f9c7b0d3 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/ReturnToHandChosenControlledPermanentCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/ReturnToHandChosenControlledPermanentCost.java @@ -25,7 +25,7 @@ public class ReturnToHandChosenControlledPermanentCost extends CostImpl { public ReturnToHandChosenControlledPermanentCost(TargetControlledPermanent target) { target.withNotTarget(true); this.addTarget(target); - if (target.getMaxNumberOfTargets() > 1 && target.getMaxNumberOfTargets() == target.getNumberOfTargets()) { + if (target.getMaxNumberOfTargets() > 1 && target.getMaxNumberOfTargets() == target.getMinNumberOfTargets()) { this.text = "return " + CardUtil.numberToText(target.getMaxNumberOfTargets()) + ' ' + target.getTargetName() + (target.getTargetName().endsWith(" you control") ? "" : " you control") diff --git a/Mage/src/main/java/mage/abilities/costs/common/RevealTargetFromHandCost.java b/Mage/src/main/java/mage/abilities/costs/common/RevealTargetFromHandCost.java index bc0895c69c3..6ce286b3e5e 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/RevealTargetFromHandCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/RevealTargetFromHandCost.java @@ -29,7 +29,7 @@ public class RevealTargetFromHandCost extends CostImpl { public RevealTargetFromHandCost(TargetCardInHand target) { this.addTarget(target); - this.allowNoReveal = target.getNumberOfTargets() == 0; + this.allowNoReveal = target.getMinNumberOfTargets() == 0; this.text = "reveal " + target.getDescription(); this.revealedCards = new ArrayList<>(); } @@ -62,7 +62,7 @@ public class RevealTargetFromHandCost extends CostImpl { MageObject baseObject = game.getBaseObject(source.getSourceId()); player.revealCards(baseObject == null ? "card cost" : baseObject.getIdName(), cards, game); } - if (this.getTargets().get(0).getNumberOfTargets() <= numberCardsRevealed) { + if (this.getTargets().get(0).getMinNumberOfTargets() <= numberCardsRevealed) { paid = true; // e.g. for optional additional costs. example: Dragonlord's Prerogative also true if 0 cards shown return paid; } diff --git a/Mage/src/main/java/mage/abilities/costs/common/SacrificeTargetCost.java b/Mage/src/main/java/mage/abilities/costs/common/SacrificeTargetCost.java index 4fa11cbffc4..e64d4a83a17 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/SacrificeTargetCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/SacrificeTargetCost.java @@ -67,7 +67,7 @@ public class SacrificeTargetCost extends CostImpl implements SacrificeCost { addSacrificeTarget(game, permanent); paid |= permanent.sacrifice(source, game); } - if (!paid && this.getTargets().get(0).getNumberOfTargets() == 0) { + if (!paid && this.getTargets().get(0).getMinNumberOfTargets() == 0) { paid = true; // e.g. for Devouring Rage } } @@ -88,7 +88,7 @@ public class SacrificeTargetCost extends CostImpl implements SacrificeCost { return false; } int validTargets = 0; - int neededTargets = this.getTargets().get(0).getNumberOfTargets(); + int neededTargets = this.getTargets().get(0).getMinNumberOfTargets(); for (Permanent permanent : game.getBattlefield().getActivePermanents(((TargetPermanent) this.getTargets().get(0)).getFilter(), controllerId, source, game)) { if (controller.canPaySacrificeCost(permanent, source, controllerId, game)) { validTargets++; @@ -114,11 +114,11 @@ public class SacrificeTargetCost extends CostImpl implements SacrificeCost { if (target.getMinNumberOfTargets() != target.getMaxNumberOfTargets()) { return target.getTargetName(); } - if (target.getNumberOfTargets() == 1 + if (target.getMinNumberOfTargets() == 1 || target.getTargetName().startsWith("a ") || target.getTargetName().startsWith("an ")) { return CardUtil.addArticle(target.getTargetName()); } - return CardUtil.numberToText(target.getNumberOfTargets()) + ' ' + target.getTargetName(); + return CardUtil.numberToText(target.getMinNumberOfTargets()) + ' ' + target.getTargetName(); } } diff --git a/Mage/src/main/java/mage/abilities/costs/common/TapTargetCost.java b/Mage/src/main/java/mage/abilities/costs/common/TapTargetCost.java index 4a5e1b3d4b4..0d8a5b77059 100644 --- a/Mage/src/main/java/mage/abilities/costs/common/TapTargetCost.java +++ b/Mage/src/main/java/mage/abilities/costs/common/TapTargetCost.java @@ -24,7 +24,7 @@ public class TapTargetCost extends CostImpl { this.target = target; this.target.withNotTarget(true); // costs are never targeted this.target.setRequired(false); // can be cancel by user - this.text = "tap " + (target.getNumberOfTargets() > 1 + this.text = "tap " + (target.getMinNumberOfTargets() > 1 ? CardUtil.numberToText(target.getMaxNumberOfTargets()) + ' ' + target.getTargetName() : CardUtil.addArticle(target.getTargetName())); } @@ -47,7 +47,7 @@ public class TapTargetCost extends CostImpl { permanents.add(permanent); } } - if (target.getNumberOfTargets() == 0) { + if (target.getMinNumberOfTargets() == 0) { paid = true; // e.g. Aryel with X = 0 } source.getEffects().setValue("tappedPermanents", permanents); diff --git a/Mage/src/main/java/mage/abilities/effects/common/PutOnLibraryTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PutOnLibraryTargetEffect.java index c980b60f011..43e5c36323b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PutOnLibraryTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PutOnLibraryTargetEffect.java @@ -132,8 +132,8 @@ public class PutOnLibraryTargetEffect extends OneShotEffect { sb.append("put "); if (target.getMaxNumberOfTargets() == 0 || target.getMaxNumberOfTargets() == Integer.MAX_VALUE) { sb.append("any number of "); - } else if (target.getMaxNumberOfTargets() != 1 || target.getNumberOfTargets() != 1) { - if (target.getMaxNumberOfTargets() > target.getNumberOfTargets()) { + } else if (target.getMaxNumberOfTargets() != 1 || target.getMinNumberOfTargets() != 1) { + if (target.getMaxNumberOfTargets() > target.getMinNumberOfTargets()) { sb.append("up to "); } sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' '); diff --git a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java index 4323e3b2115..152345b76e6 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java @@ -89,7 +89,7 @@ public class ReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEffect if (target.getMaxNumberOfTargets() == Integer.MAX_VALUE && target.getMinNumberOfTargets() == 0) { sb.append("any number of "); - } else if (target.getMaxNumberOfTargets() != target.getNumberOfTargets()) { + } else if (target.getMaxNumberOfTargets() != target.getMinNumberOfTargets()) { sb.append("up to "); sb.append(CardUtil.numberToText(target.getMaxNumberOfTargets())); sb.append(' '); diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInHandOrOnBattlefieldEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInHandOrOnBattlefieldEffect.java index 8f7a28686c8..33af7b61be5 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInHandOrOnBattlefieldEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryPutInHandOrOnBattlefieldEffect.java @@ -87,7 +87,7 @@ public class SearchLibraryPutInHandOrOnBattlefieldEffect extends SearchEffect { private void setText() { StringBuilder sb = new StringBuilder(); sb.append("search your library for "); - if (target.getNumberOfTargets() == 0 && target.getMaxNumberOfTargets() > 0) { + if (target.getMinNumberOfTargets() == 0 && target.getMaxNumberOfTargets() > 0) { sb.append("up to ").append(CardUtil.numberToText(target.getMaxNumberOfTargets())).append(' '); sb.append(target.getTargetName()).append(revealCards ? ", reveal them," : "").append(" and put them into your hand"); } else { diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 7ff0e1610a7..3904856a059 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -4014,7 +4014,6 @@ public abstract class GameImpl implements Game { playerObject.resetStoredBookmark(this); playerObject.resetPlayerPassedActions(); playerObject.abort(); - } } fireUpdatePlayersEvent(); diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 1ec2badc1b7..fd761572785 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -2932,7 +2932,7 @@ public abstract class PlayerImpl implements Player, Serializable { count = Math.min(searchingLibrary.count(target.getFilter(), game), librarySearchLimit); } - if (count < target.getNumberOfTargets()) { + if (count < target.getMinNumberOfTargets()) { newTarget.setMinNumberOfTargets(count); } diff --git a/Mage/src/main/java/mage/target/Target.java b/Mage/src/main/java/mage/target/Target.java index 92fd3dbea7c..3a29a88a474 100644 --- a/Mage/src/main/java/mage/target/Target.java +++ b/Mage/src/main/java/mage/target/Target.java @@ -129,8 +129,6 @@ public interface Target extends Serializable { int getTargetAmount(UUID targetId); - int getNumberOfTargets(); - int getMinNumberOfTargets(); int getMaxNumberOfTargets(); diff --git a/Mage/src/main/java/mage/target/TargetCard.java b/Mage/src/main/java/mage/target/TargetCard.java index 7e6e8d5a5ac..271a91588ba 100644 --- a/Mage/src/main/java/mage/target/TargetCard.java +++ b/Mage/src/main/java/mage/target/TargetCard.java @@ -63,7 +63,7 @@ public class TargetCard extends TargetObject { public boolean canChoose(UUID sourceControllerId, Ability source, Game game) { UUID sourceId = source != null ? source.getSourceId() : null; int possibleTargets = 0; - if (getNumberOfTargets() == 0) { // if 0 target is valid, the canChoose is always true + if (getMinNumberOfTargets() == 0) { // if 0 target is valid, the canChoose is always true return true; } for (UUID playerId : game.getState().getPlayersInRange(sourceControllerId, game)) { diff --git a/Mage/src/main/java/mage/target/TargetImpl.java b/Mage/src/main/java/mage/target/TargetImpl.java index 0aae5458609..046bf9fa203 100644 --- a/Mage/src/main/java/mage/target/TargetImpl.java +++ b/Mage/src/main/java/mage/target/TargetImpl.java @@ -72,11 +72,6 @@ public abstract class TargetImpl implements Target { this.shouldReportEvents = target.shouldReportEvents; } - @Override - public int getNumberOfTargets() { - return this.minNumberOfTargets; - } - @Override public int getMinNumberOfTargets() { return this.minNumberOfTargets; @@ -234,7 +229,7 @@ public abstract class TargetImpl implements Target { @Override public boolean isChosen(Game game) { - if (getMaxNumberOfTargets() == 0 && getNumberOfTargets() == 0) { + if (getMaxNumberOfTargets() == 0 && getMinNumberOfTargets() == 0) { return true; } return getMaxNumberOfTargets() != 0 && targets.size() == getMaxNumberOfTargets() || chosen; @@ -258,7 +253,7 @@ public abstract class TargetImpl implements Target { if (!targets.containsKey(id)) { targets.put(id, 0); rememberZoneChangeCounter(id, game); - chosen = targets.size() >= getNumberOfTargets(); + chosen = targets.size() >= getMinNumberOfTargets(); } } } @@ -285,7 +280,7 @@ public abstract class TargetImpl implements Target { if (!game.replaceEvent(new TargetEvent(id, source))) { targets.put(id, 0); rememberZoneChangeCounter(id, game); - chosen = targets.size() >= getNumberOfTargets(); + chosen = targets.size() >= getMinNumberOfTargets(); if (!skipEvent && shouldReportEvents) { game.addSimultaneousEvent(GameEvent.getEvent(GameEvent.EventType.TARGETED, id, source, source.getControllerId())); } @@ -323,7 +318,7 @@ public abstract class TargetImpl implements Target { if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.TARGET, id, source, source.getControllerId()))) { targets.put(id, amount); rememberZoneChangeCounter(id, game); - chosen = targets.size() >= getNumberOfTargets(); + chosen = targets.size() >= getMinNumberOfTargets(); if (!skipEvent && shouldReportEvents) { game.fireEvent(GameEvent.getEvent(GameEvent.EventType.TARGETED, id, source, source.getControllerId())); } @@ -341,7 +336,7 @@ public abstract class TargetImpl implements Target { return false; } - chosen = targets.size() >= getNumberOfTargets(); + chosen = targets.size() >= getMinNumberOfTargets(); do { if (!targetController.canRespond()) { return chosen; @@ -349,7 +344,7 @@ public abstract class TargetImpl implements Target { if (!targetController.choose(outcome, this, source, game)) { return chosen; } - chosen = targets.size() >= getNumberOfTargets(); + chosen = targets.size() >= getMinNumberOfTargets(); } while (!isChosen(game) && !doneChoosing(game)); return chosen; } @@ -363,7 +358,7 @@ public abstract class TargetImpl implements Target { List possibleTargets = new ArrayList<>(possibleTargets(playerId, source, game)); - chosen = targets.size() >= getNumberOfTargets(); + chosen = targets.size() >= getMinNumberOfTargets(); do { if (!targetController.canRespond()) { return chosen; @@ -392,7 +387,7 @@ public abstract class TargetImpl implements Target { return chosen; } } - chosen = targets.size() >= getNumberOfTargets(); + chosen = targets.size() >= getMinNumberOfTargets(); } while (!isChosen(game) && !doneChoosing(game)); return chosen; @@ -438,7 +433,7 @@ public abstract class TargetImpl implements Target { return false; } // if no targets have to be set and no targets are set, that's legal - if (getNumberOfTargets() == 0) { + if (getMinNumberOfTargets() == 0) { return true; } } @@ -457,7 +452,7 @@ public abstract class TargetImpl implements Target { // e.g. for {'A','B','C','D'} => N = 4 int N = possibleTargets.size(); // not enough targets, return no option - if (N < getNumberOfTargets()) { + if (N < getMinNumberOfTargets()) { return options; } // not target but that's allowed, return one empty option @@ -479,8 +474,8 @@ public abstract class TargetImpl implements Target { if (N < maxK) { // less possible targets than the maximum allowed so reduce the max maxK = N; } - int minK = getNumberOfTargets(); - if (getNumberOfTargets() == 0) { // add option without targets if possible + int minK = getMinNumberOfTargets(); + if (getMinNumberOfTargets() == 0) { // add option without targets if possible TargetImpl target = this.copy(); options.add(target); minK = 1; @@ -688,7 +683,7 @@ public abstract class TargetImpl implements Target { String abilityText = source.getRule(true).toLowerCase(); boolean strictModeEnabled = player.getStrictChooseMode(); boolean canAutoChoose = this.getMinNumberOfTargets() == this.getMaxNumberOfTargets() // Targets must be picked - && possibleTargets.size() == this.getNumberOfTargets() - this.getSize() // Available targets are equal to the number that must be picked + && possibleTargets.size() == this.getMinNumberOfTargets() - this.getSize() // Available targets are equal to the number that must be picked && !strictModeEnabled // Test AI is not set to strictChooseMode(true) && playerAutoTargetLevel > 0 // Human player has enabled auto-choose in settings && !abilityText.contains("search"); // Do not autochoose for any effects which involve searching diff --git a/Mage/src/main/java/mage/target/TargetPlayer.java b/Mage/src/main/java/mage/target/TargetPlayer.java index ba5327001b7..9c1c13ad722 100644 --- a/Mage/src/main/java/mage/target/TargetPlayer.java +++ b/Mage/src/main/java/mage/target/TargetPlayer.java @@ -132,7 +132,7 @@ public class TargetPlayer extends TargetImpl { @Override public boolean isLegal(Ability source, Game game) { //20101001 - 608.2b - if (getNumberOfTargets() == 0 && targets.isEmpty()) { + if (getMinNumberOfTargets() == 0 && targets.isEmpty()) { return true; // 0 targets selected is valid } return targets.keySet().stream().anyMatch(playerId -> canTarget(playerId, source, game)); diff --git a/Mage/src/main/java/mage/target/common/TargetCardInOpponentsGraveyard.java b/Mage/src/main/java/mage/target/common/TargetCardInOpponentsGraveyard.java index 3a5f8fda2a9..e7f81c810ef 100644 --- a/Mage/src/main/java/mage/target/common/TargetCardInOpponentsGraveyard.java +++ b/Mage/src/main/java/mage/target/common/TargetCardInOpponentsGraveyard.java @@ -86,7 +86,7 @@ public class TargetCardInOpponentsGraveyard extends TargetCard { @Override public boolean canChoose(UUID sourceControllerId, Ability source, Game game) { int possibleTargets = 0; - if (getNumberOfTargets() == 0) { // if 0 target is valid, the canChoose is always true + if (getMinNumberOfTargets() == 0) { // if 0 target is valid, the canChoose is always true return true; } Player sourceController = game.getPlayer(sourceControllerId);