diff --git a/src/forge/CardFactory.java b/src/forge/CardFactory.java index ac97b266f63..6fda0b1ca2d 100644 --- a/src/forge/CardFactory.java +++ b/src/forge/CardFactory.java @@ -16241,7 +16241,7 @@ public class CardFactory implements NewConstants { @Override public boolean canPlay() { - if(AllZone.Human_Life.getLife() >= 5 && AllZone.GameAction.getLastPlayerToDraw().equals(Constant.Player.Human) && AllZone.GameAction.isCardInPlay(card) && super.canPlay()) + if(AllZone.Human_Life.getLife() >= 5 && AllZone.GameAction.isPlayerTurn(Constant.Player.Human) && super.canPlay()) return true; else return false; } @@ -16249,7 +16249,7 @@ public class CardFactory implements NewConstants { @Override public boolean canPlayAI() { if (card.getController().equals(Constant.Player.Human) && AllZone.Computer_Life.getLife() >= 9 && - AllZone.GameAction.getLastPlayerToDraw().equals(Constant.Player.Computer) && + AllZone.GameAction.isPlayerTurn(Constant.Player.Computer) && AllZone.GameAction.isCardInPlay(card)) return true; else return false; @@ -17174,7 +17174,7 @@ public class CardFactory implements NewConstants { public boolean canPlay() { PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, card.getController()); - return AllZone.GameAction.isCardInZone(card, grave) && AllZone.GameAction.getLastPlayerToDraw().equals(card.getController()); + return AllZone.GameAction.isCardInZone(card, grave) && AllZone.GameAction.isPlayerTurn(card.getController()); } }; diff --git a/src/forge/CardFactoryUtil.java b/src/forge/CardFactoryUtil.java index a825627497e..ce29e258bb9 100644 --- a/src/forge/CardFactoryUtil.java +++ b/src/forge/CardFactoryUtil.java @@ -4219,15 +4219,13 @@ public class CardFactoryUtil { public static boolean canHumanPlayLand(){ // 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)); + Phase.canCastSorcery("Human"); } public static boolean canComputerPlayLand(){ // 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)); + Phase.canCastSorcery("Computer"); } public static void playLandEffects(Card c){ diff --git a/src/forge/CardFactory_Creatures.java b/src/forge/CardFactory_Creatures.java index d5a35afa4d3..6e3f34242d6 100644 --- a/src/forge/CardFactory_Creatures.java +++ b/src/forge/CardFactory_Creatures.java @@ -11847,7 +11847,7 @@ public class CardFactory_Creatures { PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, card.getController()); PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, card.getController()); - return AllZone.GameAction.isCardInZone(card, grave) && AllZone.GameAction.getLastPlayerToDraw().equals(card.getController()) && hand.size() > 0; + return AllZone.GameAction.isCardInZone(card, grave) && AllZone.GameAction.isPlayerTurn(card.getController()) && hand.size() > 0; } }; @@ -11880,7 +11880,7 @@ public class CardFactory_Creatures { PlayerZone grave = AllZone.getZone(Constant.Zone.Graveyard, card.getController()); PlayerZone hand = AllZone.getZone(Constant.Zone.Hand, card.getController()); - return AllZone.GameAction.isCardInZone(card, grave) && AllZone.GameAction.getLastPlayerToDraw().equals(card.getController()) && hand.size() > 0; + return AllZone.GameAction.isCardInZone(card, grave) && AllZone.GameAction.isPlayerTurn(card.getController()) && hand.size() > 0; } }; diff --git a/src/forge/GameAction.java b/src/forge/GameAction.java index 595738d5261..5aa2999129a 100644 --- a/src/forge/GameAction.java +++ b/src/forge/GameAction.java @@ -2193,6 +2193,15 @@ public class GameAction { removed.add(c); } + private String playerTurn = Constant.Player.Human; + public boolean isPlayerTurn(String player) { + return playerTurn.equals(player); + } + + public void setPlayerTurn(String s) { + playerTurn = s; + } + private boolean shouldDraw = false; // Starts false to skip first draw private String lastPlayerToDraw = Constant.Player.Human; diff --git a/src/forge/Input_Draw.java b/src/forge/Input_Draw.java index a6f2da34b08..37f8b4dcabf 100644 --- a/src/forge/Input_Draw.java +++ b/src/forge/Input_Draw.java @@ -15,6 +15,8 @@ public class Input_Draw extends Input { return; } + AllZone.GameInfo.setHumanPlayedLands(0); + //check if human should skip their draw phase CardList humanCards = new CardList(); humanCards.addAll(AllZone.Human_Play.getCards()); @@ -22,7 +24,6 @@ public class Input_Draw extends Input { || humanCards.containsName("Yawgmoth's Bargain"); if(AllZone.Phase.getPhase().equals(Constant.Phase.Draw) && humanSkipsDrawPhase) { - AllZone.GameInfo.setHumanPlayedLands(0); AllZone.Phase.setNeedToNextPhase(true); } else { //continue with draw phase @@ -52,7 +53,6 @@ public class Input_Draw extends Input { if(drawCard && AllZone.Phase.getTurn() > 1) AllZone.GameAction.drawCard(Constant.Player.Human); if(AllZone.Phase.getPhase().equals(Constant.Phase.Draw)) { - AllZone.GameInfo.setHumanPlayedLands(0); //AllZone.Phase.nextPhase(); //for debugging: System.out.println("need to nextPhase(from Input_Draw on human's draw) = true"); diff --git a/src/forge/Input_Untap.java b/src/forge/Input_Untap.java index c420a998097..ce8c2619faa 100644 --- a/src/forge/Input_Untap.java +++ b/src/forge/Input_Untap.java @@ -12,6 +12,8 @@ public class Input_Untap extends Input { PlayerZone p = AllZone.getZone(Constant.Zone.Play, AllZone.Phase.getActivePlayer()); Card[] c = p.getCards(); + AllZone.GameAction.setPlayerTurn(AllZone.Phase.getActivePlayer()); + if (AllZone.Phase.getTurn() != 1 && !(AllZone.Phase.getActivePlayer().equals(Constant.Player.Human) && AllZone.Phase.getTurn() == 2) ) { diff --git a/src/forge/Phase.java b/src/forge/Phase.java index 3d714e71fdd..9b341eecdea 100644 --- a/src/forge/Phase.java +++ b/src/forge/Phase.java @@ -30,8 +30,8 @@ public class Phase extends MyObservable private String phases[][] = { //human's turn - {Constant.Player.Human , Constant.Phase.Untap} , -// {Constant.Player.Human , Constant.Phase.Upkeep} , + {Constant.Player.Human, Constant.Phase.Untap}, +// {Constant.Player.Human, Constant.Phase.Upkeep}, {Constant.Player.Human, Constant.Phase.Draw}, {Constant.Player.Human, Constant.Phase.Main1}, {Constant.Player.Human, Constant.Phase.Combat_Declare_Attackers}, @@ -45,12 +45,13 @@ public class Phase extends MyObservable {Constant.Player.Human, Constant.Phase.End_Of_Combat}, {Constant.Player.Human, Constant.Phase.Main2}, {Constant.Player.Human, Constant.Phase.At_End_Of_Turn}, -// {Constant.Player.Computer , Constant.Phase.End_Of_Turn} , +// {Constant.Player.Computer , Constant.Phase.End_Of_Turn}, {Constant.Player.Human, Constant.Phase.Until_End_Of_Turn}, {Constant.Player.Human, Constant.Phase.Cleanup}, //computer's turn {Constant.Player.Computer, Constant.Phase.Untap}, +// {Constant.Player.Computer, Constant.Phase.Upkeep}, {Constant.Player.Computer, Constant.Phase.Draw}, {Constant.Player.Computer, Constant.Phase.Main1}, {Constant.Player.Human, Constant.Phase.Combat_Before_Declare_Attackers_InstantAbility}, @@ -405,6 +406,6 @@ public class Phase extends MyObservable public static boolean canCastSorcery(String player) { return (AllZone.Phase.getPhase().equals(Constant.Phase.Main2) || (AllZone.Phase.getPhase().equals(Constant.Phase.Main1) - && AllZone.GameAction.getLastPlayerToDraw().equals(player)) && AllZone.Stack.size() == 0); + && AllZone.GameAction.isPlayerTurn(player)) && AllZone.Stack.size() == 0); } }