diff --git a/src/main/java/forge/card/ability/effects/PlayEffect.java b/src/main/java/forge/card/ability/effects/PlayEffect.java index 7add7c04c86..956dc17e6c4 100644 --- a/src/main/java/forge/card/ability/effects/PlayEffect.java +++ b/src/main/java/forge/card/ability/effects/PlayEffect.java @@ -196,8 +196,7 @@ public class PlayEffect extends SpellAbilityEffect { } // lands will be played if (tgtCard.isLand()) { - controller.playLand(tgtCard); - if (remember && controller.canPlayLand(tgtCard)) { + if (controller.playLand(tgtCard, true) && remember) { source.addRemembered(tgtCard); } tgtCards.remove(tgtCard); diff --git a/src/main/java/forge/game/ai/AiController.java b/src/main/java/forge/game/ai/AiController.java index 3cb42e63f18..6672814f609 100644 --- a/src/main/java/forge/game/ai/AiController.java +++ b/src/main/java/forge/game/ai/AiController.java @@ -884,7 +884,7 @@ public class AiController { while(landsWannaPlay != null && !landsWannaPlay.isEmpty() && player.canPlayLand(null)) { Card land = chooseBestLandToPlay(landsWannaPlay); landsWannaPlay.remove(land); - player.playLand(land); + player.playLand(land, false); game.getPhaseHandler().setPriority(player); } } diff --git a/src/main/java/forge/game/player/HumanPlay.java b/src/main/java/forge/game/player/HumanPlay.java index 3facd8c2d7c..83720f63a23 100644 --- a/src/main/java/forge/game/player/HumanPlay.java +++ b/src/main/java/forge/game/player/HumanPlay.java @@ -69,7 +69,7 @@ public class HumanPlay { */ public static void playSpellAbility(Player p, Card c, SpellAbility ab) { if (ab == Ability.PLAY_LAND_SURROGATE) - p.playLand(c); + p.playLand(c, false); else { HumanPlay.playSpellAbility(p, ab); } diff --git a/src/main/java/forge/game/player/Player.java b/src/main/java/forge/game/player/Player.java index 3f909f1945f..6bba252725f 100644 --- a/src/main/java/forge/game/player/Player.java +++ b/src/main/java/forge/game/player/Player.java @@ -1786,9 +1786,9 @@ public class Player extends GameEntity implements Comparable { * @param land * a {@link forge.Card} object. */ - public final void playLand(final Card land) { + public final boolean playLand(final Card land, final boolean ignoreTiming) { FThreads.assertExecutedByEdt(false); - if (this.canPlayLand(land)) { + if (this.canPlayLand(land, ignoreTiming)) { land.setController(this, 0); game.getAction().moveTo(this.getZone(ZoneType.Battlefield), land); CardFactoryUtil.playLandEffects(land); @@ -1808,9 +1808,12 @@ public class Player extends GameEntity implements Comparable { final HashMap runParams = new HashMap(); runParams.put("Card", land); game.getTriggerHandler().runTrigger(TriggerType.LandPlayed, runParams, false); + game.getStack().unfreezeStack(); + return true; } game.getStack().unfreezeStack(); + return false; } /** @@ -1820,9 +1823,19 @@ public class Player extends GameEntity implements Comparable { * * @return a boolean. */ - public final boolean canPlayLand(Card land) { + public final boolean canPlayLand(final Card land) { + return canPlayLand(land, false); + } + /** + *

+ * canPlayLand. + *

+ * + * @return a boolean. + */ + public final boolean canPlayLand(Card land, final boolean ignoreTiming) { - if (!this.canCastSorcery()) { + if (!ignoreTiming && !this.canCastSorcery()) { return false; }