diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index cce3219276d..fdc52790d6f 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -139,7 +139,7 @@ public class ComputerUtilCost { if (source.getAbilityText().contains("Bloodrush")) { continue; } else if (ai.getGame().getPhaseHandler().is(PhaseType.END_OF_TURN, ai) - && ai.getCardsIn(ZoneType.Hand).size() > ai.getMaxHandSize()) { + && !ai.isUnlimitedHandSize() && ai.getCardsIn(ZoneType.Hand).size() > ai.getMaxHandSize()) { // Better do something than just discard stuff return true; } diff --git a/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java b/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java index 6ecdd9098d6..400db29d152 100644 --- a/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java +++ b/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java @@ -73,7 +73,7 @@ public abstract class SpellAbilityAi { if (sa.hasParam("AILogic")) { final String logic = sa.getParam("AILogic"); final boolean alwaysOnDiscard = "AlwaysOnDiscard".equals(logic) && ai.getGame().getPhaseHandler().is(PhaseType.END_OF_TURN, ai) - && ai.getCardsIn(ZoneType.Hand).size() > ai.getMaxHandSize(); + && !ai.isUnlimitedHandSize() && ai.getCardsIn(ZoneType.Hand).size() > ai.getMaxHandSize(); if (!checkAiLogic(ai, sa, logic)) { return false; } diff --git a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java index 042b1aebbf3..363115939f3 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java @@ -233,7 +233,7 @@ public class AttachAi extends SpellAbilityAi { boolean hasFloatMana = ai.getManaPool().totalMana() > 0; boolean willDiscardNow = game.getPhaseHandler().is(PhaseType.END_OF_TURN, ai) - && ai.getCardsIn(ZoneType.Hand).size() > ai.getMaxHandSize(); + && !ai.isUnlimitedHandSize() && ai.getCardsIn(ZoneType.Hand).size() > ai.getMaxHandSize(); boolean willDieNow = combat != null && ComputerUtilCombat.lifeInSeriousDanger(ai, combat); boolean willRespondToStack = canRespondToStack && MyRandom.percentTrue(chanceToRespondToStack); boolean willCastEarly = MyRandom.percentTrue(chanceToCastEarly); diff --git a/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java b/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java index ebcd6892e0f..05d98d165f7 100644 --- a/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java +++ b/forge-ai/src/main/java/forge/ai/ability/DamageAiBase.java @@ -119,7 +119,7 @@ public abstract class DamageAiBase extends SpellAbilityAi { PhaseHandler phase = game.getPhaseHandler(); // If this is a spell, cast it instead of discarding if ((phase.is(PhaseType.END_OF_TURN) || phase.is(PhaseType.MAIN2)) - && phase.isPlayerTurn(comp) && (hand.size() > comp.getMaxHandSize())) { + && phase.isPlayerTurn(comp) && hand.size() > comp.getMaxHandSize()) { return true; } diff --git a/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java b/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java index 0e95d23db25..924c8e86784 100644 --- a/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/PermanentCreatureAi.java @@ -140,7 +140,7 @@ public class PermanentCreatureAi extends PermanentAi { boolean hasAmbushAI = card.hasSVar("AmbushAI"); boolean defOnlyAmbushAI = hasAmbushAI && "BlockOnly".equals(card.getSVar("AmbushAI")); boolean hasFloatMana = ai.getManaPool().totalMana() > 0; - boolean willDiscardNow = isOwnEOT && ai.getCardsIn(ZoneType.Hand).size() > ai.getMaxHandSize(); + boolean willDiscardNow = isOwnEOT && !ai.isUnlimitedHandSize() && ai.getCardsIn(ZoneType.Hand).size() > ai.getMaxHandSize(); boolean willDieNow = combat != null && ComputerUtilCombat.lifeInSeriousDanger(ai, combat); boolean wantToCastInMain1 = ph.is(PhaseType.MAIN1, ai) && ComputerUtil.castPermanentInMain1(ai, sa); boolean isCommander = card.isCommander();