diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/ExploreSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/ExploreSourceEffect.java
index fddc156a369..4077d6f15a1 100644
--- a/Mage/src/main/java/mage/abilities/effects/keyword/ExploreSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/keyword/ExploreSourceEffect.java
@@ -3,7 +3,6 @@ package mage.abilities.effects.keyword;
import mage.abilities.Ability;
import mage.abilities.effects.OneShotEffect;
import mage.cards.Card;
-import mage.cards.Cards;
import mage.cards.CardsImpl;
import mage.constants.Outcome;
import mage.constants.Zone;
@@ -20,62 +19,22 @@ import java.util.UUID;
*/
public class ExploreSourceEffect extends OneShotEffect {
- // "it explores. (Reveal the top card of your library. Put that card into
- // your hand if it's a land. Otherwise, put a +1/+1 counter on this creature,
- // then put the card back or put it into your graveyard.)";
- private static final String RULE_TEXT_START = "explores.";
- private static final String RULE_TEXT_HINT = "(Reveal the top card of your library. "
+ private static final String REMINDER_TEXT = ". (Reveal the top card of your library. "
+ "Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on "
+ "this creature, then put the card back or put it into your graveyard.)";
- public static String getRuleText(boolean showAbilityHint) {
- return getRuleText(showAbilityHint, null);
- }
-
- public static String getRuleText(boolean showAbilityHint, String whosExplores) {
-
- String res = whosExplores;
- if (res == null) {
- res = "it";
- }
-
- res += " " + RULE_TEXT_START;
-
- if (showAbilityHint) {
- res += " " + RULE_TEXT_HINT;
- }
- return res;
- }
-
- private String sourceName = "it";
- private boolean showAbilityHint = true;
-
public ExploreSourceEffect() {
- this(true);
+ this(true, "it");
}
- public ExploreSourceEffect(boolean showAbilityHint) {
- this(showAbilityHint, null);
- }
-
- public ExploreSourceEffect(boolean showAbilityHint, String whosExplores) {
+ public ExploreSourceEffect(boolean showAbilityHint, String explorerText) {
super(Outcome.Benefit);
-
- this.showAbilityHint = showAbilityHint;
- if (whosExplores != null) {
- this.sourceName = whosExplores;
- }
- setText();
+ // triggered ability text gen will replace {this} with "it" where applicable
+ staticText = "{this} explores" + (showAbilityHint ? REMINDER_TEXT : "");
}
protected ExploreSourceEffect(final ExploreSourceEffect effect) {
super(effect);
- this.showAbilityHint = effect.showAbilityHint;
- this.sourceName = effect.sourceName;
- }
-
- private void setText() {
- this.staticText = getRuleText(this.showAbilityHint, this.sourceName);
}
@Override
@@ -89,43 +48,37 @@ public class ExploreSourceEffect extends OneShotEffect {
}
public static boolean explorePermanent(Game game, UUID permanentId, Ability source) {
- Boolean cardWasRevealed = false;
+ Player controller = game.getPlayer(source.getControllerId());
Permanent permanent = game.getPermanentOrLKIBattlefield(permanentId);
- if (permanent == null) {
- return false;
- }
- Player permanentController = game.getPlayer(source.getControllerId());
- if (permanentController == null) {
+ if (controller == null || permanent == null) {
return false;
}
game.fireEvent(GameEvent.getEvent(GameEvent.EventType.EXPLORED, permanentId, source, permanent.getControllerId()));
- if (permanentController.getLibrary().hasCards()) {
- Card card = permanentController.getLibrary().getFromTop(game);
- Cards cards = new CardsImpl();
- cards.add(card);
- permanentController.revealCards("Explored card", cards, game);
- cardWasRevealed = true;
- if (card != null) {
- if (card.isLand(game)) {
- permanentController.moveCards(card, Zone.HAND, source, game);
+ Card card = controller.getLibrary().getFromTop(game);
+ if (card != null) {
+ controller.revealCards("Explored card", new CardsImpl(card), game);
+ if (card.isLand(game)) {
+ controller.moveCards(card, Zone.HAND, source, game);
+ } else {
+ addCounter(game, permanent, source);
+ if (controller.chooseUse(Outcome.Neutral, "Put " + card.getLogName() + " in your graveyard?", source, game)) {
+ controller.moveCards(card, Zone.GRAVEYARD, source, game);
} else {
- if (game.getState().getZone(permanentId) == Zone.BATTLEFIELD) { // needed in case LKI object is used
- permanent.addCounters(CounterType.P1P1.createInstance(), source.getControllerId(), source, game);
- }
- if (permanentController.chooseUse(Outcome.Neutral, "Put " + card.getLogName() + " in your graveyard?", source, game)) {
- permanentController.moveCards(card, Zone.GRAVEYARD, source, game);
- } else {
- game.informPlayers(permanentController.getLogName() + " leaves " + card.getLogName() + " on top of their library.");
- }
+ game.informPlayers(controller.getLogName() + " leaves " + card.getLogName() + " on top of their library.");
}
}
- }
- if (!cardWasRevealed
- && game.getState().getZone(permanentId) == Zone.BATTLEFIELD) {
+ } else {
// If no card is revealed, most likely because that player's library is empty,
// the exploring creature receives a +1/+1 counter.
- permanent.addCounters(CounterType.P1P1.createInstance(), source.getControllerId(), source, game);
+ addCounter(game, permanent, source);
}
return true;
}
+
+ private static void addCounter(Game game, Permanent permanent, Ability source) {
+ if (game.getState().getZone(permanent.getId()) == Zone.BATTLEFIELD) { // needed in case LKI object is used
+ permanent.addCounters(CounterType.P1P1.createInstance(), source.getControllerId(), source, game);
+ }
+ }
+
}
diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/ExploreTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/ExploreTargetEffect.java
index a832b1c2c92..6138a6e2c8d 100644
--- a/Mage/src/main/java/mage/abilities/effects/keyword/ExploreTargetEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/keyword/ExploreTargetEffect.java
@@ -1,6 +1,7 @@
package mage.abilities.effects.keyword;
import mage.abilities.Ability;
+import mage.abilities.Mode;
import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.game.Game;
@@ -10,17 +11,24 @@ import mage.game.Game;
*/
public class ExploreTargetEffect extends OneShotEffect {
+ private static final String REMINDER_TEXT = ". (Reveal the top card of your library. "
+ + "Put that card into your hand if it's a land. Otherwise, put a +1/+1 counter on "
+ + "that creature, then put the card back or put it into your graveyard.)";
+
+ private final boolean withReminderText;
+
public ExploreTargetEffect() {
this(true);
}
- public ExploreTargetEffect(boolean showAbilityHint) {
+ public ExploreTargetEffect(boolean withReminderText) {
super(Outcome.Benefit);
- this.staticText = ExploreSourceEffect.getRuleText(showAbilityHint);
+ this.withReminderText = withReminderText;
}
protected ExploreTargetEffect(final ExploreTargetEffect effect) {
super(effect);
+ this.withReminderText = effect.withReminderText;
}
@Override
@@ -32,4 +40,14 @@ public class ExploreTargetEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
return ExploreSourceEffect.explorePermanent(game, getTargetPointer().getFirst(game, source), source);
}
+
+ @Override
+ public String getText(Mode mode) {
+ if (staticText != null && !staticText.isEmpty()) {
+ return staticText;
+ }
+ return getTargetPointer().describeTargets(mode.getTargets(), "it")
+ + " explores" + (withReminderText ? REMINDER_TEXT : "") ;
+ }
+
}