Merge branch 'master' into 'master'

Fix a check in MayPlay not properly accounting for some data after LKI copy.

See merge request core-developers/forge!654
This commit is contained in:
Michael Kamensky
2018-06-17 07:12:19 +00:00

View File

@@ -20,6 +20,7 @@ package forge.game.spellability;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import forge.card.CardStateName; import forge.card.CardStateName;
import forge.card.mana.ManaCost;
import forge.game.Game; import forge.game.Game;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.card.CardCollection; import forge.game.card.CardCollection;
@@ -74,6 +75,13 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
@Override @Override
public boolean canPlay() { public boolean canPlay() {
Card card = this.getHostCard(); Card card = this.getHostCard();
// Save the original cost and the face down info for a later check since the LKI copy will overwrite them
ManaCost origCost = card.getState(card.isFaceDown() ? CardStateName.Original : card.getCurrentStateName()).getManaCost();
boolean wasFaceDownInstant = card.isFaceDown()
&& !card.getLastKnownZone().is(ZoneType.Battlefield)
&& card.getState(CardStateName.Original).getType().isInstant();
Player activator = this.getActivatingPlayer(); Player activator = this.getActivatingPlayer();
if (activator == null) { if (activator == null) {
activator = card.getController(); activator = card.getController();
@@ -140,7 +148,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
if (!(isInstant || activator.canCastSorcery() || flash || getRestrictions().isInstantSpeed() if (!(isInstant || activator.canCastSorcery() || flash || getRestrictions().isInstantSpeed()
|| hasSVar("IsCastFromPlayEffect") || hasSVar("IsCastFromPlayEffect")
|| (card.isFaceDown() && !card.getLastKnownZone().is(ZoneType.Battlefield) && card.getState(CardStateName.Original).getType().isInstant()))) { || wasFaceDownInstant))) {
return false; return false;
} }
@@ -153,7 +161,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable
if (!isCastFaceDown() if (!isCastFaceDown()
&& !hasSVar("IsCastFromPlayEffect") && !hasSVar("IsCastFromPlayEffect")
&& isBasicSpell() && isBasicSpell()
&& card.getState(card.isFaceDown() ? CardStateName.Original : card.getCurrentStateName()).getManaCost().isNoCost()) { && origCost.isNoCost()) {
return false; return false;
} }