From fae995f1892c7a3aa2b6396ad7fa7273ee88a9c1 Mon Sep 17 00:00:00 2001
From: Maxmtg
Date: Thu, 24 Jan 2013 23:00:51 +0000
Subject: [PATCH] forge.game.ai created - just a small step towards AI
isolation
---
.gitattributes | 13 +-
src/main/java/forge/Card.java | 57 +++++-
src/main/java/forge/GameAction.java | 2 +-
src/main/java/forge/GameActionUtil.java | 2 +-
.../card/abilityfactory/AbilityFactory.java | 2 +-
.../card/abilityfactory/SpellAiLogic.java | 2 +-
.../card/abilityfactory/ai/AttachAi.java | 2 +-
.../card/abilityfactory/ai/ChangeZoneAi.java | 4 +-
.../abilityfactory/ai/ChooseCardNameAi.java | 2 +-
.../card/abilityfactory/ai/CounterAi.java | 2 +-
.../card/abilityfactory/ai/CountersPutAi.java | 2 +-
.../abilityfactory/ai/CountersPutAllAi.java | 2 +-
.../card/abilityfactory/ai/DamageAllAi.java | 2 +-
.../card/abilityfactory/ai/DamageDealAi.java | 2 +-
.../card/abilityfactory/ai/DestroyAi.java | 2 +-
.../card/abilityfactory/ai/DestroyAllAi.java | 2 +-
.../card/abilityfactory/ai/DiscardAi.java | 2 +-
.../forge/card/abilityfactory/ai/DrawAi.java | 2 +-
.../card/abilityfactory/ai/LifeGainAi.java | 2 +-
.../card/abilityfactory/ai/LifeLoseAi.java | 2 +-
.../card/abilityfactory/ai/LifeSetAi.java | 2 +-
.../forge/card/abilityfactory/ai/MillAi.java | 2 +-
.../ai/PermanentCreatureAi.java | 2 +-
.../ai/PermanentNoncreatureAi.java | 2 +-
.../card/abilityfactory/ai/PoisonAi.java | 2 +-
.../forge/card/abilityfactory/ai/PumpAi.java | 2 +-
.../card/abilityfactory/ai/PumpAllAi.java | 2 +-
.../card/abilityfactory/ai/SacrificeAi.java | 2 +-
.../abilityfactory/ai/SacrificeAllAi.java | 2 +-
.../card/abilityfactory/ai/StoreSVarAi.java | 2 +-
.../card/abilityfactory/ai/TapAiBase.java | 2 +-
.../forge/card/abilityfactory/ai/TokenAi.java | 2 +-
.../card/abilityfactory/ai/UnattachAllAi.java | 2 +-
.../abilityfactory/effects/DiscardEffect.java | 2 +-
.../abilityfactory/effects/PlayEffect.java | 2 +-
.../effects/SacrificeEffect.java | 2 +-
.../forge/card/cardfactory/CardFactory.java | 2 +-
.../cardfactory/CardFactoryArtifacts.java | 2 +-
.../cardfactory/CardFactorySorceries.java | 2 +-
.../card/cardfactory/CardFactoryUtil.java | 2 +-
.../java/forge/card/cost/CostDiscard.java | 2 +-
src/main/java/forge/card/cost/CostExile.java | 2 +-
src/main/java/forge/card/cost/CostMana.java | 2 +-
src/main/java/forge/card/cost/CostReturn.java | 2 +-
src/main/java/forge/card/cost/CostReveal.java | 2 +-
.../java/forge/card/cost/CostSacrifice.java | 2 +-
.../java/forge/card/cost/CostTapType.java | 2 +-
.../java/forge/card/cost/CostUntapType.java | 2 +-
src/main/java/forge/card/cost/CostUtil.java | 2 +-
.../card/replacement/ReplacementHandler.java | 2 +-
.../card/spellability/SpellPermanent.java | 9 +-
.../forge/card/trigger/TriggerHandler.java | 2 +-
.../forge/card/trigger/WrappedAbility.java | 2 +-
.../forge/control/input/InputMulligan.java | 2 +-
.../AiController.java} | 172 ++----------------
.../AiInputBlock.java} | 7 +-
.../AiInputCommon.java} | 83 ++++++---
.../game/{player => ai}/ComputerUtil.java | 42 ++++-
.../{player => ai}/ComputerUtilAttack.java | 3 +-
.../{player => ai}/ComputerUtilBlock.java | 3 +-
.../java/forge/game/phase/CombatUtil.java | 4 +-
src/main/java/forge/game/phase/Upkeep.java | 2 +-
src/main/java/forge/game/player/AIPlayer.java | 10 +-
src/main/java/forge/game/player/Computer.java | 56 ------
src/main/java/forge/game/zone/MagicStack.java | 2 +-
65 files changed, 254 insertions(+), 313 deletions(-)
rename src/main/java/forge/game/{player/ComputerAIGeneral.java => ai/AiController.java} (54%)
rename src/main/java/forge/game/{player/ComputerAiInputBlock.java => ai/AiInputBlock.java} (82%)
rename src/main/java/forge/game/{player/ComputerAIInput.java => ai/AiInputCommon.java} (58%)
rename src/main/java/forge/game/{player => ai}/ComputerUtil.java (98%)
rename src/main/java/forge/game/{player => ai}/ComputerUtilAttack.java (99%)
rename src/main/java/forge/game/{player => ai}/ComputerUtilBlock.java (99%)
delete mode 100644 src/main/java/forge/game/player/Computer.java
diff --git a/.gitattributes b/.gitattributes
index aa2e913c3b3..f808adb5506 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -13621,6 +13621,12 @@ src/main/java/forge/game/MatchController.java -text
src/main/java/forge/game/MatchStartHelper.java -text
src/main/java/forge/game/PlanarDice.java -text
src/main/java/forge/game/PlayerStartConditions.java -text
+src/main/java/forge/game/ai/AiController.java svneol=native#text/plain
+src/main/java/forge/game/ai/AiInputBlock.java -text
+src/main/java/forge/game/ai/AiInputCommon.java svneol=native#text/plain
+src/main/java/forge/game/ai/ComputerUtil.java svneol=native#text/plain
+src/main/java/forge/game/ai/ComputerUtilAttack.java svneol=native#text/plain
+src/main/java/forge/game/ai/ComputerUtilBlock.java svneol=native#text/plain
src/main/java/forge/game/event/BlockerAssignedEvent.java -text
src/main/java/forge/game/event/CardDamagedEvent.java -text
src/main/java/forge/game/event/CardDestroyedEvent.java -text
@@ -13676,13 +13682,6 @@ src/main/java/forge/game/phase/Untap.java -text
src/main/java/forge/game/phase/Upkeep.java svneol=native#text/plain
src/main/java/forge/game/phase/package-info.java svneol=native#text/plain
src/main/java/forge/game/player/AIPlayer.java svneol=native#text/plain
-src/main/java/forge/game/player/Computer.java svneol=native#text/plain
-src/main/java/forge/game/player/ComputerAIGeneral.java svneol=native#text/plain
-src/main/java/forge/game/player/ComputerAIInput.java svneol=native#text/plain
-src/main/java/forge/game/player/ComputerAiInputBlock.java -text
-src/main/java/forge/game/player/ComputerUtil.java svneol=native#text/plain
-src/main/java/forge/game/player/ComputerUtilAttack.java svneol=native#text/plain
-src/main/java/forge/game/player/ComputerUtilBlock.java svneol=native#text/plain
src/main/java/forge/game/player/HumanPlayer.java svneol=native#text/plain
src/main/java/forge/game/player/LobbyPlayer.java -text
src/main/java/forge/game/player/Player.java svneol=native#text/plain
diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java
index 7ad63f38d1d..9f2ecfe7aae 100644
--- a/src/main/java/forge/Card.java
+++ b/src/main/java/forge/Card.java
@@ -43,6 +43,7 @@ import forge.card.abilityfactory.ApiType;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.mana.ManaCostBeingPaid;
+import forge.card.replacement.ReplaceMoved;
import forge.card.replacement.ReplacementEffect;
import forge.card.replacement.ReplacementResult;
import forge.card.spellability.AbilityManaPart;
@@ -57,12 +58,12 @@ import forge.card.trigger.TriggerType;
import forge.card.trigger.ZCTrigger;
import forge.game.GameState;
import forge.game.GlobalRuleChange;
+import forge.game.ai.ComputerUtil;
import forge.game.event.CounterAddedEvent;
import forge.game.event.CardEquippedEvent;
import forge.game.event.CounterRemovedEvent;
import forge.game.event.SetTappedEvent;
import forge.game.phase.Combat;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.item.CardDb;
@@ -9069,4 +9070,58 @@ public class Card extends GameEntity implements Comparable {
clearBlockedThisTurn();
}
+ /**
+ *
+ * hasETBTrigger.
+ *
+ *
+ * @param card
+ * a {@link forge.Card} object.
+ * @return a boolean.
+ */
+ public boolean hasETBTrigger() {
+ for (final Trigger tr : this.getTriggers()) {
+ final HashMap params = tr.getMapParams();
+ if (tr.getMode() != TriggerType.ChangesZone) {
+ continue;
+ }
+
+ if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) {
+ continue;
+ }
+
+ if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
+ continue;
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ *
+ * hasETBTrigger.
+ *
+ *
+ * @return a boolean.
+ */
+ public boolean hasETBReplacement() {
+ for (final ReplacementEffect re : getReplacementEffects()) {
+ final HashMap params = re.getMapParams();
+ if (!(re instanceof ReplaceMoved)) {
+ continue;
+ }
+
+ if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) {
+ continue;
+ }
+
+ if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
+ continue;
+ }
+ return true;
+ }
+ return false;
+ }
+
} // end Card class
diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java
index bb44b8dcdbe..7c9b706807c 100644
--- a/src/main/java/forge/GameAction.java
+++ b/src/main/java/forge/GameAction.java
@@ -59,11 +59,11 @@ import forge.game.GameLossReason;
import forge.game.GameState;
import forge.game.GlobalRuleChange;
import forge.game.MatchController;
+import forge.game.ai.ComputerUtil;
import forge.game.event.CardDestroyedEvent;
import forge.game.event.CardRegeneratedEvent;
import forge.game.event.CardSacrificedEvent;
import forge.game.event.DuelOutcomeEvent;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.player.PlayerType;
import forge.game.zone.PlayerZone;
diff --git a/src/main/java/forge/GameActionUtil.java b/src/main/java/forge/GameActionUtil.java
index c49187635ad..4d0350683f4 100644
--- a/src/main/java/forge/GameActionUtil.java
+++ b/src/main/java/forge/GameActionUtil.java
@@ -54,10 +54,10 @@ import forge.control.input.InputPayDiscardCost;
import forge.control.input.InputPayManaCostAbility;
import forge.control.input.InputPayReturnCost;
import forge.game.GameState;
+import forge.game.ai.ComputerUtil;
import forge.game.event.CardDamagedEvent;
import forge.game.event.FlipCoinEvent;
import forge.game.event.LifeLossEvent;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/card/abilityfactory/AbilityFactory.java b/src/main/java/forge/card/abilityfactory/AbilityFactory.java
index b27a3c61379..e28aa824f45 100644
--- a/src/main/java/forge/card/abilityfactory/AbilityFactory.java
+++ b/src/main/java/forge/card/abilityfactory/AbilityFactory.java
@@ -43,8 +43,8 @@ import forge.card.spellability.SpellAbilityCondition;
import forge.card.spellability.SpellAbilityRestriction;
import forge.card.spellability.Target;
import forge.game.GameState;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/abilityfactory/SpellAiLogic.java b/src/main/java/forge/card/abilityfactory/SpellAiLogic.java
index 319a69b0c3c..cb0f956c4e1 100644
--- a/src/main/java/forge/card/abilityfactory/SpellAiLogic.java
+++ b/src/main/java/forge/card/abilityfactory/SpellAiLogic.java
@@ -3,7 +3,7 @@ package forge.card.abilityfactory;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
public abstract class SpellAiLogic {
diff --git a/src/main/java/forge/card/abilityfactory/ai/AttachAi.java b/src/main/java/forge/card/abilityfactory/ai/AttachAi.java
index 28c3f894288..c64c1f1f927 100644
--- a/src/main/java/forge/card/abilityfactory/ai/AttachAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/AttachAi.java
@@ -24,10 +24,10 @@ import forge.card.cost.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.staticability.StaticAbility;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java b/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java
index 9dd3434b458..4f12740a910 100644
--- a/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/ChangeZoneAi.java
@@ -31,11 +31,11 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellPermanent;
import forge.card.spellability.Target;
import forge.game.GlobalRuleChange;
+import forge.game.ai.ComputerUtil;
+import forge.game.ai.ComputerUtilBlock;
import forge.game.phase.Combat;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
-import forge.game.player.ComputerUtilBlock;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java b/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java
index 06832d4bbc8..72e7d5c8b74 100644
--- a/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/ChooseCardNameAi.java
@@ -3,7 +3,7 @@ package forge.card.abilityfactory.ai;
import forge.card.abilityfactory.SpellAiLogic;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
public class ChooseCardNameAi extends SpellAiLogic {
diff --git a/src/main/java/forge/card/abilityfactory/ai/CounterAi.java b/src/main/java/forge/card/abilityfactory/ai/CounterAi.java
index 76cc06d4821..3cdac35b087 100644
--- a/src/main/java/forge/card/abilityfactory/ai/CounterAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/CounterAi.java
@@ -10,7 +10,7 @@ import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.spellability.TargetSelection;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java
index 02f44b4df3a..4b276ff76a5 100644
--- a/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/CountersPutAi.java
@@ -17,8 +17,8 @@ import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java b/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java
index 1c978fa829f..1784e837788 100644
--- a/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/CountersPutAllAi.java
@@ -15,9 +15,9 @@ import forge.card.cost.CostUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java b/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java
index 8b783d29465..dfb9ec48562 100644
--- a/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/DamageAllAi.java
@@ -16,7 +16,7 @@ import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java b/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java
index a1a9b6d95cb..694ad3e0672 100644
--- a/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/DamageDealAi.java
@@ -16,9 +16,9 @@ import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.card.spellability.TargetSelection;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java b/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java
index b2f1f789f01..c9b96d28963 100644
--- a/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/DestroyAi.java
@@ -19,7 +19,7 @@ import forge.card.cost.CostSacrifice;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java b/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java
index de9c26fa0c4..fb69e7ab226 100644
--- a/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/DestroyAllAi.java
@@ -13,7 +13,7 @@ import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java b/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java
index 9beabf01614..0f3e6541b43 100644
--- a/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/DiscardAi.java
@@ -11,8 +11,8 @@ import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/DrawAi.java b/src/main/java/forge/card/abilityfactory/ai/DrawAi.java
index f58e560bf28..12b7cbbcd20 100644
--- a/src/main/java/forge/card/abilityfactory/ai/DrawAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/DrawAi.java
@@ -35,8 +35,8 @@ import forge.card.cost.CostUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java
index df0f88e36a5..b8309d129c8 100644
--- a/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/LifeGainAi.java
@@ -11,9 +11,9 @@ import forge.card.cost.CostUtil;
import forge.card.spellability.AbilitySub;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java
index ef780b16764..755c7008995 100644
--- a/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/LifeLoseAi.java
@@ -11,8 +11,8 @@ import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java b/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java
index 6ea8dc26e8c..0e64f8120ce 100644
--- a/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/LifeSetAi.java
@@ -9,8 +9,8 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellAiLogic;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/MillAi.java b/src/main/java/forge/card/abilityfactory/ai/MillAi.java
index 10980dedb4c..df5f9d242b7 100644
--- a/src/main/java/forge/card/abilityfactory/ai/MillAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/MillAi.java
@@ -11,8 +11,8 @@ import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/PermanentCreatureAi.java b/src/main/java/forge/card/abilityfactory/ai/PermanentCreatureAi.java
index 818a9f5c572..cd8704353be 100644
--- a/src/main/java/forge/card/abilityfactory/ai/PermanentCreatureAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/PermanentCreatureAi.java
@@ -11,8 +11,8 @@ import forge.Singletons;
import forge.card.abilityfactory.SpellAiLogic;
import forge.card.spellability.SpellAbility;
import forge.game.GameState;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/abilityfactory/ai/PermanentNoncreatureAi.java b/src/main/java/forge/card/abilityfactory/ai/PermanentNoncreatureAi.java
index 4bafbc76d3e..54391efcbb5 100644
--- a/src/main/java/forge/card/abilityfactory/ai/PermanentNoncreatureAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/PermanentNoncreatureAi.java
@@ -4,8 +4,8 @@ import forge.Singletons;
import forge.card.abilityfactory.SpellAiLogic;
import forge.card.spellability.SpellAbility;
import forge.game.GameState;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
/**
diff --git a/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java b/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java
index dfc33d04bed..897454f01d9 100644
--- a/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/PoisonAi.java
@@ -10,8 +10,8 @@ import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
public class PoisonAi extends SpellAiLogic {
diff --git a/src/main/java/forge/card/abilityfactory/ai/PumpAi.java b/src/main/java/forge/card/abilityfactory/ai/PumpAi.java
index 3a7c10c187a..e910584e072 100644
--- a/src/main/java/forge/card/abilityfactory/ai/PumpAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/PumpAi.java
@@ -16,9 +16,9 @@ import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityRestriction;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java b/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java
index 61affecb3cf..d04418def66 100644
--- a/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/PumpAllAi.java
@@ -13,9 +13,9 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java b/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java
index 4d5e5e711d4..e04cf487a30 100644
--- a/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/SacrificeAi.java
@@ -8,7 +8,7 @@ import forge.card.abilityfactory.SpellAiLogic;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java b/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java
index 79ff66857a8..a6d6b80b461 100644
--- a/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/SacrificeAllAi.java
@@ -10,7 +10,7 @@ import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java b/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java
index 3b167f58007..058c01788d3 100644
--- a/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/StoreSVarAi.java
@@ -4,8 +4,8 @@ import forge.Card;
import forge.Singletons;
import forge.card.abilityfactory.SpellAiLogic;
import forge.card.spellability.SpellAbility;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.CombatUtil;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
public class StoreSVarAi extends SpellAiLogic {
diff --git a/src/main/java/forge/card/abilityfactory/ai/TapAiBase.java b/src/main/java/forge/card/abilityfactory/ai/TapAiBase.java
index 8a044a63a94..94e52e1de9e 100644
--- a/src/main/java/forge/card/abilityfactory/ai/TapAiBase.java
+++ b/src/main/java/forge/card/abilityfactory/ai/TapAiBase.java
@@ -14,10 +14,10 @@ import forge.card.abilityfactory.SpellAiLogic;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/abilityfactory/ai/TokenAi.java b/src/main/java/forge/card/abilityfactory/ai/TokenAi.java
index c18bfaea4d3..8dad14c9c0c 100644
--- a/src/main/java/forge/card/abilityfactory/ai/TokenAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/TokenAi.java
@@ -10,9 +10,9 @@ import forge.card.cost.Cost;
import forge.card.cost.CostUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java b/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java
index 5ff92ec3923..6e5f7f02269 100644
--- a/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java
+++ b/src/main/java/forge/card/abilityfactory/ai/UnattachAllAi.java
@@ -11,8 +11,8 @@ import forge.card.cardfactory.CardFactoryUtil;
import forge.card.cost.Cost;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java b/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java
index bfa6a942a03..bd1868a05c4 100644
--- a/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java
+++ b/src/main/java/forge/card/abilityfactory/effects/DiscardEffect.java
@@ -14,7 +14,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java b/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java
index 942658e0921..f871e8bfabb 100644
--- a/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java
+++ b/src/main/java/forge/card/abilityfactory/effects/PlayEffect.java
@@ -23,7 +23,7 @@ import forge.card.spellability.Spell;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityRestriction;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java b/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java
index 9a6baa92972..209b4aa5674 100644
--- a/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java
+++ b/src/main/java/forge/card/abilityfactory/effects/SacrificeEffect.java
@@ -9,7 +9,7 @@ import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.abilityfactory.SpellEffect;
import forge.card.spellability.SpellAbility;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java
index f0b9d39597f..3a8926db3a8 100644
--- a/src/main/java/forge/card/cardfactory/CardFactory.java
+++ b/src/main/java/forge/card/cardfactory/CardFactory.java
@@ -33,7 +33,7 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellPermanent;
import forge.card.spellability.Target;
import forge.error.ErrorViewer;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.gui.GuiUtils;
import forge.item.CardDb;
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
index 5ee526a0c61..e9d9d4153c6 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryArtifacts.java
@@ -17,7 +17,7 @@ import forge.card.spellability.AbilityActivated;
import forge.card.spellability.Target;
import forge.control.input.Input;
import forge.control.input.InputSelectManyCards;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.PlayerZone;
import forge.game.zone.Zone;
diff --git a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java
index abac0e177cb..09466d0b0a7 100644
--- a/src/main/java/forge/card/cardfactory/CardFactorySorceries.java
+++ b/src/main/java/forge/card/cardfactory/CardFactorySorceries.java
@@ -48,7 +48,7 @@ import forge.card.spellability.Target;
import forge.control.input.Input;
import forge.control.input.InputPayManaCost;
import forge.control.input.InputPayManaCostAbility;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.player.PlayerUtil;
import forge.game.zone.PlayerZone;
diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java
index 9045d7aea7c..74a0d588ae3 100644
--- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java
+++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java
@@ -70,10 +70,10 @@ import forge.card.trigger.TriggerType;
import forge.control.input.Input;
import forge.control.input.InputPayManaCostUtil;
import forge.game.GameState;
+import forge.game.ai.ComputerUtil;
import forge.game.event.TokenCreatedEvent;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.PlayerZone;
import forge.game.zone.Zone;
diff --git a/src/main/java/forge/card/cost/CostDiscard.java b/src/main/java/forge/card/cost/CostDiscard.java
index 7857af9c011..57c469a7cdb 100644
--- a/src/main/java/forge/card/cost/CostDiscard.java
+++ b/src/main/java/forge/card/cost/CostDiscard.java
@@ -31,7 +31,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/cost/CostExile.java b/src/main/java/forge/card/cost/CostExile.java
index 7d82bf3c67f..dbcbeefcd66 100644
--- a/src/main/java/forge/card/cost/CostExile.java
+++ b/src/main/java/forge/card/cost/CostExile.java
@@ -34,7 +34,7 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellAbilityStackInstance;
import forge.control.input.Input;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/card/cost/CostMana.java b/src/main/java/forge/card/cost/CostMana.java
index 400ab44dee2..5bd2c7d18f4 100644
--- a/src/main/java/forge/card/cost/CostMana.java
+++ b/src/main/java/forge/card/cost/CostMana.java
@@ -27,7 +27,7 @@ import forge.control.input.Input;
import forge.control.input.InputPayManaCost2;
import forge.control.input.InputPayManaX;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
/**
diff --git a/src/main/java/forge/card/cost/CostReturn.java b/src/main/java/forge/card/cost/CostReturn.java
index 680cbf7c52d..234e0535195 100644
--- a/src/main/java/forge/card/cost/CostReturn.java
+++ b/src/main/java/forge/card/cost/CostReturn.java
@@ -30,7 +30,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.match.CMatchUI;
diff --git a/src/main/java/forge/card/cost/CostReveal.java b/src/main/java/forge/card/cost/CostReveal.java
index d878bd94fad..cb0edb069c2 100644
--- a/src/main/java/forge/card/cost/CostReveal.java
+++ b/src/main/java/forge/card/cost/CostReveal.java
@@ -28,7 +28,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/cost/CostSacrifice.java b/src/main/java/forge/card/cost/CostSacrifice.java
index 3b8af46fe29..7fa3db4999a 100644
--- a/src/main/java/forge/card/cost/CostSacrifice.java
+++ b/src/main/java/forge/card/cost/CostSacrifice.java
@@ -30,7 +30,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.match.CMatchUI;
diff --git a/src/main/java/forge/card/cost/CostTapType.java b/src/main/java/forge/card/cost/CostTapType.java
index 02e526b05c4..633c8987f6b 100644
--- a/src/main/java/forge/card/cost/CostTapType.java
+++ b/src/main/java/forge/card/cost/CostTapType.java
@@ -29,7 +29,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/cost/CostUntapType.java b/src/main/java/forge/card/cost/CostUntapType.java
index 762d1b998b6..9ae57fecaaf 100644
--- a/src/main/java/forge/card/cost/CostUntapType.java
+++ b/src/main/java/forge/card/cost/CostUntapType.java
@@ -28,7 +28,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/cost/CostUtil.java b/src/main/java/forge/card/cost/CostUtil.java
index b68758c9c08..a18554eb9b1 100644
--- a/src/main/java/forge/card/cost/CostUtil.java
+++ b/src/main/java/forge/card/cost/CostUtil.java
@@ -27,7 +27,7 @@ import forge.CounterType;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.mana.ManaCostBeingPaid;
import forge.card.spellability.SpellAbility;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/card/replacement/ReplacementHandler.java b/src/main/java/forge/card/replacement/ReplacementHandler.java
index 563f25a825f..5e63379bbcf 100644
--- a/src/main/java/forge/card/replacement/ReplacementHandler.java
+++ b/src/main/java/forge/card/replacement/ReplacementHandler.java
@@ -28,7 +28,7 @@ import forge.Singletons;
import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
diff --git a/src/main/java/forge/card/spellability/SpellPermanent.java b/src/main/java/forge/card/spellability/SpellPermanent.java
index 80784d24e7a..57d28ddc102 100644
--- a/src/main/java/forge/card/spellability/SpellPermanent.java
+++ b/src/main/java/forge/card/spellability/SpellPermanent.java
@@ -42,9 +42,8 @@ import forge.card.trigger.Trigger;
import forge.card.trigger.TriggerType;
import forge.control.input.Input;
import forge.game.GlobalRuleChange;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerAIGeneral;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.view.ButtonUtil;
@@ -299,7 +298,7 @@ public class SpellPermanent extends Spell {
}
// save cards with flash for surprise blocking
if (card.hasKeyword("Flash")
- && !ComputerAIGeneral.hasETBTrigger(card)
+ && !card.hasETBTrigger()
&& (Singletons.getModel().getGame().getPhaseHandler().isPlayerTurn(ai)
|| Singletons.getModel().getGame().getPhaseHandler().getPhase().isBefore(PhaseType.COMBAT_DECLARE_ATTACKERS_INSTANT_ABILITY))) {
return false;
@@ -381,8 +380,8 @@ public class SpellPermanent extends Spell {
}
if (card.isCreature() && (card.getNetDefense() <= 0) && !card.hasStartOfKeyword("etbCounter")
- && mana.countX() == 0 && !ComputerAIGeneral.hasETBTrigger(card)
- && !ComputerAIGeneral.hasETBReplacement(card)) {
+ && mana.countX() == 0 && !card.hasETBTrigger()
+ && !card.hasETBReplacement()) {
return false;
}
diff --git a/src/main/java/forge/card/trigger/TriggerHandler.java b/src/main/java/forge/card/trigger/TriggerHandler.java
index 9aaa6b2b32f..dba4bec2da4 100644
--- a/src/main/java/forge/card/trigger/TriggerHandler.java
+++ b/src/main/java/forge/card/trigger/TriggerHandler.java
@@ -36,9 +36,9 @@ import forge.card.spellability.SpellAbility;
import forge.card.spellability.Target;
import forge.game.GameState;
import forge.game.GlobalRuleChange;
+import forge.game.ai.ComputerUtil;
import forge.game.phase.PhaseType;
//import forge.util.TextUtil;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/card/trigger/WrappedAbility.java b/src/main/java/forge/card/trigger/WrappedAbility.java
index ad6788c7181..74fe2204e1e 100644
--- a/src/main/java/forge/card/trigger/WrappedAbility.java
+++ b/src/main/java/forge/card/trigger/WrappedAbility.java
@@ -20,7 +20,7 @@ import forge.card.spellability.SpellAbilityRestriction;
import forge.card.spellability.Target;
import forge.control.input.Input;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
// Wrapper ability that checks the requirements again just before
diff --git a/src/main/java/forge/control/input/InputMulligan.java b/src/main/java/forge/control/input/InputMulligan.java
index 180168d5eae..a43dde3d47d 100644
--- a/src/main/java/forge/control/input/InputMulligan.java
+++ b/src/main/java/forge/control/input/InputMulligan.java
@@ -33,7 +33,7 @@ import forge.card.abilityfactory.AbilityFactory;
import forge.card.spellability.SpellAbility;
import forge.game.GameState;
import forge.game.GameType;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.Zone;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/game/player/ComputerAIGeneral.java b/src/main/java/forge/game/ai/AiController.java
similarity index 54%
rename from src/main/java/forge/game/player/ComputerAIGeneral.java
rename to src/main/java/forge/game/ai/AiController.java
index 3e0ec91b1cd..abf72ff9402 100644
--- a/src/main/java/forge/game/player/ComputerAIGeneral.java
+++ b/src/main/java/forge/game/ai/AiController.java
@@ -15,24 +15,18 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package forge.game.player;
+package forge.game.ai;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import com.esotericsoftware.minlog.Log;
import forge.Card;
import forge.card.abilityfactory.ApiType;
-import forge.card.cardfactory.CardFactoryUtil;
-import forge.card.replacement.ReplaceMoved;
-import forge.card.replacement.ReplacementEffect;
import forge.card.spellability.SpellAbility;
import forge.card.spellability.SpellPermanent;
-import forge.card.trigger.Trigger;
-import forge.card.trigger.TriggerType;
import forge.game.GameState;
+import forge.game.player.Player;
import forge.game.zone.ZoneType;
/**
@@ -43,7 +37,7 @@ import forge.game.zone.ZoneType;
* @author Forge
* @version $Id$
*/
-public class ComputerAIGeneral implements Computer {
+public class AiController {
private final Player player;
private final GameState game;
@@ -52,66 +46,11 @@ public class ComputerAIGeneral implements Computer {
* Constructor for ComputerAI_General.
*
*/
- public ComputerAIGeneral(final Player computerPlayer, final GameState game0) {
+ public AiController(final Player computerPlayer, final GameState game0) {
player = computerPlayer;
game = game0;
}
- /**
- *
- * main.
- *
- */
- @Override
- public final void playLands()
- {
- List landsWannaPlay = ComputerUtil.getLandsToPlay(player);
-
- while(landsWannaPlay != null && !landsWannaPlay.isEmpty() && player.canPlayLand()) {
- Card land = ComputerUtil.chooseBestLandToPlay(landsWannaPlay, player);
- landsWannaPlay.remove(land);
- player.playLand(land);
- }
- }
-
-
- /**
- *
- * hasACardGivingHaste.
- *
- *
- * @return a boolean.
- */
- public static boolean hasACardGivingHaste(final Player ai) {
- final List all = new ArrayList(ai.getCardsIn(ZoneType.Battlefield));
- all.addAll(CardFactoryUtil.getExternalZoneActivationCards(ai));
- all.addAll(ai.getCardsIn(ZoneType.Hand));
-
- for (final Card c : all) {
- for (final SpellAbility sa : c.getSpellAbility()) {
-
- if (sa.getApi() == null) {
- continue;
- }
-
- /// ????
- // if ( sa.isAbility() || sa.isSpell() && sa.getApi() != ApiType.Pump ) continue
- if (sa.hasParam("AB") && !sa.getParam("AB").equals("Pump")) {
- continue;
- }
- if (sa.hasParam("SP") && !sa.getParam("SP").equals("Pump")) {
- continue;
- }
-
- if (sa.hasParam("KW") && sa.getParam("KW").contains("Haste")) {
- return true;
- }
- }
- }
-
- return false;
- } // hasACardGivingHaste
-
/**
*
* getAvailableSpellAbilities.
@@ -120,77 +59,21 @@ public class ComputerAIGeneral implements Computer {
* @return a {@link forge.CardList} object.
*/
private List getAvailableCards() {
-
- final Player opp = player.getOpponent();
List all = new ArrayList(player.getCardsIn(ZoneType.Hand));
- all.addAll(player.getCardsIn(ZoneType.Battlefield));
- all.addAll(player.getCardsIn(ZoneType.Exile));
+ //all.addAll(player.getCardsIn(ZoneType.Battlefield));
+ //all.addAll(player.getCardsIn(ZoneType.Exile));
all.addAll(player.getCardsIn(ZoneType.Graveyard));
all.addAll(player.getCardsIn(ZoneType.Command));
if (!player.getCardsIn(ZoneType.Library).isEmpty()) {
all.add(player.getCardsIn(ZoneType.Library).get(0));
}
- all.addAll(opp.getCardsIn(ZoneType.Exile));
- all.addAll(opp.getCardsIn(ZoneType.Battlefield));
+ for(Player p : game.getPlayers()) {
+ all.addAll(p.getCardsIn(ZoneType.Exile));
+ all.addAll(p.getCardsIn(ZoneType.Battlefield));
+ }
return all;
}
- /**
- *
- * hasETBTrigger.
- *
- *
- * @param card
- * a {@link forge.Card} object.
- * @return a boolean.
- */
- public static boolean hasETBTrigger(final Card card) {
- for (final Trigger tr : card.getTriggers()) {
- final HashMap params = tr.getMapParams();
- if (tr.getMode() != TriggerType.ChangesZone) {
- continue;
- }
-
- if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) {
- continue;
- }
-
- if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
- continue;
- }
- return true;
- }
- return false;
- }
-
- /**
- *
- * hasETBTrigger.
- *
- *
- * @param card
- * a {@link forge.Card} object.
- * @return a boolean.
- */
- public static boolean hasETBReplacement(final Card card) {
- for (final ReplacementEffect re : card.getReplacementEffects()) {
- final HashMap params = re.getMapParams();
- if (!(re instanceof ReplaceMoved)) {
- continue;
- }
-
- if (!params.get("Destination").equals(ZoneType.Battlefield.toString())) {
- continue;
- }
-
- if (params.containsKey("ValidCard") && !params.get("ValidCard").contains("Self")) {
- continue;
- }
- return true;
- }
- return false;
- }
-
/**
*
* getPossibleETBCounters.
@@ -271,40 +154,13 @@ public class ComputerAIGeneral implements Computer {
* declare_attackers.
*
*/
- @Override
- public final void declareAttackers() {
- // 12/2/10(sol) the decision making here has moved to getAttackers()
- game.setCombat(ComputerUtil.getAttackers(player));
-
- final List att = game.getCombat().getAttackers();
- if (!att.isEmpty()) {
- game.getPhaseHandler().setCombat(true);
- }
-
- for (final Card element : att) {
- // tapping of attackers happens after Propaganda is paid for
- final StringBuilder sb = new StringBuilder();
- sb.append("Computer just assigned ").append(element.getName()).append(" as an attacker.");
- Log.debug(sb.toString());
- }
-
- player.getZone(ZoneType.Battlefield).updateObservers();
-
- game.getPhaseHandler().setPlayersPriorityPermission(false);
-
- // ai is about to attack, cancel all phase skipping
- for (Player p : game.getPlayers()) {
- p.getController().autoPassCancel();
- }
- }
-
/**
*
* stack_not_empty.
*
*/
- @Override
+
public final List getSpellAbilitiesToPlay() {
// if top of stack is owned by me
if (!game.getStack().isEmpty() && game.getStack().peekInstance().getActivatingPlayer().equals(player)) {
@@ -326,7 +182,11 @@ public class ComputerAIGeneral implements Computer {
return ComputerUtil.playSpellAbilities(player, getSpellAbilities(cards), game);
}
- @Override
+ public GameState getGame()
+ {
+ return game;
+ }
+
public Player getPlayer()
{
return player;
diff --git a/src/main/java/forge/game/player/ComputerAiInputBlock.java b/src/main/java/forge/game/ai/AiInputBlock.java
similarity index 82%
rename from src/main/java/forge/game/player/ComputerAiInputBlock.java
rename to src/main/java/forge/game/ai/AiInputBlock.java
index 604d59c4199..bf3bc2abb70 100644
--- a/src/main/java/forge/game/player/ComputerAiInputBlock.java
+++ b/src/main/java/forge/game/ai/AiInputBlock.java
@@ -1,4 +1,4 @@
-package forge.game.player;
+package forge.game.ai;
import java.util.List;
@@ -6,12 +6,13 @@ import forge.Card;
import forge.control.input.Input;
import forge.game.GameState;
import forge.game.phase.CombatUtil;
+import forge.game.player.Player;
/**
* TODO: Write javadoc for this type.
*
*/
-public class ComputerAiInputBlock extends Input {
+public class AiInputBlock extends Input {
private final GameState game;
/**
@@ -19,7 +20,7 @@ public class ComputerAiInputBlock extends Input {
* @param game
* @param player
*/
- public ComputerAiInputBlock(GameState game, Player player) {
+ public AiInputBlock(GameState game, Player player) {
super();
this.game = game;
this.player = player;
diff --git a/src/main/java/forge/game/player/ComputerAIInput.java b/src/main/java/forge/game/ai/AiInputCommon.java
similarity index 58%
rename from src/main/java/forge/game/player/ComputerAIInput.java
rename to src/main/java/forge/game/ai/AiInputCommon.java
index 3d9e4200e75..4c9ddd1d0b7 100644
--- a/src/main/java/forge/game/player/ComputerAIInput.java
+++ b/src/main/java/forge/game/ai/AiInputCommon.java
@@ -15,17 +15,19 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package forge.game.player;
+package forge.game.ai;
import java.util.List;
import com.esotericsoftware.minlog.Log;
-import forge.Singletons;
+import forge.Card;
import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.game.GameState;
import forge.game.phase.PhaseType;
+import forge.game.player.Player;
+import forge.game.zone.ZoneType;
/**
*
@@ -35,11 +37,13 @@ import forge.game.phase.PhaseType;
* @author Forge
* @version $Id$
*/
-public class ComputerAIInput extends Input {
+public class AiInputCommon extends Input {
/** Constant serialVersionUID=-3091338639571662216L. */
private static final long serialVersionUID = -3091338639571662216L;
- private final Computer computer;
+ private final AiController computer;
+ private final Player player;
+ private final GameState game;
/**
*
@@ -49,15 +53,17 @@ public class ComputerAIInput extends Input {
* @param iComputer
* a {@link forge.game.player.Computer} object.
*/
- public ComputerAIInput(final Computer iComputer) {
+ public AiInputCommon(final AiController iComputer) {
this.computer = iComputer;
+ player = computer.getPlayer();
+ this.game = computer.getGame();
}
/** {@inheritDoc} */
@Override
public final void showMessage() {
// should not think when the game is over
- if (Singletons.getModel().getGame().isGameOver()) {
+ if (game.isGameOver()) {
return;
}
@@ -68,7 +74,7 @@ public class ComputerAIInput extends Input {
* send the \"Stack Report\" and the
* \"Detailed Error Trace\" to the Forge forum.");
*/
- GameState game = Singletons.getModel().getGame();
+
final PhaseType phase = game.getPhaseHandler().getPhase();
if (game.getStack().size() > 0) {
@@ -76,14 +82,13 @@ public class ComputerAIInput extends Input {
} else {
switch(phase) {
case COMBAT_DECLARE_ATTACKERS:
- this.computer.declareAttackers();
-
+ declareAttackers();
break;
case MAIN1:
case MAIN2:
Log.debug("Computer " + phase.toString());
- this.computer.playLands();
+ playLands();
// fall through is intended
default:
playSpellAbilities(game);
@@ -93,29 +98,61 @@ public class ComputerAIInput extends Input {
game.getPhaseHandler().passPriority();
} // getMessage();
+ /**
+ * TODO: Write javadoc for this method.
+ */
+ private void declareAttackers() {
+ // 12/2/10(sol) the decision making here has moved to getAttackers()
+ game.setCombat(ComputerUtil.getAttackers(player));
+
+ final List att = game.getCombat().getAttackers();
+ if (!att.isEmpty()) {
+ game.getPhaseHandler().setCombat(true);
+ }
+
+ for (final Card element : att) {
+ // tapping of attackers happens after Propaganda is paid for
+ final StringBuilder sb = new StringBuilder();
+ sb.append("Computer just assigned ").append(element.getName()).append(" as an attacker.");
+ Log.debug(sb.toString());
+ }
+
+ player.getZone(ZoneType.Battlefield).updateObservers();
+
+ game.getPhaseHandler().setPlayersPriorityPermission(false);
+
+ // ai is about to attack, cancel all phase skipping
+ for (Player p : game.getPlayers()) {
+ p.getController().autoPassCancel();
+ }
+ }
+
+ /**
+ * TODO: Write javadoc for this method.
+ */
+ private void playLands() {
+ final Player player = computer.getPlayer();
+ List landsWannaPlay = ComputerUtil.getLandsToPlay(player);
+
+ while(landsWannaPlay != null && !landsWannaPlay.isEmpty() && player.canPlayLand()) {
+ Card land = ComputerUtil.chooseBestLandToPlay(landsWannaPlay, player);
+ landsWannaPlay.remove(land);
+ player.playLand(land);
+ }
+ }
+
protected void playSpellAbilities(final GameState game)
{
- Player ai = computer.getPlayer();
List toPlay = computer.getSpellAbilitiesToPlay();
if ( toPlay != null ) {
for(SpellAbility sa : toPlay) {
//System.out.print(sa);
- if (ComputerUtil.canBePlayedAndPayedByAI(ai, sa))
- ComputerUtil.handlePlayingSpellAbility(ai, sa, game);
+ if (ComputerUtil.canBePlayedAndPayedByAI(player, sa))
+ ComputerUtil.handlePlayingSpellAbility(player, sa, game);
}
}
}
- /**
- *
- * Getter for the field computer.
- *
- *
- * @return a {@link forge.game.player.Computer} object.
- */
- public final Computer getComputer() {
- return this.computer;
- }
/* (non-Javadoc)
* @see forge.control.input.Input#isClassUpdated()
diff --git a/src/main/java/forge/game/player/ComputerUtil.java b/src/main/java/forge/game/ai/ComputerUtil.java
similarity index 98%
rename from src/main/java/forge/game/player/ComputerUtil.java
rename to src/main/java/forge/game/ai/ComputerUtil.java
index f87f62f50bb..9ea89c57756 100644
--- a/src/main/java/forge/game/player/ComputerUtil.java
+++ b/src/main/java/forge/game/ai/ComputerUtil.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package forge.game.player;
+package forge.game.ai;
import java.util.ArrayList;
import java.util.Collections;
@@ -64,6 +64,7 @@ import forge.game.phase.Combat;
import forge.game.phase.CombatUtil;
import forge.game.phase.PhaseHandler;
import forge.game.phase.PhaseType;
+import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.gui.GuiChoose;
import forge.util.Aggregates;
@@ -2089,7 +2090,7 @@ public class ComputerUtil {
if (card.getSVar("PlayMain1").equals("TRUE")) {
return true;
}
- if ((card.isCreature() && (ComputerAIGeneral.hasACardGivingHaste(ai)
+ if ((card.isCreature() && (ComputerUtil.hasACardGivingHaste(ai)
|| card.hasKeyword("Haste"))) || card.hasKeyword("Exalted")) {
return true;
}
@@ -2265,4 +2266,41 @@ public class ComputerUtil {
return r.nextFloat() <= Math.pow(.95, activations);
}
+
+ /**
+ *
+ * hasACardGivingHaste.
+ *
+ *
+ * @return a boolean.
+ */
+ public static boolean hasACardGivingHaste(final Player ai) {
+ final List all = new ArrayList(ai.getCardsIn(ZoneType.Battlefield));
+ all.addAll(CardFactoryUtil.getExternalZoneActivationCards(ai));
+ all.addAll(ai.getCardsIn(ZoneType.Hand));
+
+ for (final Card c : all) {
+ for (final SpellAbility sa : c.getSpellAbility()) {
+
+ if (sa.getApi() == null) {
+ continue;
+ }
+
+ /// ????
+ // if ( sa.isAbility() || sa.isSpell() && sa.getApi() != ApiType.Pump ) continue
+ if (sa.hasParam("AB") && !sa.getParam("AB").equals("Pump")) {
+ continue;
+ }
+ if (sa.hasParam("SP") && !sa.getParam("SP").equals("Pump")) {
+ continue;
+ }
+
+ if (sa.hasParam("KW") && sa.getParam("KW").contains("Haste")) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ } // hasACardGivingHaste
}
diff --git a/src/main/java/forge/game/player/ComputerUtilAttack.java b/src/main/java/forge/game/ai/ComputerUtilAttack.java
similarity index 99%
rename from src/main/java/forge/game/player/ComputerUtilAttack.java
rename to src/main/java/forge/game/ai/ComputerUtilAttack.java
index f858649c04e..f8052e822ce 100644
--- a/src/main/java/forge/game/player/ComputerUtilAttack.java
+++ b/src/main/java/forge/game/ai/ComputerUtilAttack.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package forge.game.player;
+package forge.game.ai;
import java.util.ArrayList;
import java.util.List;
@@ -35,6 +35,7 @@ import forge.card.trigger.TriggerType;
import forge.game.GameState;
import forge.game.phase.Combat;
import forge.game.phase.CombatUtil;
+import forge.game.player.Player;
import forge.game.zone.ZoneType;
import forge.util.MyRandom;
diff --git a/src/main/java/forge/game/player/ComputerUtilBlock.java b/src/main/java/forge/game/ai/ComputerUtilBlock.java
similarity index 99%
rename from src/main/java/forge/game/player/ComputerUtilBlock.java
rename to src/main/java/forge/game/ai/ComputerUtilBlock.java
index 6b8c91acc3c..5c1798d78ab 100644
--- a/src/main/java/forge/game/player/ComputerUtilBlock.java
+++ b/src/main/java/forge/game/ai/ComputerUtilBlock.java
@@ -15,7 +15,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
-package forge.game.player;
+package forge.game.ai;
import java.util.ArrayList;
import java.util.List;
@@ -32,6 +32,7 @@ import forge.GameEntity;
import forge.card.cardfactory.CardFactoryUtil;
import forge.game.phase.Combat;
import forge.game.phase.CombatUtil;
+import forge.game.player.Player;
/**
diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java
index 5623b5345fe..98d9af1c631 100644
--- a/src/main/java/forge/game/phase/CombatUtil.java
+++ b/src/main/java/forge/game/phase/CombatUtil.java
@@ -57,8 +57,8 @@ import forge.card.trigger.TriggerHandler;
import forge.card.trigger.TriggerType;
import forge.game.GameState;
import forge.game.GlobalRuleChange;
-import forge.game.player.ComputerUtil;
-import forge.game.player.ComputerUtilBlock;
+import forge.game.ai.ComputerUtil;
+import forge.game.ai.ComputerUtilBlock;
import forge.game.player.Player;
import forge.game.zone.PlayerZone;
import forge.game.zone.ZoneType;
diff --git a/src/main/java/forge/game/phase/Upkeep.java b/src/main/java/forge/game/phase/Upkeep.java
index 4d072489b4c..dba51758569 100644
--- a/src/main/java/forge/game/phase/Upkeep.java
+++ b/src/main/java/forge/game/phase/Upkeep.java
@@ -45,7 +45,7 @@ import forge.card.spellability.SpellAbility;
import forge.control.input.Input;
import forge.control.input.InputSelectManyCards;
import forge.game.GameState;
-import forge.game.player.ComputerUtil;
+import forge.game.ai.ComputerUtil;
import forge.game.player.Player;
import forge.game.zone.PlayerZone;
import forge.game.zone.Zone;
diff --git a/src/main/java/forge/game/player/AIPlayer.java b/src/main/java/forge/game/player/AIPlayer.java
index 316e8c9be81..610bdb103bd 100644
--- a/src/main/java/forge/game/player/AIPlayer.java
+++ b/src/main/java/forge/game/player/AIPlayer.java
@@ -28,6 +28,10 @@ import forge.CardPredicates;
import forge.card.cardfactory.CardFactoryUtil;
import forge.card.spellability.SpellAbility;
import forge.game.GameState;
+import forge.game.ai.AiController;
+import forge.game.ai.AiInputBlock;
+import forge.game.ai.AiInputCommon;
+import forge.game.ai.ComputerUtil;
import forge.game.zone.ZoneType;
import forge.util.Aggregates;
import forge.util.MyRandom;
@@ -42,6 +46,7 @@ import forge.util.MyRandom;
*/
public class AIPlayer extends Player {
+ private final AiController brains;
/**
*
* Constructor for AIPlayer.
@@ -53,8 +58,9 @@ public class AIPlayer extends Player {
*/
public AIPlayer(final LobbyPlayer player, final GameState game) {
super(player, game, new PlayerController());
- getController().setDefaultInput(new ComputerAIInput(new ComputerAIGeneral(this, game)));
- getController().setBlockInput(new ComputerAiInputBlock(game, this));
+ brains = new AiController(this, game);
+ getController().setDefaultInput(new AiInputCommon(brains));
+ getController().setBlockInput(new AiInputBlock(game, this));
}
diff --git a/src/main/java/forge/game/player/Computer.java b/src/main/java/forge/game/player/Computer.java
deleted file mode 100644
index 2a8a7371011..00000000000
--- a/src/main/java/forge/game/player/Computer.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Forge: Play Magic: the Gathering.
- * Copyright (C) 2011 Forge Team
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package forge.game.player;
-
-import java.util.List;
-
-import forge.card.spellability.SpellAbility;
-
-/**
- *
- * Computer interface.
- *
- *
- * @author Forge
- * @version $Id$
- */
-public interface Computer {
-
- /**
- *
- * declare_attackers.
- *
- */
- void declareAttackers();
-
-
- /**
- *
- * stack_not_empty.
- *
- */
- List getSpellAbilitiesToPlay();
-
- /**
- * TODO: Write javadoc for this method.
- */
- void playLands();
-
- public Player getPlayer();
-
-}
diff --git a/src/main/java/forge/game/zone/MagicStack.java b/src/main/java/forge/game/zone/MagicStack.java
index 0aeff14037c..f6acd323288 100644
--- a/src/main/java/forge/game/zone/MagicStack.java
+++ b/src/main/java/forge/game/zone/MagicStack.java
@@ -52,9 +52,9 @@ import forge.card.trigger.TriggerType;
import forge.control.input.Input;
import forge.control.input.InputPayManaCostAbility;
import forge.game.GameState;
+import forge.game.ai.ComputerUtil;
import forge.game.event.SpellResolvedEvent;
import forge.game.phase.PhaseType;
-import forge.game.player.ComputerUtil;
import forge.game.player.Player;
import forge.gui.GuiChoose;
import forge.gui.framework.EDocID;