diff --git a/Mage/src/main/java/mage/abilities/condition/common/CardsInOpponentGraveCondition.java b/Mage/src/main/java/mage/abilities/condition/common/CardsInOpponentGraveCondition.java index 987b0131403..adf4c5ee227 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/CardsInOpponentGraveCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/CardsInOpponentGraveCondition.java @@ -4,13 +4,14 @@ import mage.abilities.Ability; import mage.abilities.condition.Condition; import mage.abilities.hint.ConditionHint; import mage.abilities.hint.Hint; +import mage.abilities.hint.HintUtils; import mage.game.Game; import mage.game.Graveyard; import mage.players.Player; import mage.util.CardUtil; +import java.awt.*; import java.util.Objects; -import java.util.UUID; /** * Condition for - @@ -28,7 +29,7 @@ public enum CardsInOpponentGraveCondition implements Condition { CardsInOpponentGraveCondition(int value) { this.value = value; - this.hint = new ConditionHint(this, "O" + this.makeStem()); + this.hint = new CardsInOpponentGraveConditionHint(value); } @Override @@ -45,14 +46,50 @@ public enum CardsInOpponentGraveCondition implements Condition { @Override public String toString() { - return "an o" + this.makeStem(); - } - - private String makeStem() { - return "pponent has " + CardUtil.numberToText(value) + " or more cards in their graveyard"; + return "an opponent has " + CardUtil.numberToText(value) + " or more cards in their graveyard"; } public Hint getHint() { return hint; } + + private static final class CardsInOpponentGraveConditionHint implements Hint { + + private final int value; + + private CardsInOpponentGraveConditionHint(int value) { + this.value = value; + } + + private CardsInOpponentGraveConditionHint(final CardsInOpponentGraveConditionHint hint) { + this.value = hint.value; + } + + @Override + public String getText(Game game, Ability ability) { + int maxGraveSize = game + .getOpponents(ability.getControllerId()) + .stream() + .map(game::getPlayer) + .filter(Objects::nonNull) + .map(Player::getGraveyard) + .mapToInt(Graveyard::size) + .max() + .orElse(0); + String text = "An opponent has " + + CardUtil.numberToText(maxGraveSize) + " card" + + (maxGraveSize == 1 ? "" : "s") + + " in their graveyard"; + if (maxGraveSize >= this.value) { + return HintUtils.prepareText(text, Color.GREEN, HintUtils.HINT_ICON_GOOD); + } else { + return HintUtils.prepareText(text, Color.RED, HintUtils.HINT_ICON_BAD); + } + } + + @Override + public CardsInOpponentGraveConditionHint copy() { + return new CardsInOpponentGraveConditionHint(this); + } + } }