diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java index 111d5db0333..62d03cc5767 100644 --- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java +++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java @@ -34,8 +34,10 @@ import forge.control.input.InputPayManaExecuteCommands; import forge.control.input.InputSelectCards; import forge.control.input.InputSelectCardsFromList; import forge.game.GameState; +import forge.game.ai.AiController; import forge.game.player.AIPlayer; import forge.game.player.Player; +import forge.game.player.PlayerControllerAi; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; @@ -106,7 +108,8 @@ public class CardFactorySorceries { for( Card c : sc.getSelected()) p.discard(c, spell); } else { - final List toDiscard = ((AIPlayer)p).getAi().getCardsToDiscard(sac, (String[])null, spell); + final AiController ai = ((PlayerControllerAi)p.getController()).getAi(); + final List toDiscard = ai.getCardsToDiscard(sac, (String[])null, spell); for (int i = 0; i < toDiscard.size(); i++) { p.discard(toDiscard.get(i), spell); } diff --git a/src/main/java/forge/card/cost/CostDiscard.java b/src/main/java/forge/card/cost/CostDiscard.java index 0aa34866f64..32ba9c3bd58 100644 --- a/src/main/java/forge/card/cost/CostDiscard.java +++ b/src/main/java/forge/card/cost/CostDiscard.java @@ -30,8 +30,10 @@ import forge.card.spellability.SpellAbility; import forge.control.input.InputSelectCards; import forge.control.input.InputSelectCardsFromList; import forge.game.GameState; +import forge.game.ai.AiController; import forge.game.player.AIPlayer; import forge.game.player.Player; +import forge.game.player.PlayerControllerAi; import forge.game.zone.ZoneType; import forge.util.Aggregates; @@ -279,7 +281,8 @@ public class CostDiscard extends CostPartWithList { if (type.equals("Random")) { return new PaymentDecision(CardLists.getRandomSubList(hand, c)); } else { - return new PaymentDecision(ai.getAi().getCardsToDiscard(c, type.split(";"), ability)); + final AiController aic = ((PlayerControllerAi)ai.getController()).getAi(); + return new PaymentDecision(aic.getCardsToDiscard(c, type.split(";"), ability)); } } diff --git a/src/main/java/forge/card/cost/CostReveal.java b/src/main/java/forge/card/cost/CostReveal.java index 602d96d13bd..7c1c4e90fea 100644 --- a/src/main/java/forge/card/cost/CostReveal.java +++ b/src/main/java/forge/card/cost/CostReveal.java @@ -31,8 +31,10 @@ import forge.card.spellability.SpellAbility; import forge.control.input.InputSelectCards; import forge.control.input.InputSelectCardsFromList; import forge.game.GameState; +import forge.game.ai.AiController; import forge.game.player.AIPlayer; import forge.game.player.Player; +import forge.game.player.PlayerControllerAi; import forge.game.zone.ZoneType; /** @@ -128,7 +130,8 @@ public class CostReveal extends CostPartWithList { } } - return new PaymentDecision(ai.getAi().getCardsToDiscard(c, type.split(";"), ability)); + final AiController aic = ((PlayerControllerAi)ai.getController()).getAi(); + return new PaymentDecision(aic.getCardsToDiscard(c, type.split(";"), ability)); } /* diff --git a/src/main/java/forge/game/GameActionUtil.java b/src/main/java/forge/game/GameActionUtil.java index 735034beb71..b4809788339 100644 --- a/src/main/java/forge/game/GameActionUtil.java +++ b/src/main/java/forge/game/GameActionUtil.java @@ -70,11 +70,13 @@ import forge.control.input.InputPayManaExecuteCommands; import forge.control.input.InputPayment; import forge.control.input.InputSelectCards; import forge.control.input.InputSelectCardsFromList; +import forge.game.ai.AiController; import forge.game.event.CardDamagedEvent; import forge.game.event.LifeLossEvent; import forge.game.player.AIPlayer; import forge.game.player.HumanPlay; import forge.game.player.Player; +import forge.game.player.PlayerControllerAi; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; import forge.gui.GuiDialog; @@ -286,8 +288,8 @@ public final class GameActionUtil { revealed.remove(rippledCards[i]); } } else { - AIPlayer ai = (AIPlayer) p; - SpellAbility saPlayed = ai.getAi().chooseAndPlaySa(rippledCards[i].getBasicSpells(), false, true); + final AiController aic = ((PlayerControllerAi)p.getController()).getAi(); + SpellAbility saPlayed = aic.chooseAndPlaySa(rippledCards[i].getBasicSpells(), false, true); if ( saPlayed != null ) revealed.remove(rippledCards[i]); } diff --git a/src/main/java/forge/game/ai/AiController.java b/src/main/java/forge/game/ai/AiController.java index 74489d2f4ab..491ce9e9f6c 100644 --- a/src/main/java/forge/game/ai/AiController.java +++ b/src/main/java/forge/game/ai/AiController.java @@ -804,7 +804,7 @@ public class AiController { if (!player.isUnlimitedHandSize()) { int max = Math.min(player.getZone(ZoneType.Hand).size(), size - player.getMaxHandSize()); if( max > 0) { - final List toDiscard = player.getAi().getCardsToDiscard(max, (String[])null, null); + final List toDiscard = getCardsToDiscard(max, (String[])null, null); for (int i = 0; i < toDiscard.size(); i++) { player.discard(toDiscard.get(i), null); } diff --git a/src/main/java/forge/game/ai/ComputerUtil.java b/src/main/java/forge/game/ai/ComputerUtil.java index 0b49aac86ca..1f05532df38 100644 --- a/src/main/java/forge/game/ai/ComputerUtil.java +++ b/src/main/java/forge/game/ai/ComputerUtil.java @@ -51,6 +51,7 @@ import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.AIPlayer; import forge.game.player.Player; +import forge.game.player.PlayerControllerAi; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; import forge.util.Aggregates; @@ -1238,7 +1239,8 @@ public class ComputerUtil { public static boolean wantMulligan(AIPlayer ai) { final List handList = ai.getCardsIn(ZoneType.Hand); final boolean hasLittleCmc0Cards = CardLists.getValidCards(handList, "Card.cmcEQ0", ai, null).size() < 2; - return (handList.size() > ai.getAi().getIntProperty(AiProps.AI_MULLIGAN_THRESHOLD)) && hasLittleCmc0Cards; + final AiController aic = ((PlayerControllerAi)ai.getController()).getAi(); + return (handList.size() > aic.getIntProperty(AiProps.AI_MULLIGAN_THRESHOLD)) && hasLittleCmc0Cards; } @@ -1368,7 +1370,8 @@ public class ComputerUtil { */ public static List getCardsToDiscardFromFriend(AIPlayer aiChooser, Player p, SpellAbility sa, List validCards, int min, int max) { if (p instanceof AIPlayer) { // ask that ai player what he would like to discard - return ((AIPlayer) p).getAi().getCardsToDiscard(min, max, validCards, sa); + final AiController aic = ((PlayerControllerAi)p.getController()).getAi(); + return aic.getCardsToDiscard(min, max, validCards, sa); } // no special options for human or remote friends return getCardsToDiscardFromOpponent(aiChooser, p, sa, validCards, min, max); diff --git a/src/main/java/forge/game/player/AIPlayer.java b/src/main/java/forge/game/player/AIPlayer.java index f09d46c57cc..880074e62d9 100644 --- a/src/main/java/forge/game/player/AIPlayer.java +++ b/src/main/java/forge/game/player/AIPlayer.java @@ -42,9 +42,4 @@ public class AIPlayer extends Player { super(player, game); controller = new PlayerControllerAi(game, this); } - - public AiController getAi() { - return controller instanceof PlayerControllerAi ? ((PlayerControllerAi) controller).getAi() : null; - } - } // end AIPlayer class