From 4aa31e30d57e5a2e48a4d4d17a8ef98be3448a3a Mon Sep 17 00:00:00 2001 From: jendave Date: Sat, 6 Aug 2011 05:19:12 +0000 Subject: [PATCH] - Added all of the required checks into canPlayLand() so they can't be played illegally through alternate effects. --- src/forge/CardFactoryUtil.java | 10 ++++++++-- src/forge/CardFactory_Creatures.java | 3 +-- src/forge/GameAction.java | 5 ++--- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/forge/CardFactoryUtil.java b/src/forge/CardFactoryUtil.java index 66023aa529e..145985faabd 100644 --- a/src/forge/CardFactoryUtil.java +++ b/src/forge/CardFactoryUtil.java @@ -4189,11 +4189,17 @@ public class CardFactoryUtil { } public static boolean canHumanPlayLand(){ - return (AllZone.GameInfo.humanNumberLandPlaysLeft() > 0 || CardFactoryUtil.getCards("Fastbond", "Human").size() > 0); + // LandsToPlay Left or Fastbond in play, Human's turn, Stack is Empty, In Main Phase + return (AllZone.GameInfo.humanNumberLandPlaysLeft() > 0 || CardFactoryUtil.getCards("Fastbond", "Human").size() > 0) && + AllZone.GameAction.getLastPlayerToDraw().equals("Human") && (AllZone.Stack.size() == 0) && + (AllZone.Phase.getPhase().equals(Constant.Phase.Main1) || AllZone.Phase.getPhase().equals(Constant.Phase.Main2)); } public static boolean canComputerPlayLand(){ - return (AllZone.GameInfo.computerNumberLandPlaysLeft() > 0 || CardFactoryUtil.getCards("Fastbond", "Computer").size() > 0); + // LandsToPlay Left or Fastbond in play, Computer's turn, Stack is Empty, In Main Phase + return (AllZone.GameInfo.computerNumberLandPlaysLeft() > 0 || CardFactoryUtil.getCards("Fastbond", "Computer").size() > 0) && + AllZone.GameAction.getLastPlayerToDraw().equals("Computer") && (AllZone.Stack.size() == 0) && + (AllZone.Phase.getPhase().equals(Constant.Phase.Main1) || AllZone.Phase.getPhase().equals(Constant.Phase.Main2)); } public static void playLandEffects(Card c){ diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index fe407a947a5..927321756a9 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -2738,8 +2738,7 @@ public class CardFactory_Creatures { if(card.getController() == Constant.Player.Human) canPlayLand = CardFactoryUtil.canHumanPlayLand(); else canPlayLand = CardFactoryUtil.canComputerPlayLand(); - return (AllZone.GameAction.isCardInZone(card, play) && library.get(0).getType().contains("Land") && canPlayLand) - && (AllZone.Stack.size() == 0) && AllZone.GameAction.getLastPlayerToDraw().equals(card.getController()); + return (AllZone.GameAction.isCardInZone(card, play) && library.get(0).getType().contains("Land") && canPlayLand); } }; ability.setStackDescription(card.getController() + " - plays land from top of library."); diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index a26d642b64c..f5af5514277 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -2235,9 +2235,8 @@ public class GameAction { ArrayList choices = new ArrayList(); - if(AllZone.Stack.size() == 0 && CardFactoryUtil.canHumanPlayLand() - && (AllZone.Phase.getPhase().equals(Constant.Phase.Main1) || AllZone.Phase.getPhase().equals( - Constant.Phase.Main2))) choices.add("Play land"); + if(CardFactoryUtil.canHumanPlayLand()) + choices.add("Play land"); for(SpellAbility sa:sas) { if(sa.canPlay()) {