From dc91d6ff8115907300b5d8f320cb30f87dff02bf Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 30 Apr 2018 08:06:23 +0200 Subject: [PATCH] * Some updated to Psychic Battle handling. --- Mage.Sets/src/mage/cards/p/PsychicBattle.java | 21 ++++++------------- Mage/src/main/java/mage/game/stack/Spell.java | 1 + .../java/mage/game/stack/StackAbility.java | 1 + .../java/mage/game/stack/StackObjImpl.java | 20 ++++++++---------- 4 files changed, 17 insertions(+), 26 deletions(-) diff --git a/Mage.Sets/src/mage/cards/p/PsychicBattle.java b/Mage.Sets/src/mage/cards/p/PsychicBattle.java index 63332cc39f..ec4e60a465 100644 --- a/Mage.Sets/src/mage/cards/p/PsychicBattle.java +++ b/Mage.Sets/src/mage/cards/p/PsychicBattle.java @@ -37,16 +37,13 @@ import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; import mage.cards.CardImpl; -import mage.cards.CardsImpl; import mage.cards.CardSetInfo; +import mage.cards.CardsImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Zone; -import mage.filter.FilterPermanent; -import mage.filter.predicate.mageobject.NamePredicate; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.permanent.Permanent; import mage.game.stack.StackObject; import mage.players.Player; import mage.target.targetpointer.FixedTarget; @@ -58,7 +55,7 @@ import mage.target.targetpointer.FixedTarget; public class PsychicBattle extends CardImpl { public PsychicBattle(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{U}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{U}{U}"); // Whenever a player chooses one or more targets, each player reveals the top card of his or her library. The player who reveals the card with the highest converted mana cost may change the target or targets. If two or more cards are tied for highest cost, the target or targets remain unchanged. Changing targets this way doesn't trigger abilities of permanents named Psychic Battle. this.addAbility(new PsychicBattleTriggeredAbility()); @@ -75,11 +72,6 @@ public class PsychicBattle extends CardImpl { } class PsychicBattleTriggeredAbility extends TriggeredAbilityImpl { - - private static final FilterPermanent filter = new FilterPermanent(); - static { - filter.add(new NamePredicate("Psychic Battle")); - } public PsychicBattleTriggeredAbility() { super(Zone.BATTLEFIELD, new PsychicBattleEffect(), false); @@ -103,8 +95,7 @@ class PsychicBattleTriggeredAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { StackObject stackObject = game.getStack().getStackObject(event.getSourceId()); if (stackObject != null) { - Permanent psychicBattle = game.getPermanentOrLKIBattlefield(getSourceId()); - if (psychicBattle != null && !(stackObject.isTargetChanged() && filter.match(psychicBattle, game))) { + if (!stackObject.isTargetChanged() && !stackObject.getName().equals("Psychic Battle")) { this.getEffects().get(0).setTargetPointer(new FixedTarget(event.getSourceId())); stackObject.setTargetChanged(false); // resets the targetChanged flag return true; @@ -122,7 +113,7 @@ class PsychicBattleTriggeredAbility extends TriggeredAbilityImpl { class PsychicBattleEffect extends OneShotEffect { public PsychicBattleEffect() { - super(Outcome.Neutral); + super(Outcome.Benefit); this.staticText = "each player reveals the top card of his or her library. The player who reveals the card with the highest converted mana cost may change the target or targets. If two or more cards are tied for highest cost, the target or targets remain unchanged"; } @@ -148,7 +139,7 @@ class PsychicBattleEffect extends OneShotEffect { manacostMap.put(player, card.getConvertedManaCost()); } } - + Player highestCostPlayer = null; int maxValue = Collections.max(manacostMap.values()); boolean tie = false; @@ -162,7 +153,7 @@ class PsychicBattleEffect extends OneShotEffect { } } } - + if (highestCostPlayer != null && !tie) { StackObject stackObject = game.getStack().getStackObject(this.getTargetPointer().getFirst(game, source)); if (stackObject != null) { diff --git a/Mage/src/main/java/mage/game/stack/Spell.java b/Mage/src/main/java/mage/game/stack/Spell.java index 693b324c91..5a5d4103ec 100644 --- a/Mage/src/main/java/mage/game/stack/Spell.java +++ b/Mage/src/main/java/mage/game/stack/Spell.java @@ -149,6 +149,7 @@ public class Spell extends StackObjImpl implements Card { this.resolving = spell.resolving; this.doneActivatingManaAbilities = spell.doneActivatingManaAbilities; + this.targetChanged = spell.targetChanged; } public boolean activate(Game game, boolean noMana) { diff --git a/Mage/src/main/java/mage/game/stack/StackAbility.java b/Mage/src/main/java/mage/game/stack/StackAbility.java index 00eabb629a..da87c5d3fb 100644 --- a/Mage/src/main/java/mage/game/stack/StackAbility.java +++ b/Mage/src/main/java/mage/game/stack/StackAbility.java @@ -89,6 +89,7 @@ public class StackAbility extends StackObjImpl implements Ability { this.name = stackAbility.name; this.expansionSetCode = stackAbility.expansionSetCode; this.targetAdjustment = stackAbility.targetAdjustment; + this.targetChanged = stackAbility.targetChanged; } @Override diff --git a/Mage/src/main/java/mage/game/stack/StackObjImpl.java b/Mage/src/main/java/mage/game/stack/StackObjImpl.java index 53c689a618..12d49f5749 100644 --- a/Mage/src/main/java/mage/game/stack/StackObjImpl.java +++ b/Mage/src/main/java/mage/game/stack/StackObjImpl.java @@ -5,6 +5,8 @@ */ package mage.game.stack; +import java.util.Set; +import java.util.UUID; import mage.MageObject; import mage.abilities.Abilities; import mage.abilities.AbilitiesImpl; @@ -19,16 +21,13 @@ import mage.players.Player; import mage.target.Target; import mage.target.TargetAmount; -import java.util.Set; -import java.util.UUID; - /** * * @author LevelX2 */ public abstract class StackObjImpl implements StackObject { - - private boolean targetChanged; // for Psychic Battle + + protected boolean targetChanged; // for Psychic Battle /** * Choose new targets for a stack Object @@ -74,12 +73,11 @@ public abstract class StackObjImpl implements StackObject { * the change is legal. * * Example: Arc Trail is a sorcery that reads "Arc Trail deals 2 damage to - * any target and 1 damage to another target creature or - * player." The current targets of Arc Trail are Runeclaw Bear and Llanowar - * Elves, in that order. You cast Redirect, an instant that reads "You may - * choose new targets for target spell," targeting Arc Trail. You can change - * the first target to Llanowar Elves and change the second target to - * Runeclaw Bear. + * any target and 1 damage to another target creature or player." The + * current targets of Arc Trail are Runeclaw Bear and Llanowar Elves, in + * that order. You cast Redirect, an instant that reads "You may choose new + * targets for target spell," targeting Arc Trail. You can change the first + * target to Llanowar Elves and change the second target to Runeclaw Bear. * * 114.7. Modal spells and abilities may have different targeting * requirements for each mode. An effect that allows a player to change the