diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 8e063fc4ccb..7a21356b85b 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -168,12 +168,13 @@ public class PlayerControllerAi extends PlayerController { } @Override - public SpellAbility chooseSingleSpellForEffect(java.util.List spells, SpellAbility sa, String title) { + public SpellAbility chooseSingleSpellForEffect(java.util.List spells, SpellAbility sa, String title, + Map params) { ApiType api = sa.getApi(); if (null == api) { throw new InvalidParameterException("SA is not api-based, this is not supported yet"); } - return SpellApiToAi.Converter.get(api).chooseSingleSpellAbility(player, sa, spells); + return SpellApiToAi.Converter.get(api).chooseSingleSpellAbility(player, sa, spells, params); } @Override diff --git a/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java b/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java index be3d906ec92..93168edf512 100644 --- a/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java +++ b/forge-ai/src/main/java/forge/ai/SpellAbilityAi.java @@ -324,7 +324,7 @@ public abstract class SpellAbilityAi { return null; } - public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells) { + public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells, Map params) { System.err.println("Warning: default (ie. inherited from base class) implementation of chooseSingleSpellAbility is used by " + sa.getHostCard().getName() + " for " + this.getClass().getName() + ". Consider declaring an overloaded method"); return spells.get(0); } diff --git a/forge-ai/src/main/java/forge/ai/ability/ActivateAbilityAi.java b/forge-ai/src/main/java/forge/ai/ability/ActivateAbilityAi.java index b71f07080f7..7eba97960da 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ActivateAbilityAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ActivateAbilityAi.java @@ -12,6 +12,7 @@ import forge.game.zone.ZoneType; import forge.util.MyRandom; import java.util.List; +import java.util.Map; public class ActivateAbilityAi extends SpellAbilityAi { @@ -93,7 +94,8 @@ public class ActivateAbilityAi extends SpellAbilityAi { } @Override - public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells) { + public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells, + Map params) { return spells.get(0); } } 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 0b4cf77f7c9..96876913dd9 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CanPlayAsDrawbackAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CanPlayAsDrawbackAi.java @@ -6,6 +6,7 @@ import forge.game.player.Player; import forge.game.spellability.SpellAbility; import java.util.List; +import java.util.Map; public class CanPlayAsDrawbackAi extends SpellAbilityAi { @@ -37,7 +38,8 @@ public class CanPlayAsDrawbackAi extends SpellAbilityAi { @Override - public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells) { + 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/ChooseGenericEffectAi.java b/forge-ai/src/main/java/forge/ai/ability/ChooseGenericEffectAi.java index 05ba5338e55..af986809b36 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChooseGenericEffectAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChooseGenericEffectAi.java @@ -1,6 +1,7 @@ package forge.ai.ability; import java.util.List; +import java.util.Map; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; @@ -79,7 +80,8 @@ public class ChooseGenericEffectAi extends SpellAbilityAi { } @Override - public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells) { + public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells, + Map params) { Card host = sa.getHostCard(); final String sourceName = ComputerUtilAbility.getAbilitySourceName(sa); final Game game = host.getGame(); diff --git a/forge-ai/src/main/java/forge/ai/ability/CopySpellAbilityAi.java b/forge-ai/src/main/java/forge/ai/ability/CopySpellAbilityAi.java index 4471074c3f5..55a0804a562 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CopySpellAbilityAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CopySpellAbilityAi.java @@ -7,6 +7,7 @@ import forge.game.player.PlayerActionConfirmMode; import forge.game.spellability.SpellAbility; import java.util.List; +import java.util.Map; public class CopySpellAbilityAi extends SpellAbilityAi { @@ -36,7 +37,8 @@ public class CopySpellAbilityAi extends SpellAbilityAi { } @Override - public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells) { + public SpellAbility chooseSingleSpellAbility(Player player, SpellAbility sa, List spells, + Map params) { return spells.get(0); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ActivateAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ActivateAbilityEffect.java index fc0aae36d17..3114cf48501 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ActivateAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ActivateAbilityEffect.java @@ -12,6 +12,7 @@ import forge.util.Lang; import org.apache.commons.lang3.StringUtils; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import java.util.List; @@ -49,7 +50,8 @@ public class ActivateAbilityEffect extends SpellAbilityEffect { if (possibleAb.isEmpty()) { continue; } - SpellAbility manaAb = p.getController().chooseSingleSpellForEffect(possibleAb, sa, "Choose a mana ability:"); + SpellAbility manaAb = p.getController().chooseSingleSpellForEffect( + possibleAb, sa, "Choose a mana ability:", ImmutableMap.of()); p.getController().playChosenSpellAbility(manaAb); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseGenericEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseGenericEffect.java index 7cb835542b6..23ab1ad6b46 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseGenericEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseGenericEffect.java @@ -1,5 +1,6 @@ package forge.game.ability.effects; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; @@ -65,7 +66,8 @@ public class ChooseGenericEffect extends SpellAbilityEffect { int idxChosen = MyRandom.getRandom().nextInt(abilities.size()); chosenSA = abilities.get(idxChosen); } else { - chosenSA = p.getController().chooseSingleSpellForEffect(abilities, sa, "Choose one"); + chosenSA = p.getController().chooseSingleSpellForEffect(abilities, sa, "Choose one", + ImmutableMap.of()); } if (chosenSA != null) { 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 aa4d49c6080..4d74f5e274e 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 @@ -1,5 +1,6 @@ package forge.game.ability.effects; +import com.google.common.collect.ImmutableMap; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; @@ -83,7 +84,8 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect { for (int multi = 0; multi < spellCount && !tgtSpells.isEmpty(); multi++) { String prompt = "Select " + Lang.getOrdinal(multi + 1) + " spell to copy to stack"; - SpellAbility chosen = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, prompt); + SpellAbility chosen = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, prompt, + ImmutableMap.of()); SpellAbility copiedSpell = CardFactory.copySpellAbilityAndSrcCard(card, chosen.getHostCard(), chosen, true); copiedSpell.getHostCard().setController(card.getController(), card.getGame().getNextTimestamp()); copiedSpell.setActivatingPlayer(controller); @@ -92,7 +94,8 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect { } } else if (sa.hasParam("CopyForEachCanTarget")) { - SpellAbility chosenSA = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, "Select a spell to copy"); + SpellAbility chosenSA = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, + "Select a spell to copy", ImmutableMap.of()); chosenSA.setActivatingPlayer(controller); // Find subability or rootability that has targets SpellAbility targetedSA = chosenSA; @@ -152,7 +155,8 @@ public class CopySpellAbilityEffect extends SpellAbilityEffect { } } else { - SpellAbility chosenSA = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, "Select a spell to copy"); + SpellAbility chosenSA = controller.getController().chooseSingleSpellForEffect(tgtSpells, sa, + "Select a spell to copy", ImmutableMap.of()); chosenSA.setActivatingPlayer(controller); for (int i = 0; i < amount; i++) { copies.add(CardFactory.copySpellAbilityAndSrcCard(card, chosenSA.getHostCard(), chosenSA, true)); diff --git a/forge-game/src/main/java/forge/game/player/PlayerController.java b/forge-game/src/main/java/forge/game/player/PlayerController.java index 40849fccd4f..3d02dcea56d 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerController.java +++ b/forge-game/src/main/java/forge/game/player/PlayerController.java @@ -107,7 +107,8 @@ public abstract class PlayerController { public final T chooseSingleEntityForEffect(FCollectionView optionList, SpellAbility sa, String title) { return chooseSingleEntityForEffect(optionList, null, sa, title, false, null); } public final T chooseSingleEntityForEffect(FCollectionView optionList, SpellAbility sa, String title, boolean isOptional) { return chooseSingleEntityForEffect(optionList, null, sa, title, isOptional, null); } public abstract T chooseSingleEntityForEffect(FCollectionView optionList, DelayedReveal delayedReveal, SpellAbility sa, String title, boolean isOptional, Player relatedPlayer); - public abstract SpellAbility chooseSingleSpellForEffect(List spells, SpellAbility sa, String title); + public abstract SpellAbility chooseSingleSpellForEffect(List spells, SpellAbility sa, String title, + Map params); public abstract List chooseEntitiesForEffect(FCollectionView optionList, DelayedReveal delayedReveal, SpellAbility sa, String title, Player relatedPlayer); diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index 0f237eadf20..0994bcc54f1 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -167,7 +167,8 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public SpellAbility chooseSingleSpellForEffect(List spells, SpellAbility sa, String title) { + public SpellAbility chooseSingleSpellForEffect(List spells, SpellAbility sa, String title, + Map params) { return chooseItem(spells); } diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index c050ea72183..ea704cbf6ba 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -537,7 +537,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont @Override public SpellAbility chooseSingleSpellForEffect(final List spells, final SpellAbility sa, - final String title) { + final String title, Map params) { if (spells.size() < 2) { return Iterables.getFirst(spells, null); }