From 13695a5d497f9901c19deea9ea0cfccba6a170ff Mon Sep 17 00:00:00 2001 From: TRT <> Date: Fri, 27 Aug 2021 22:38:36 +0200 Subject: [PATCH 1/4] Correctly setup ChooseCompanionAi --- forge-ai/src/main/java/forge/ai/SpellApiToAi.java | 1 + .../java/forge/ai/ability/CanPlayAsDrawbackAi.java | 10 ---------- .../java/forge/ai/ability/CountersProliferateAi.java | 2 -- .../src/main/java/forge/ai/ability/UnattachAllAi.java | 1 - .../game/ability/effects/CopySpellAbilityEffect.java | 3 +-- .../java/forge/game/ability/effects/EndTurnEffect.java | 1 - .../forge/game/ability/effects/FlipCoinEffect.java | 4 ++-- forge-game/src/main/java/forge/game/combat/Combat.java | 6 ++---- forge-game/src/main/java/forge/game/player/Player.java | 2 +- 9 files changed, 7 insertions(+), 23 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/SpellApiToAi.java b/forge-ai/src/main/java/forge/ai/SpellApiToAi.java index c04f5ce1816..45cd74ab065 100644 --- a/forge-ai/src/main/java/forge/ai/SpellApiToAi.java +++ b/forge-ai/src/main/java/forge/ai/SpellApiToAi.java @@ -53,6 +53,7 @@ public enum SpellApiToAi { .put(ApiType.ClassLevelUp, AlwaysPlayAi.class) .put(ApiType.Cleanup, AlwaysPlayAi.class) .put(ApiType.Clone, CloneAi.class) + .put(ApiType.CompanionChoose, ChooseCompanionAi.class) .put(ApiType.CopyPermanent, CopyPermanentAi.class) .put(ApiType.CopySpellAbility, CopySpellAbilityAi.class) .put(ApiType.ControlPlayer, CannotPlayAi.class) diff --git a/forge-ai/src/main/java/forge/ai/ability/CanPlayAsDrawbackAi.java b/forge-ai/src/main/java/forge/ai/ability/CanPlayAsDrawbackAi.java index 98cc44d1e39..2e303b29776 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CanPlayAsDrawbackAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CanPlayAsDrawbackAi.java @@ -1,9 +1,5 @@ package forge.ai.ability; - -import java.util.List; -import java.util.Map; - import forge.ai.SpellAbilityAi; import forge.game.player.Player; import forge.game.spellability.SpellAbility; @@ -36,10 +32,4 @@ public class CanPlayAsDrawbackAi extends SpellAbilityAi { return false; } - @Override - public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells, - Map params) { - // This might be called from CopySpellAbilityEffect - to hide warning (for having no overload) use this simple overload - return spells.get(0); - } } diff --git a/forge-ai/src/main/java/forge/ai/ability/CountersProliferateAi.java b/forge-ai/src/main/java/forge/ai/ability/CountersProliferateAi.java index e95b3282b4d..1015832cf06 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CountersProliferateAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CountersProliferateAi.java @@ -27,7 +27,6 @@ public class CountersProliferateAi extends SpellAbilityAi { @Override protected boolean checkApiLogic(Player ai, SpellAbility sa) { - final List cperms = Lists.newArrayList(); final List allies = ai.getAllies(); allies.add(ai); @@ -87,7 +86,6 @@ public class CountersProliferateAi extends SpellAbilityAi { })); } - return !cperms.isEmpty() || !hperms.isEmpty() || opponentPoison || allyExpOrEnergy; } diff --git a/forge-ai/src/main/java/forge/ai/ability/UnattachAllAi.java b/forge-ai/src/main/java/forge/ai/ability/UnattachAllAi.java index 1e017a982d8..2bd45aa83ca 100644 --- a/forge-ai/src/main/java/forge/ai/ability/UnattachAllAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/UnattachAllAi.java @@ -22,7 +22,6 @@ public class UnattachAllAi extends SpellAbilityAi { */ @Override protected boolean canPlayAI(Player ai, SpellAbility sa) { - // prevent run-away activations - first time will always return true boolean chance = MyRandom.getRandom().nextFloat() <= .9; diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java index 3e86ebde7c1..5af20e90dfc 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CopySpellAbilityEffect.java @@ -154,8 +154,7 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect { copies.add(copy); } } - } - else { + } else { for (int i = 0; i < amount; i++) { SpellAbility copy = CardFactory.copySpellAbilityAndPossiblyHost(sa, chosenSA, controller); if (sa.hasParam("MayChooseTarget")) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/EndTurnEffect.java b/forge-game/src/main/java/forge/game/ability/effects/EndTurnEffect.java index 882270f1f46..73b4dedbdb1 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/EndTurnEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/EndTurnEffect.java @@ -1,6 +1,5 @@ package forge.game.ability.effects; - import java.util.List; import com.google.common.collect.Lists; diff --git a/forge-game/src/main/java/forge/game/ability/effects/FlipCoinEffect.java b/forge-game/src/main/java/forge/game/ability/effects/FlipCoinEffect.java index 498b4745704..8097bdb169a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/FlipCoinEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/FlipCoinEffect.java @@ -81,7 +81,7 @@ public class FlipCoinEffect extends SpellAbilityEffect { int countHeads = 0; int countTails = 0; - for(int i = 0; i < amount; ++i) { + for (int i = 0; i < amount; ++i) { final boolean resultIsHeads = flipCoinNoCall(sa, flipper, flipMultiplier, varName); if (resultIsHeads) { @@ -118,7 +118,7 @@ public class FlipCoinEffect extends SpellAbilityEffect { int countWins = 0; int countLosses = 0; - for(int i = 0; i < amount; ++i) { + for (int i = 0; i < amount; ++i) { final boolean win = flipCoinCall(caller.get(0), sa, flipMultiplier, varName); if (win) { diff --git a/forge-game/src/main/java/forge/game/combat/Combat.java b/forge-game/src/main/java/forge/game/combat/Combat.java index 2ea2b30849e..daf5888ea7a 100644 --- a/forge-game/src/main/java/forge/game/combat/Combat.java +++ b/forge-game/src/main/java/forge/game/combat/Combat.java @@ -768,8 +768,7 @@ public class Combat { if (divideCombatDamageAsChoose) { if (orderedBlockers == null || orderedBlockers.isEmpty()) { orderedBlockers = getDefendersCreatures(); - } - else { + } else { for (Card c : getDefendersCreatures()) { if (!orderedBlockers.contains(c)) { orderedBlockers.add(c); @@ -798,8 +797,7 @@ public class Combat { } else if (trampler || !band.isBlocked()) { // this is called after declare blockers, no worries 'bout nulls in isBlocked damageMap.put(attacker, defender, damageDealt); } // No damage happens if blocked but no blockers left - } - else { + } else { Player assigningPlayer = getAttackingPlayer(); // Defensive Formation is very similar to Banding with Blockers // It allows the defending player to assign damage instead of the attacking player diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index be8ec7ec7fa..3a6ae63f5e8 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -3050,7 +3050,7 @@ public class Player extends GameEntity implements Comparable { CardCollectionView view = CardCollection.getView(legalCompanions); - SpellAbility fakeSa = new SpellAbility.EmptySa(ApiType.CompanionChoose, legalCompanions.get(0), this); + SpellAbility fakeSa = new SpellAbility.EmptySa(ApiType.CompanionChoose, legalCompanions.get(0), this); return player.chooseSingleEntityForEffect(view, fakeSa, Localizer.getInstance().getMessage("lblChooseACompanion"), true, null); } From f6341a2bc927dc37b0b83dcf4dc5aaff134f9f39 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Fri, 27 Aug 2021 22:13:46 +0000 Subject: [PATCH 2/4] fix ImageKeys.java --- forge-core/src/main/java/forge/ImageKeys.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-core/src/main/java/forge/ImageKeys.java b/forge-core/src/main/java/forge/ImageKeys.java index e825c09750a..cb79e5b4077 100644 --- a/forge-core/src/main/java/forge/ImageKeys.java +++ b/forge-core/src/main/java/forge/ImageKeys.java @@ -236,7 +236,7 @@ public final class ImageKeys { cachedContent.put(setFolder, setFolderContent); } } - String[] keyParts = StringUtils.split(pc.getCardImageKey(), "//"); + String[] keyParts = StringUtils.split(pc.getImageKeyFromSet(), "//"); if (keyParts.length != 2) return false; HashSet content = cachedContent.getOrDefault(keyParts[0], null); From 1529ffe63077185f6b53b727188ce46b007b9023 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Sat, 28 Aug 2021 07:38:32 +0200 Subject: [PATCH 3/4] Fix ImageKeys again --- forge-ai/src/main/java/forge/ai/ComputerUtilCost.java | 3 +++ forge-core/src/main/java/forge/ImageKeys.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index 4a8744f0e76..c3e2823877e 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -236,6 +236,9 @@ public class ComputerUtilCost { if (cost == null) { return true; } + if (!ai.isAI()) { + return false; + } for (final CostPart part : cost.getCostParts()) { if (part instanceof CostSacrifice) { CardCollection list = new CardCollection(); diff --git a/forge-core/src/main/java/forge/ImageKeys.java b/forge-core/src/main/java/forge/ImageKeys.java index cb79e5b4077..e825c09750a 100644 --- a/forge-core/src/main/java/forge/ImageKeys.java +++ b/forge-core/src/main/java/forge/ImageKeys.java @@ -236,7 +236,7 @@ public final class ImageKeys { cachedContent.put(setFolder, setFolderContent); } } - String[] keyParts = StringUtils.split(pc.getImageKeyFromSet(), "//"); + String[] keyParts = StringUtils.split(pc.getCardImageKey(), "//"); if (keyParts.length != 2) return false; HashSet content = cachedContent.getOrDefault(keyParts[0], null); From fc802e3395a23463fbe01212d419495b51635346 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Sat, 28 Aug 2021 07:54:11 +0200 Subject: [PATCH 4/4] Fix checkForManaSacrificeCost check --- forge-ai/src/main/java/forge/ai/ComputerUtilCost.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java index c3e2823877e..f7e151ff2f3 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCost.java @@ -236,11 +236,11 @@ public class ComputerUtilCost { if (cost == null) { return true; } - if (!ai.isAI()) { - return false; - } for (final CostPart part : cost.getCostParts()) { if (part instanceof CostSacrifice) { + if (!ai.isAI()) { + return false; + } CardCollection list = new CardCollection(); final CardCollection exclude = new CardCollection(); if (AiCardMemory.getMemorySet(ai, MemorySet.PAYS_SAC_COST) != null) {