From 70a6032e68f3c99923507aa99404a30a3fc8aa42 Mon Sep 17 00:00:00 2001 From: Agetian Date: Wed, 21 Jun 2017 13:33:11 +0000 Subject: [PATCH] - A different approach to remedying the broken Play Effect problem (uses a dedicated SVar on a SpellAbility). --- forge-game/src/main/java/forge/game/spellability/Spell.java | 5 ++++- forge-gui/src/main/java/forge/player/HumanPlay.java | 6 +----- .../src/main/java/forge/player/PlayerControllerHuman.java | 3 ++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/forge-game/src/main/java/forge/game/spellability/Spell.java b/forge-game/src/main/java/forge/game/spellability/Spell.java index 3d205c944c8..145d0ab38da 100644 --- a/forge-game/src/main/java/forge/game/spellability/Spell.java +++ b/forge-game/src/main/java/forge/game/spellability/Spell.java @@ -107,12 +107,15 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable || this.getRestrictions().isInstantSpeed() || activator.hasKeyword("You may cast nonland cards as though they had flash.") || card.hasStartOfKeyword("You may cast CARDNAME as though it had flash.") + || this.hasSVar("IsCastFromPlayEffect") || (card.isFaceDown() && !card.getZone().is(ZoneType.Battlefield) && card.getState(CardStateName.Original).getType().isInstant()))) { return false; } if (!this.getRestrictions().canPlay(card, this)) { - return false; + if (!this.hasSVar("IsCastFromPlayEffect")) { + return false; + } } // for uncastables like lotus bloom, check if manaCost is blank (except for morph spells) diff --git a/forge-gui/src/main/java/forge/player/HumanPlay.java b/forge-gui/src/main/java/forge/player/HumanPlay.java index d0b89f9fe36..2f3491783b1 100644 --- a/forge-gui/src/main/java/forge/player/HumanPlay.java +++ b/forge-gui/src/main/java/forge/player/HumanPlay.java @@ -63,10 +63,6 @@ public class HumanPlay { * a {@link forge.game.spellability.SpellAbility} object. */ public final static boolean playSpellAbility(final PlayerControllerHuman controller, final Player p, SpellAbility sa) { - return playSpellAbility(controller, p, sa, false); - } - - public final static boolean playSpellAbility(final PlayerControllerHuman controller, final Player p, SpellAbility sa, boolean fromPlayEffect) { FThreads.assertExecutedByEdt(false); if (sa == controller.getGame().PLAY_LAND_SURROGATE) { @@ -87,7 +83,7 @@ public class HumanPlay { } // extra play check (unless the card is cast from a play effect) - if (!(fromPlayEffect || sa.canPlay())) { + if (!sa.canPlay()) { return false; } diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 32d74e7b768..f3c9c2c947b 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -1506,7 +1506,8 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont @Override public boolean playSaFromPlayEffect(final SpellAbility tgtSA) { - return HumanPlay.playSpellAbility(this, player, tgtSA, true); + tgtSA.setSVar("IsCastFromPlayEffect", "True"); + return HumanPlay.playSpellAbility(this, player, tgtSA); } @Override