Skip to content

Commit d688ecc

Browse files
tool4evertool4EvEr
authored andcommitted
Timestamp checks (#7)
1 parent 44a1073 commit d688ecc

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

56 files changed

+336
-248
lines changed

forge-ai/src/main/java/forge/ai/ability/UntapAi.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -319,15 +319,14 @@ private boolean untapTargetList(final Card source, final TargetRestrictions tgt,
319319

320320
@Override
321321
public Card chooseSingleCard(Player ai, SpellAbility sa, Iterable<Card> list, boolean isOptional, Player targetedPlayer, Map<String, Object> params) {
322-
CardCollection pref = CardLists.filterControlledBy(list, ai.getYourTeam());
323-
if (pref.isEmpty()) {
324-
if (isOptional) {
325-
return null;
326-
}
327-
} else {
328-
list = pref;
322+
CardCollection filteredList = CardLists.filterControlledBy(list, ai.getYourTeam());
323+
if (!filteredList.isEmpty()) {
324+
return ComputerUtilCard.getBestAI(filteredList);
325+
}
326+
if (isOptional) {
327+
return null;
329328
}
330-
return ComputerUtilCard.getBestAI(list);
329+
return ComputerUtilCard.getWorstAI(list);
331330
}
332331

333332
private static Card detectPriorityUntapTargets(final List<Card> untapList) {

forge-game/src/main/java/forge/game/GameAction.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package forge.game;
1919

2020
import com.google.common.collect.*;
21+
2122
import forge.GameCommand;
2223
import forge.StaticData;
2324
import forge.card.CardStateName;
@@ -481,6 +482,7 @@ private Card changeZone(final Zone zoneFrom, Zone zoneTo, final Card c, Integer
481482
}
482483

483484
if (zoneFrom.is(ZoneType.Stack) && toBattlefield) {
485+
484486
// 400.7a Effects from static abilities that give a permanent spell on the stack an ability
485487
// that allows it to be cast for an alternative cost continue to apply to the permanent that spell becomes.
486488
if (c.getCastSA() != null && !c.getCastSA().isIntrinsic() && c.getCastSA().getKeyword() != null) {
@@ -1544,6 +1546,7 @@ private boolean stateBasedAction_Role(Card c, CardCollection removeList) {
15441546
if (rolesByPlayer.size() <= 1) {
15451547
continue;
15461548
}
1549+
15471550
rolesByPlayer.sort(CardPredicates.compareByGameTimestamp());
15481551
removeList.addAll(rolesByPlayer.subList(0, rolesByPlayer.size() - 1));
15491552
checkAgain = true;

forge-game/src/main/java/forge/game/GameActionUtil.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -725,6 +725,7 @@ public static SpellAbility addExtraKeywordCost(final SpellAbility sa) {
725725
public static Card createETBCountersEffect(Card sourceCard, Card c, Player controller, String counter, String amount) {
726726
final Game game = sourceCard.getGame();
727727
final Card eff = new Card(game.nextCardId(), game);
728+
728729
eff.setGameTimestamp(game.getNextTimestamp());
729730
eff.setName(sourceCard + "'s Effect");
730731
eff.setOwner(controller);

forge-game/src/main/java/forge/game/ability/effects/BecomesBlockedEffect.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ protected String getStackDescription(SpellAbility sa) {
2929
@Override
3030
public void resolve(SpellAbility sa) {
3131
final Game game = sa.getActivatingPlayer().getGame();
32+
if (game.getCombat() == null) {
33+
return;
34+
}
3235
List<Card> blocked = Lists.newArrayList();
3336
for (final Card c : getTargetCards(sa)) {
3437
game.getCombat().setBlocked(c, true);

forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -537,7 +537,6 @@ private void changeKnownOriginResolve(final SpellAbility sa) {
537537
if (gameCard == null || !tgtC.equalsWithGameTimestamp(gameCard) || gameCard.isPhasedOut()) {
538538
continue;
539539
}
540-
541540
if (sa.hasParam("RememberLKI")) {
542541
hostCard.addRemembered(CardCopyService.getLKICopy(gameCard));
543542
}

forge-game/src/main/java/forge/game/ability/effects/ChooseCardEffect.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import forge.game.card.CardPredicates;
2020
import forge.game.player.Player;
2121
import forge.game.player.PlayerActionConfirmMode;
22+
import forge.game.player.PlayerCollection;
2223
import forge.game.spellability.SpellAbility;
2324
import forge.game.zone.ZoneType;
2425
import forge.util.Aggregates;
@@ -60,7 +61,7 @@ public void resolve(SpellAbility sa) {
6061
final Game game = activator.getGame();
6162
CardCollection allChosen = new CardCollection();
6263

63-
final List<Player> tgtPlayers = getDefinedPlayersOrTargeted(sa);
64+
final PlayerCollection tgtPlayers = getDefinedPlayersOrTargeted(sa);
6465

6566
List<ZoneType> choiceZone = Lists.newArrayList(ZoneType.Battlefield);
6667
if (sa.hasParam("ChoiceZone")) {
@@ -71,7 +72,7 @@ public void resolve(SpellAbility sa) {
7172
choices = CardLists.getValidCards(choices, sa.getParam("Choices"), activator, host, sa);
7273
}
7374
if (sa.hasParam("TargetControls")) {
74-
choices = CardLists.filterControlledBy(choices, tgtPlayers.get(0));
75+
choices = CardLists.filterControlledBy(choices, tgtPlayers);
7576
}
7677
if (sa.hasParam("DefinedCards")) {
7778
choices = AbilityUtils.getDefinedCards(host, sa.getParam("DefinedCards"), sa);

forge-game/src/main/java/forge/game/ability/effects/ChooseColorEffect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public void resolve(SpellAbility sa) {
4747
}
4848
}
4949

50+
5051
for (Player p : getTargetPlayers(sa)) {
5152
if (!p.isInGame()) {
5253
p = getNewChooser(sa, sa.getActivatingPlayer(), p);

forge-game/src/main/java/forge/game/ability/effects/ChoosePlayerEffect.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ protected String getStackDescription(SpellAbility sa) {
2020

2121
sb.append(Lang.joinHomogenous(getTargetPlayers(sa)));
2222

23-
sb.append("chooses a player.");
23+
sb.append(" chooses a player.");
2424

2525
return sb.toString();
2626
}

forge-game/src/main/java/forge/game/ability/effects/ChooseTypeEffect.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package forge.game.ability.effects;
22

3-
import java.security.InvalidParameterException;
43
import java.util.ArrayList;
54
import java.util.Arrays;
65
import java.util.List;
@@ -152,7 +151,7 @@ public void resolve(SpellAbility sa) {
152151
}
153152
}
154153
} else {
155-
throw new InvalidParameterException(sa.getHostCard() + "'s ability resulted in no types to choose from");
154+
throw new RuntimeException(sa.getHostCard() + "'s ability resulted in no types to choose from");
156155
}
157156
}
158157

forge-game/src/main/java/forge/game/ability/effects/ConniveEffect.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public void resolve(SpellAbility sa) {
5151
return;
5252
}
5353

54+
5455
List<Player> controllers = new ArrayList<>();
5556
for (Card c : toConnive) {
5657
final Player controller = c.getController();

0 commit comments

Comments
 (0)