From 407616c51555d0a9c9bd6fcc6aea9a55d65f1ee6 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sun, 17 Jun 2018 10:10:37 +0300 Subject: [PATCH] - Fixed Gonti, Lord of Luxury not allowing to cast exiled cards (and other similar issues, potentially) --- .../src/main/java/forge/game/spellability/Spell.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 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 0fcffa546ca..c11cbe207bd 100644 --- a/forge-game/src/main/java/forge/game/spellability/Spell.java +++ b/forge-game/src/main/java/forge/game/spellability/Spell.java @@ -20,6 +20,7 @@ package forge.game.spellability; import com.google.common.collect.Sets; import forge.card.CardStateName; +import forge.card.mana.ManaCost; import forge.game.Game; import forge.game.card.Card; import forge.game.card.CardCollection; @@ -74,6 +75,13 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable @Override public boolean canPlay() { 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(); if (activator == null) { activator = card.getController(); @@ -140,7 +148,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable if (!(isInstant || activator.canCastSorcery() || flash || getRestrictions().isInstantSpeed() || hasSVar("IsCastFromPlayEffect") - || (card.isFaceDown() && !card.getLastKnownZone().is(ZoneType.Battlefield) && card.getState(CardStateName.Original).getType().isInstant()))) { + || wasFaceDownInstant))) { return false; } @@ -153,7 +161,7 @@ public abstract class Spell extends SpellAbility implements java.io.Serializable if (!isCastFaceDown() && !hasSVar("IsCastFromPlayEffect") && isBasicSpell() - && card.getState(card.isFaceDown() ? CardStateName.Original : card.getCurrentStateName()).getManaCost().isNoCost()) { + && origCost.isNoCost()) { return false; }