From 9283328e221b953ce66870f8b594b2d99a9e02ce Mon Sep 17 00:00:00 2001 From: elcnesh Date: Fri, 12 Dec 2014 10:39:45 +0000 Subject: [PATCH] Large cleanup in game; fix some small bugs and make a lot of methods static where applicable. --- forge-game/src/main/java/forge/game/Game.java | 33 ++- .../src/main/java/forge/game/GameAction.java | 2 +- .../java/forge/game/GameLogFormatter.java | 24 +-- .../main/java/forge/game/StaticEffects.java | 29 +-- .../java/forge/game/ability/AbilityUtils.java | 14 +- .../forge/game/ability/SaTargetRoutines.java | 8 +- .../game/ability/SpellAbilityEffect.java | 188 +++++++++--------- .../game/ability/effects/AttachEffect.java | 2 +- .../ability/effects/ChangeZoneEffect.java | 6 +- .../ability/effects/ChooseSourceEffect.java | 4 +- .../game/ability/effects/ClashEffect.java | 15 +- .../game/ability/effects/CloneEffect.java | 2 +- .../ability/effects/ControlGainEffect.java | 12 +- .../ability/effects/CopyPermanentEffect.java | 2 +- .../game/ability/effects/CounterEffect.java | 7 +- .../ability/effects/DelayedTriggerEffect.java | 2 +- .../forge/game/ability/effects/DigEffect.java | 2 +- .../game/ability/effects/DrainManaEffect.java | 2 +- .../game/ability/effects/FlipCoinEffect.java | 2 +- .../ability/effects/ManaReflectedEffect.java | 4 +- .../game/ability/effects/PumpAllEffect.java | 12 +- .../game/ability/effects/PumpEffect.java | 17 +- .../effects/RearrangeTopOfLibraryEffect.java | 4 +- .../game/ability/effects/RepeatEffect.java | 6 +- .../game/ability/effects/SacrificeEffect.java | 2 +- .../game/ability/effects/ScryEffect.java | 14 +- .../game/ability/effects/SetStateEffect.java | 6 +- .../ability/effects/UnattachAllEffect.java | 6 +- .../game/ability/effects/VoteEffect.java | 14 +- .../src/main/java/forge/game/card/Card.java | 36 ++-- .../forge/game/mana/ManaCostBeingPaid.java | 6 +- .../main/java/forge/game/phase/Upkeep.java | 2 +- .../main/java/forge/game/player/Player.java | 6 +- .../java/forge/game/player/PlayerView.java | 2 +- .../game/staticability/StaticAbility.java | 4 +- .../game/trigger/TriggerChangesZone.java | 2 +- .../forge/game/trigger/TriggerHandler.java | 52 +++-- .../java/forge/game/trigger/TriggerVote.java | 21 +- .../forge/game/trigger/WrappedAbility.java | 2 +- .../main/java/forge/game/zone/MagicStack.java | 3 +- .../src/main/java/forge/game/zone/Zone.java | 8 +- 41 files changed, 306 insertions(+), 279 deletions(-) diff --git a/forge-game/src/main/java/forge/game/Game.java b/forge-game/src/main/java/forge/game/Game.java index 68049c47cb9..44d0316e081 100644 --- a/forge-game/src/main/java/forge/game/Game.java +++ b/forge-game/src/main/java/forge/game/Game.java @@ -169,12 +169,25 @@ public class Game { * Gets the players who are still fighting to win, in turn order. */ public final FCollectionView getPlayersInTurnOrder() { - if (turnOrder.isDefaultDirection()) { - return ingamePlayers; - } - FCollection players = new FCollection(ingamePlayers); - Collections.reverse(players); - return players; + if (turnOrder.isDefaultDirection()) { + return ingamePlayers; + } + final FCollection players = new FCollection(ingamePlayers); + Collections.reverse(players); + return players; + } + + /** + * Gets the nonactive players who are still fighting to win, in turn order. + */ + public final FCollectionView getNonactivePlayers() { + // Don't use getPlayersInTurnOrder to prevent copying the player collection twice + final FCollection players = new FCollection(ingamePlayers);; + players.remove(phaseHandler.getPlayerTurn()); + if (!turnOrder.isDefaultDirection()) { + Collections.reverse(players); + } + return players; } /** @@ -572,7 +585,7 @@ public class Game { List validRarities = new ArrayList<>(Arrays.asList(CardRarity.values())); for (final Player player : getPlayers()) { - Set playerRarity = getValidRarities(player.getCardsIn(ZoneType.Library)); + final Set playerRarity = getValidRarities(player.getCardsIn(ZoneType.Library)); if (onePlayerHasTimeShifted == false) { onePlayerHasTimeShifted = playerRarity.contains(CardRarity.Special); } @@ -652,9 +665,9 @@ public class Game { anteed.put(player, ante); } - private Set getValidRarities(final Iterable cards) { - Set rarities = new HashSet<>(); - for (Card card : cards) { + private static Set getValidRarities(final Iterable cards) { + final Set rarities = new HashSet<>(); + for (final Card card : cards) { if (card.getRarity() == CardRarity.Rare || card.getRarity() == CardRarity.MythicRare) { //Since both rare and mythic rare are considered the same, adding both rarities //massively increases the odds chances of the game picking rare cards to ante. diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 8b3e100f822..15549dbccd8 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -312,7 +312,7 @@ public class GameAction { return copied; } - private void unattachCardLeavingBattlefield(Card copied) { + private static void unattachCardLeavingBattlefield(final Card copied) { // Handle unequipping creatures if (copied.isEquipped()) { for (final Card equipment : copied.getEquippedBy(true)) { diff --git a/forge-game/src/main/java/forge/game/GameLogFormatter.java b/forge-game/src/main/java/forge/game/GameLogFormatter.java index d55e1269066..b210c974ec8 100644 --- a/forge-game/src/main/java/forge/game/GameLogFormatter.java +++ b/forge-game/src/main/java/forge/game/GameLogFormatter.java @@ -66,14 +66,14 @@ public class GameLogFormatter extends IGameEventVisitor.Base { return new GameLogEntry(GameLogEntryType.STACK_ADD, sb.toString()); } - private GameLogEntry generateSummary(List gamesPlayed) { - GameOutcome outcome1 = gamesPlayed.get(0); - List players = outcome1.getPlayers(); + private static GameLogEntry generateSummary(final List gamesPlayed) { + final GameOutcome outcome1 = gamesPlayed.get(0); + final List players = outcome1.getPlayers(); final int[] wins = new int[players.size()]; // Calculate total games each player has won. - for (GameOutcome game : gamesPlayed) { + for (final GameOutcome game : gamesPlayed) { int i = 0; for (Player p : game.getPlayers()) { if (p.getOutcome().hasWon()) { @@ -83,26 +83,24 @@ public class GameLogFormatter extends IGameEventVisitor.Base { } } - StringBuilder sb = new StringBuilder(); + final StringBuilder sb = new StringBuilder(); for (int i = 0; i < wins.length; i++) { - Player player = players.get(i); - String playerName = player.getName(); + final Player player = players.get(i); + final String playerName = player.getName(); sb.append(playerName).append(": ").append(wins[i]).append(" "); } return new GameLogEntry(GameLogEntryType.MATCH_RESULTS, sb.toString()); } @Override - public GameLogEntry visit(GameEventPlayerControl event) { - // TODO Auto-generated method stub - LobbyPlayer newController = event.newController; - Player p = event.player; + public GameLogEntry visit(final GameEventPlayerControl event) { + final LobbyPlayer newController = event.newController; + final Player p = event.player; final String message; if (newController == null) { message = p.getName() + " has restored control over themself"; - } - else { + } else { message = String.format("%s is controlled by %s", p.getName(), newController.getName()); } return new GameLogEntry(GameLogEntryType.PLAYER_CONROL, message); diff --git a/forge-game/src/main/java/forge/game/StaticEffects.java b/forge-game/src/main/java/forge/game/StaticEffects.java index f2d500c9283..fb685efebf0 100644 --- a/forge-game/src/main/java/forge/game/StaticEffects.java +++ b/forge-game/src/main/java/forge/game/StaticEffects.java @@ -17,6 +17,13 @@ */ package forge.game; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import forge.game.card.Card; import forge.game.card.CardUtil; import forge.game.player.Player; @@ -25,8 +32,6 @@ import forge.game.spellability.AbilityStatic; import forge.game.spellability.SpellAbility; import forge.game.staticability.StaticAbility; -import java.util.*; - /** *

* StaticEffects class. @@ -38,16 +43,16 @@ import java.util.*; public class StaticEffects { // **************** StaticAbility system ************************** - private final ArrayList staticEffects = new ArrayList(); + private final List staticEffects = new ArrayList(); //Global rule changes - private final EnumSet ruleChanges = EnumSet.noneOf(GlobalRuleChange.class); + private final Set ruleChanges = EnumSet.noneOf(GlobalRuleChange.class); - public final void clearStaticEffects(Set affectedCards) { + public final void clearStaticEffects(final Set affectedCards) { ruleChanges.clear(); // remove all static effects - for (StaticEffect se : staticEffects) { - affectedCards.addAll(this.removeStaticEffect(se)); + for (final StaticEffect se : staticEffects) { + affectedCards.addAll(removeStaticEffect(se)); } this.staticEffects.clear(); } @@ -61,22 +66,22 @@ public class StaticEffects { } /** - * addStaticEffect. TODO Write javadoc for this method. + * Add a static effect to the list of static effects. * * @param staticEffect - * a StaticEffect + * a {@link StaticEffect}. */ public final void addStaticEffect(final StaticEffect staticEffect) { this.staticEffects.add(staticEffect); } /** - * removeStaticEffect TODO Write javadoc for this method. + * Remove a static effect from the list of static effects and undo everything that was changed by the effect. * * @param se - * a StaticEffect + * a {@link StaticEffect}. */ - private final List removeStaticEffect(final StaticEffect se) { + private static final List removeStaticEffect(final StaticEffect se) { final List affectedCards = se.getAffectedCards(); final ArrayList affectedPlayers = se.getAffectedPlayers(); final Map params = se.getParams(); diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 0b0d032cdfd..5c8e21b84b4 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -134,8 +134,8 @@ public class AbilityUtils { final Object crd = root.getTriggeringObject(defined.substring(9)); if (crd instanceof Card) { c = game.getCardState((Card) crd); - } else if (crd instanceof List) { - for (final Card cardItem : (CardCollection) crd) { + } else if (crd instanceof Iterable) { + for (final Card cardItem : Iterables.filter((Iterable) crd, Card.class)) { cards.add(cardItem); } } @@ -956,13 +956,13 @@ public class AbilityUtils { players.add(p); } } - if (o instanceof List) { - @SuppressWarnings("unchecked") - final List pList = (List) o; + if (o instanceof List) { + final List pList = (List)o; if (!pList.isEmpty() && pList.get(0) instanceof Player) { - for (final Player p : pList) { + for (final Object p : pList) { if (!players.contains(p)) { - players.add(p); + // We now know each p in o to be an instance of Player, so cast is safe + players.add((Player) p); } } } diff --git a/forge-game/src/main/java/forge/game/ability/SaTargetRoutines.java b/forge-game/src/main/java/forge/game/ability/SaTargetRoutines.java index 1ea1902323b..5a4156623bd 100644 --- a/forge-game/src/main/java/forge/game/ability/SaTargetRoutines.java +++ b/forge-game/src/main/java/forge/game/ability/SaTargetRoutines.java @@ -19,7 +19,7 @@ public class SaTargetRoutines { protected CardCollection getDefinedCardsOrTargeted(SpellAbility sa) { return getCards(true, "Defined", sa); } protected CardCollection getDefinedCardsOrTargeted(SpellAbility sa, String definedParam) { return getCards(true, definedParam, sa); } - private CardCollection getCards(boolean definedFirst, String definedParam, SpellAbility sa) { + private static CardCollection getCards(boolean definedFirst, String definedParam, SpellAbility sa) { boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam)) && sa.getTargets() != null && (sa.getTargets().isTargetingAnyCard() || sa.getTargets().getTargets().isEmpty()); return useTargets ? new CardCollection(sa.getTargets().getTargetCards()) @@ -32,7 +32,7 @@ public class SaTargetRoutines { protected FCollection getDefinedPlayersOrTargeted(SpellAbility sa ) { return getPlayers(true, "Defined", sa); } protected FCollection getDefinedPlayersOrTargeted(SpellAbility sa, String definedParam) { return getPlayers(true, definedParam, sa); } - private FCollection getPlayers(boolean definedFirst, String definedParam, SpellAbility sa) { + private static FCollection getPlayers(boolean definedFirst, String definedParam, SpellAbility sa) { boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam)); return useTargets ? new FCollection(sa.getTargets().getTargetPlayers()) : AbilityUtils.getDefinedPlayers(sa.getHostCard(), sa.getParam(definedParam), sa); @@ -43,7 +43,7 @@ public class SaTargetRoutines { protected List getTargetSpells(SpellAbility sa, String definedParam) { return getSpells(false, definedParam, sa); } protected List getDefinedSpellsOrTargeted(SpellAbility sa, String definedParam) { return getSpells(true, definedParam, sa); } - private List getSpells(boolean definedFirst, String definedParam, SpellAbility sa) { + private static List getSpells(boolean definedFirst, String definedParam, SpellAbility sa) { boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam)); return useTargets ? Lists.newArrayList(sa.getTargets().getTargetSpells()) : AbilityUtils.getDefinedSpellAbilities(sa.getHostCard(), sa.getParam(definedParam), sa); @@ -54,7 +54,7 @@ public class SaTargetRoutines { protected List getTargets(SpellAbility sa, String definedParam) { return getTargetables(false, definedParam, sa); } protected List getDefinedOrTargeted(SpellAbility sa, String definedParam) { return getTargetables(true, definedParam, sa); } - private List getTargetables(boolean definedFirst, String definedParam, SpellAbility sa) { + private static List getTargetables(boolean definedFirst, String definedParam, SpellAbility sa) { boolean useTargets = sa.usesTargeting() && (!definedFirst || !sa.hasParam(definedParam)); return useTargets ? Lists.newArrayList(sa.getTargets().getTargets()) : AbilityUtils.getDefinedObjects(sa.getHostCard(), sa.getParam(definedParam), sa); diff --git a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java index 0671de80213..ff1b12ad734 100644 --- a/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java +++ b/forge-game/src/main/java/forge/game/ability/SpellAbilityEffect.java @@ -1,8 +1,10 @@ package forge.game.ability; +import forge.game.GameObject; import forge.game.card.CardFactoryUtil; import forge.game.spellability.AbilitySub; import forge.game.spellability.SpellAbility; + import org.apache.commons.lang3.StringUtils; import java.util.List; @@ -18,105 +20,113 @@ import java.util.StringTokenizer; * @version $Id: AbilityFactoryAlterLife.java 17656 2012-10-22 19:32:56Z Max mtg $ */ - public abstract class SpellAbilityEffect extends SaTargetRoutines { +public abstract class SpellAbilityEffect extends SaTargetRoutines { - public abstract void resolve(final SpellAbility sa); + public abstract void resolve(SpellAbility sa); - protected String getStackDescription(final SpellAbility sa) { - // Unless overriden, let the spell description also be the stack description - return sa.getDescription(); + protected String getStackDescription(final SpellAbility sa) { + // Unless overriden, let the spell description also be the stack description + return sa.getDescription(); + } + + protected static final void resolveSubAbility(final SpellAbility sa) { + // if mana production has any type of SubAbility, undoable=false + final AbilitySub abSub = sa.getSubAbility(); + if (abSub != null) { + sa.setUndoable(false); + AbilityUtils.resolve(abSub); } + } + /** + * Returns this effect description with needed prelude and epilogue. + * @param params + * @param commonSpell + * @return + */ + public final String getStackDescriptionWithSubs(final Map params, final SpellAbility sa) { + StringBuilder sb = new StringBuilder(); - protected void resolveDrawback(final SpellAbility sa) { - - // if mana production has any type of SubAbility, undoable=false - final AbilitySub abSub = sa.getSubAbility(); - if (abSub != null) { - sa.setUndoable(false); - AbilityUtils.resolve(abSub); - } + // prelude for when this is root ability + if (!(sa instanceof AbilitySub)) { + sb.append(sa.getHostCard()).append(" -"); } + sb.append(" "); - /** - * Returns this effect description with needed prelude and epilogue. - * @param params - * @param commonSpell - * @return - */ - public final String getStackDescriptionWithSubs(final Map params, final SpellAbility sa) { - StringBuilder sb = new StringBuilder(); - - // prelude for when this is root ability - if (!(sa instanceof AbilitySub)) { - sb.append(sa.getHostCard()).append(" -"); - } - sb.append(" "); - - // Own description - String stackDesc = params.get("StackDescription"); - if (stackDesc != null) { - if ("SpellDescription".equalsIgnoreCase(stackDesc)) { // by typing "none" they want to suppress output - sb.append(params.get("SpellDescription").replace("CARDNAME", sa.getHostCard().getName())); - if (sa.getTargets() != null && !sa.getTargets().getTargets().isEmpty()) { - sb.append(" (Targeting: " + sa.getTargets().getTargets() + ")"); - } - } else if (!"None".equalsIgnoreCase(stackDesc)) { // by typing "none" they want to suppress output - makeSpellDescription(sa, sb, stackDesc); + // Own description + String stackDesc = params.get("StackDescription"); + if (stackDesc != null) { + if ("SpellDescription".equalsIgnoreCase(stackDesc)) { // by typing "none" they want to suppress output + sb.append(params.get("SpellDescription").replace("CARDNAME", sa.getHostCard().getName())); + if (sa.getTargets() != null && !sa.getTargets().getTargets().isEmpty()) { + sb.append(" (Targeting: " + sa.getTargets().getTargets() + ")"); } + } else if (!"None".equalsIgnoreCase(stackDesc)) { // by typing "none" they want to suppress output + makeSpellDescription(sa, sb, stackDesc); + } + } else { + final String conditionDesc = sa.getParam("ConditionDescription"); + final String baseDesc = this.getStackDescription(sa); + if (conditionDesc != null) { + sb.append(conditionDesc).append(" "); + } + sb.append(baseDesc); + } + + // This includes all subAbilities + final AbilitySub abSub = sa.getSubAbility(); + if (abSub != null) { + sb.append(abSub.getStackDescription()); + } + + if (sa.hasParam("Announce")) { + String svar = sa.getParam("Announce"); + int amount = CardFactoryUtil.xCount(sa.getHostCard(), sa.getSVar(svar)); + sb.append(String.format(" (%s=%d)", svar, amount)); + } + + return sb.toString(); + } + + /** + * Append the description of a {@link SpellAbility} to a + * {@link StringBuilder}. + * + * @param sa + * a {@link SpellAbility}. + * @param sb + * a {@link StringBuilder}. + * @param stackDesc + * the stack description of sa, formatted so that text appearing + * between braces { } is replaced with defined + * {@link Player}, {@link SpellAbility}, and {@link Card} + * objects. + */ + private static void makeSpellDescription(final SpellAbility sa, final StringBuilder sb, final String stackDesc) { + final StringTokenizer st = new StringTokenizer(stackDesc, "{}", true); + boolean isPlainText = true; + + while (st.hasMoreTokens()) { + final String t = st.nextToken(); + if ("{".equals(t)) { isPlainText = false; continue; } + if ("}".equals(t)) { isPlainText = true; continue; } + + if (isPlainText) { + sb.append(t.replace("CARDNAME", sa.getHostCard().getName())); } else { - final String conditionDesc = sa.getParam("ConditionDescription"); - final String baseDesc = this.getStackDescription(sa); - if (conditionDesc != null) { - sb.append(conditionDesc).append(" "); - } - sb.append(baseDesc); - } - - // This includes all subAbilities - final AbilitySub abSub = sa.getSubAbility(); - if (abSub != null) { - sb.append(abSub.getStackDescription()); - } - - if (sa.hasParam("Announce")) { - String svar = sa.getParam("Announce"); - int amount = CardFactoryUtil.xCount(sa.getHostCard(), sa.getSVar(svar)); - sb.append(String.format(" (%s=%d)", svar, amount)); - } - - return sb.toString(); - } - - /** - * TODO: Write javadoc for this method. - * @param sa - * @param sb - * @param stackDesc - */ - private void makeSpellDescription(final SpellAbility sa, StringBuilder sb, String stackDesc) { - StringTokenizer st = new StringTokenizer(stackDesc, "{}", true); - boolean isPlainText = true; - while( st.hasMoreTokens() ) - { - String t = st.nextToken(); - if ( "{".equals(t) ) { isPlainText = false; continue; } - if ( "}".equals(t) ) { isPlainText = true; continue; } - if ( isPlainText ) - sb.append(t.replace("CARDNAME", sa.getHostCard().getName())); - else { - List objs = null; - if ( t.startsWith("p:") ) - objs = AbilityUtils.getDefinedPlayers(sa.getHostCard(), t.substring(2), sa); - else if ( t.startsWith("s:")) - objs = AbilityUtils.getDefinedSpellAbilities(sa.getHostCard(), t.substring(2), sa); - else if ( t.startsWith("c:")) - objs = AbilityUtils.getDefinedCards(sa.getHostCard(), t.substring(2), sa); - else - objs = AbilityUtils.getDefinedObjects(sa.getHostCard(), t, sa); - - sb.append(StringUtils.join(objs, ", ")); + final List objs; + if (t.startsWith("p:")) { + objs = AbilityUtils.getDefinedPlayers(sa.getHostCard(), t.substring(2), sa); + } else if (t.startsWith("s:")) { + objs = AbilityUtils.getDefinedSpellAbilities(sa.getHostCard(), t.substring(2), sa); + } else if (t.startsWith("c:")) { + objs = AbilityUtils.getDefinedCards(sa.getHostCard(), t.substring(2), sa); + } else { + objs = AbilityUtils.getDefinedObjects(sa.getHostCard(), t, sa); } + + sb.append(StringUtils.join(objs, ", ")); } } } +} diff --git a/forge-game/src/main/java/forge/game/ability/effects/AttachEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AttachEffect.java index 8bc026338cf..148cc1ec3b6 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AttachEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AttachEffect.java @@ -216,7 +216,7 @@ public class AttachEffect extends SpellAbilityEffect { final Card o = p.getController().chooseSingleEntityForEffect(list, aura, source + " - Select a card to attach to."); if (o != null) { - handleAura(source, (Card) o); + handleAura(source, o); //source.enchantEntity((Card) o); return true; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index d01a3874a20..a38dec8ffaa 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -563,7 +563,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { * @param sa * a {@link forge.game.spellability.SpellAbility} object. */ - private void changeHiddenOriginResolve(final SpellAbility sa) { + private static void changeHiddenOriginResolve(final SpellAbility sa) { List fetchers; if (sa.hasParam("DefinedPlayer")) { @@ -595,8 +595,8 @@ public class ChangeZoneEffect extends SpellAbilityEffect { changeZonePlayerInvariant(decider, sa, player); } } - - private void changeZonePlayerInvariant(Player decider, SpellAbility sa, Player player) { + + private static void changeZonePlayerInvariant(Player decider, SpellAbility sa, Player player) { final TargetRestrictions tgt = sa.getTargetRestrictions(); if (tgt != null) { final List players = Lists.newArrayList(sa.getTargets().getTargetPlayers()); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChooseSourceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChooseSourceEffect.java index 06668d6657f..0aab01d3986 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChooseSourceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChooseSourceEffect.java @@ -62,7 +62,7 @@ public class ChooseSourceEffect extends SpellAbilityEffect { if (siSpellAbility.getTriggeringObjects() != null) { for (Object c : siSpellAbility.getTriggeringObjects().values()) { if (c instanceof Card) { - if (!stackSources.contains((Card) c)) { + if (!stackSources.contains(c)) { referencedSources.add((Card) c); } } @@ -75,7 +75,7 @@ public class ChooseSourceEffect extends SpellAbilityEffect { if (siSpellAbility.getReplacingObjects() != null) { for (Object c : siSpellAbility.getReplacingObjects().values()) { if (c instanceof Card) { - if (!stackSources.contains((Card) c)) { + if (!stackSources.contains(c)) { referencedSources.add((Card) c); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ClashEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ClashEffect.java index a68cd38d078..b95e09991ca 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ClashEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ClashEffect.java @@ -20,7 +20,7 @@ public class ClashEffect extends SpellAbilityEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(SpellAbility sa) { + protected String getStackDescription(final SpellAbility sa) { return sa.getHostCard().getName() + " - Clash with an opponent."; } @@ -28,7 +28,7 @@ public class ClashEffect extends SpellAbilityEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(SpellAbility sa) { + public void resolve(final SpellAbility sa) { final boolean victory = clashWithOpponent(sa); // Run triggers @@ -70,7 +70,7 @@ public class ClashEffect extends SpellAbilityEffect { * a {@link forge.game.card.Card} object. * @return a boolean. */ - private final boolean clashWithOpponent(final SpellAbility sa) { + private static boolean clashWithOpponent(final SpellAbility sa) { /* * Each clashing player reveals the top card of his or her library, then * puts that card on the top or bottom. A player wins if his or her card @@ -129,13 +129,12 @@ public class ClashEffect extends SpellAbilityEffect { } } - public final void clashMoveToTopOrBottom(final Player p, final Card c) { - GameAction action = p.getGame().getAction(); - boolean putOnTop = p.getController().willPutCardOnTop(c); + private static void clashMoveToTopOrBottom(final Player p, final Card c) { + final GameAction action = p.getGame().getAction(); + final boolean putOnTop = p.getController().willPutCardOnTop(c); if (putOnTop) { action.moveToLibrary(c); - } - else { + } else { action.moveToBottomOfLibrary(c); } // computer just puts the card back until such time it can make a smarter decision diff --git a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java index 9537925c130..561e11d375c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CloneEffect.java @@ -198,7 +198,7 @@ public class CloneEffect extends SpellAbilityEffect { game.fireEvent(new GameEventCardStatsChanged(tgtCard)); } // cloneResolve - private void addExtraCharacteristics(final Card tgtCard, final SpellAbility sa, final Map origSVars) { + private static void addExtraCharacteristics(final Card tgtCard, final SpellAbility sa, final Map origSVars) { // additional types to clone if (sa.hasParam("AddTypes")) { for (final String type : Arrays.asList(sa.getParam("AddTypes").split(","))) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ControlGainEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ControlGainEffect.java index 77bd4470f29..e1d16c533f4 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ControlGainEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ControlGainEffect.java @@ -49,8 +49,9 @@ public class ControlGainEffect extends SpellAbilityEffect { return sb.toString(); } - private void doLoseControl(final Card c, final Card host, final boolean tapOnLose, - final List addedKeywords, final long tStamp) { + private static void doLoseControl(final Card c, final Card host, + final boolean tapOnLose, final List addedKeywords, + final long tStamp) { if (null == c || c.hasKeyword("Other players can't gain control of CARDNAME.")) { return; } @@ -185,7 +186,7 @@ public class ControlGainEffect extends SpellAbilityEffect { * a int. * @return a {@link forge.GameCommand} object. */ - private GameCommand getDestroyCommand(final Card c, final Card hostCard, final boolean bNoRegen) { + private static GameCommand getDestroyCommand(final Card c, final Card hostCard, final boolean bNoRegen) { final GameCommand destroy = new GameCommand() { private static final long serialVersionUID = 878543373519872418L; @@ -228,8 +229,9 @@ public class ControlGainEffect extends SpellAbilityEffect { * a {@link forge.game.player.Player} object. * @return a {@link forge.GameCommand} object. */ - private GameCommand getLoseControlCommand(final Card c, final long tStamp, - final boolean bTapOnLose, final Card hostCard, final List kws) { + private static GameCommand getLoseControlCommand(final Card c, + final long tStamp, final boolean bTapOnLose, final Card hostCard, + final List kws) { final GameCommand loseControl = new GameCommand() { private static final long serialVersionUID = 878543373519872418L; diff --git a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java index 6e875433950..ded04c24e6d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CopyPermanentEffect.java @@ -235,7 +235,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect { } // end foreach Card } // end resolve - private void registerDelayedTrigger(final SpellAbility sa, final String location, final List crds) { + private static void registerDelayedTrigger(final SpellAbility sa, final String location, final List crds) { String delTrig = "Mode$ Phase | Phase$ End Of Turn | TriggerDescription$ " + location + " " + crds + " at the beginning of the next end step."; final Trigger trig = TriggerHandler.parseTrigger(delTrig, sa.getHostCard(), true); diff --git a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java index 96f64eebd6b..9f2a5f7d4fc 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java @@ -96,7 +96,7 @@ public class CounterEffect extends SpellAbilityEffect { final Card tgtSACard = tgtSA.getHostCard(); // should remember even that spell cannot be countered, e.g. Dovescape if (sa.hasParam("RememberCounteredCMC")) { - sa.getHostCard().addRemembered((Integer) tgtSACard.getCMC()); + sa.getHostCard().addRemembered(Integer.valueOf(tgtSACard.getCMC())); } if (tgtSA.isSpell() && !CardFactoryUtil.isCounterableBy(tgtSACard, sa)) { @@ -112,7 +112,7 @@ public class CounterEffect extends SpellAbilityEffect { continue; } - this.removeFromStack(tgtSA, sa, si); + removeFromStack(tgtSA, sa, si); // Destroy Permanent may be able to be turned into a SubAbility if (tgtSA.isAbility() && sa.hasParam("DestroyPermanent")) { @@ -147,7 +147,8 @@ public class CounterEffect extends SpellAbilityEffect { * object. * @param sa */ - private void removeFromStack(final SpellAbility tgtSA, final SpellAbility srcSA, final SpellAbilityStackInstance si) { + private static void removeFromStack(final SpellAbility tgtSA, + final SpellAbility srcSA, final SpellAbilityStackInstance si) { final Game game = tgtSA.getActivatingPlayer().getGame(); // Run any applicable replacement effects. final HashMap repParams = new HashMap(); diff --git a/forge-game/src/main/java/forge/game/ability/effects/DelayedTriggerEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DelayedTriggerEffect.java index 08b8131d61b..e2fa7aaca4a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DelayedTriggerEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DelayedTriggerEffect.java @@ -64,7 +64,7 @@ public class DelayedTriggerEffect extends SpellAbilityEffect { if (sa.hasParam("RememberNumber")) { for (final Object o : sa.getHostCard().getRemembered()) { if (o instanceof Integer) { - delTrig.addRemembered((Integer) o); + delTrig.addRemembered(o); } } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java index 06e14d7f983..e2a7ffa1bdc 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DigEffect.java @@ -335,7 +335,7 @@ public class DigEffect extends SpellAbilityEffect { // returns a List that is a subset of list with cards that share a name // with a permanent on the battlefield - private CardCollection sharesNameWithCardOnBattlefield(final Game game, final List list) { + private static CardCollection sharesNameWithCardOnBattlefield(final Game game, final List list) { final CardCollection toReturn = new CardCollection(); final CardCollectionView play = game.getCardsIn(ZoneType.Battlefield); for (final Card c : list) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/DrainManaEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DrainManaEffect.java index e0e710df14e..a272284229d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DrainManaEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DrainManaEffect.java @@ -41,7 +41,7 @@ public class DrainManaEffect extends SpellAbilityEffect { } } if (sa.hasParam("RememberDrainedMana")) { - sa.getHostCard().addRemembered((Integer) drained.size()); + sa.getHostCard().addRemembered(Integer.valueOf(drained.size())); } } 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 8960acce177..6cfb5ba680d 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 @@ -172,7 +172,7 @@ public class FlipCoinEffect extends SpellAbilityEffect { // Run triggers HashMap runParams = new HashMap(); runParams.put("Player", caller); - runParams.put("Result", (Boolean) result); + runParams.put("Result", Boolean.valueOf(result)); caller.getGame().getTriggerHandler().runTrigger(TriggerType.FlippedCoin, runParams, false); return result; } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ManaReflectedEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ManaReflectedEffect.java index f7c023d025c..dd94acf8e64 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ManaReflectedEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ManaReflectedEffect.java @@ -32,7 +32,7 @@ public class ManaReflectedEffect extends SpellAbilityEffect { ma.produceMana(generated, player, sa); } - resolveDrawback(sa); + resolveSubAbility(sa); } @@ -53,7 +53,7 @@ public class ManaReflectedEffect extends SpellAbilityEffect { * a {@link forge.game.player.Player} object. * @return a {@link java.lang.String} object. */ - private String generatedReflectedMana(final SpellAbility sa, final Collection colors, final Player player) { + private static String generatedReflectedMana(final SpellAbility sa, final Collection colors, final Player player) { // Calculate generated mana here for stack description and resolving final int amount = sa.hasParam("Amount") ? AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("Amount"), sa) : 1; diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java index 12ad4036a0f..2bcb622fe24 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpAllEffect.java @@ -17,8 +17,9 @@ import java.util.Arrays; import java.util.List; public class PumpAllEffect extends SpellAbilityEffect { - private void applyPumpAll(final SpellAbility sa, final List list, final int a, - final int d, final List keywords, final ArrayList affectedZones) { + private static void applyPumpAll(final SpellAbility sa, + final List list, final int a, final int d, + final List keywords, final ArrayList affectedZones) { final Game game = sa.getActivatingPlayer().getGame(); final long timestamp = game.getNextTimestamp(); @@ -103,8 +104,9 @@ public class PumpAllEffect extends SpellAbilityEffect { game.fireEvent(new GameEventCardStatsChanged(tgtC)); } } + @Override - protected String getStackDescription(SpellAbility sa) { + protected String getStackDescription(final SpellAbility sa) { final StringBuilder sb = new StringBuilder(); String desc = ""; @@ -120,7 +122,7 @@ public class PumpAllEffect extends SpellAbilityEffect { } // pumpAllStackDescription() @Override - public void resolve(SpellAbility sa) { + public void resolve(final SpellAbility sa) { final List tgtPlayers = getTargetPlayers(sa); final ArrayList affectedZones = new ArrayList(); final Game game = sa.getActivatingPlayer().getGame(); @@ -162,7 +164,7 @@ public class PumpAllEffect extends SpellAbilityEffect { String[] restrictions = sa.hasParam("SharedRestrictions") ? sa.getParam("SharedRestrictions").split(",") : new String[] {"Card"}; keywords = CardFactoryUtil.sharedKeywords(sa.getParam("KW").split(" & "), restrictions, zones, sa.getHostCard()); } - this.applyPumpAll(sa, list, a, d, keywords, affectedZones); + applyPumpAll(sa, list, a, d, keywords, affectedZones); } // pumpAllResolve() } diff --git a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java index 5745d9234ba..6fcaa90b258 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/PumpEffect.java @@ -25,7 +25,9 @@ import com.google.common.collect.ImmutableList; public class PumpEffect extends SpellAbilityEffect { - private void applyPump(final SpellAbility sa, final Card applyTo, final int a, final int d, final List keywords, final long timestamp) { + private static void applyPump(final SpellAbility sa, final Card applyTo, + final int a, final int d, final List keywords, + final long timestamp) { //if host is not on the battlefield don't apply if (sa.hasParam("UntilLoseControlOfHost") && !sa.getHostCard().isInPlay()) { @@ -96,7 +98,8 @@ public class PumpEffect extends SpellAbilityEffect { game.fireEvent(new GameEventCardStatsChanged(applyTo)); } - private void applyPump(final SpellAbility sa, final Player p, final List keywords, final long timestamp) { + private static void applyPump(final SpellAbility sa, final Player p, + final List keywords, final long timestamp) { final Game game = p.getGame(); p.addChangedKeywords(keywords, ImmutableList.of(), timestamp); @@ -126,7 +129,7 @@ public class PumpEffect extends SpellAbilityEffect { } @Override - protected String getStackDescription(SpellAbility sa) { + protected String getStackDescription(final SpellAbility sa) { final StringBuilder sb = new StringBuilder(); List tgts = new ArrayList(); @@ -181,7 +184,7 @@ public class PumpEffect extends SpellAbilityEffect { } // pumpStackDescription() @Override - public void resolve(SpellAbility sa) { + public void resolve(final SpellAbility sa) { final ArrayList untargetedCards = new ArrayList(); final TargetRestrictions tgt = sa.getTargetRestrictions(); @@ -314,7 +317,7 @@ public class PumpEffect extends SpellAbilityEffect { continue; } - this.applyPump(sa, tgtC, a, d, keywords, timestamp); + applyPump(sa, tgtC, a, d, keywords, timestamp); } for (final Card tgtC : untargetedCards) { @@ -323,7 +326,7 @@ public class PumpEffect extends SpellAbilityEffect { continue; } - this.applyPump(sa, tgtC, a, d, keywords, timestamp); + applyPump(sa, tgtC, a, d, keywords, timestamp); } for (Player p : tgtPlayers) { @@ -331,7 +334,7 @@ public class PumpEffect extends SpellAbilityEffect { continue; } - this.applyPump(sa, p, keywords, timestamp); + applyPump(sa, p, keywords, timestamp); } } // pumpResolve() } diff --git a/forge-game/src/main/java/forge/game/ability/effects/RearrangeTopOfLibraryEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RearrangeTopOfLibraryEffect.java index b4740e7d1ed..34edef496ff 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RearrangeTopOfLibraryEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RearrangeTopOfLibraryEffect.java @@ -101,7 +101,9 @@ public class RearrangeTopOfLibraryEffect extends SpellAbilityEffect { * @param mayshuffle * a boolean. */ - private void rearrangeTopOfLibrary(final Card src, final Player player, final int numCards, final boolean mayshuffle, final SpellAbility sa) { + private static void rearrangeTopOfLibrary(final Card src, + final Player player, final int numCards, final boolean mayshuffle, + final SpellAbility sa) { final Player activator = sa.hasParam("RearrangePlayer") ? Iterables.getFirst(AbilityUtils.getDefinedPlayers(src, sa.getParam("RearrangePlayer"), sa), null) : sa.getActivatingPlayer(); if (activator == null) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java b/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java index e6c8632eebf..2e7e68db031 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/RepeatEffect.java @@ -17,12 +17,12 @@ import forge.util.Expressions; public class RepeatEffect extends SpellAbilityEffect { @Override - protected String getStackDescription(SpellAbility sa) { + protected String getStackDescription(final SpellAbility sa) { return "Repeat something. Somebody should really write a better StackDescription!"; } // end repeatStackDescription() @Override - public void resolve(SpellAbility sa) { + public void resolve(final SpellAbility sa) { Card source = sa.getHostCard(); // setup subability to repeat @@ -65,7 +65,7 @@ public class RepeatEffect extends SpellAbilityEffect { * @param SA * a {@link forge.game.spellability.SpellAbility} object. */ - private boolean checkRepeatConditions(final SpellAbility sa) { + private static boolean checkRepeatConditions(final SpellAbility sa) { //boolean doAgain = false; final Player activator = sa.getActivatingPlayer(); final Game game = activator.getGame(); diff --git a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java index ba8bb611df0..9341f57c9f9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SacrificeEffect.java @@ -37,7 +37,7 @@ public class SacrificeEffect extends SpellAbilityEffect { sa, "Pay Echo", ManaPaymentPurpose.Echo); } final HashMap runParams = new HashMap(); - runParams.put("EchoPaid", (Boolean) isPaid); + runParams.put("EchoPaid", Boolean.valueOf(isPaid)); runParams.put("Card", card); game.getTriggerHandler().runTrigger(TriggerType.PayEcho, runParams, false); if (isPaid || !card.getController().equals(activator)) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ScryEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ScryEffect.java index 069c71774a5..cd30bc0231c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ScryEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ScryEffect.java @@ -54,20 +54,20 @@ public class ScryEffect extends SpellAbilityEffect { } } - public final void scry(Player p, int numScry) { + private static void scry(final Player p, final int numScry) { final CardCollection topN = new CardCollection(); final PlayerZone library = p.getZone(ZoneType.Library); - numScry = Math.min(numScry, library.size()); + final int actualNumScry = Math.min(numScry, library.size()); - if (numScry == 0) { return; } + if (actualNumScry == 0) { return; } - for (int i = 0; i < numScry; i++) { + for (int i = 0; i < actualNumScry; i++) { topN.add(library.get(i)); } - ImmutablePair lists = p.getController().arrangeForScry(topN); - CardCollection toTop = lists.getLeft(); - CardCollection toBottom = lists.getRight(); + final ImmutablePair lists = p.getController().arrangeForScry(topN); + final CardCollection toTop = lists.getLeft(); + final CardCollection toBottom = lists.getRight(); if (toBottom != null) { for(Card c : toBottom) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java index 189b1b69dbc..769a574fed8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/SetStateEffect.java @@ -13,7 +13,7 @@ import java.util.List; public class SetStateEffect extends SpellAbilityEffect { @Override - protected String getStackDescription(SpellAbility sa) { + protected String getStackDescription(final SpellAbility sa) { final StringBuilder sb = new StringBuilder(); final List tgtCards = getTargetCards(sa); @@ -37,7 +37,7 @@ public class SetStateEffect extends SpellAbilityEffect { } @Override - public void resolve(SpellAbility sa) { + public void resolve(final SpellAbility sa) { final Card host = sa.getHostCard(); final Game game = host.getGame(); @@ -60,7 +60,7 @@ public class SetStateEffect extends SpellAbilityEffect { } } - private boolean changeCardState(final Card tgt, final String mode, final String customState) { + private static boolean changeCardState(final Card tgt, final String mode, final String customState) { if (mode == null) return tgt.changeToState(CardStateName.smartValueOf(customState)); diff --git a/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java index 5efb88ba830..8b9e48a43c4 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java @@ -16,7 +16,7 @@ import org.apache.commons.lang3.StringUtils; import java.util.List; public class UnattachAllEffect extends SpellAbilityEffect { - private void handleUnattachment(final GameEntity o, final Card cardToUnattach) { + private static void handleUnattachment(final GameEntity o, final Card cardToUnattach) { if (o instanceof Card) { final Card c = (Card) o; if (cardToUnattach.isAura()) { @@ -136,7 +136,7 @@ public class UnattachAllEffect extends SpellAbilityEffect { */ @Override - protected String getStackDescription(SpellAbility sa) { + protected String getStackDescription(final SpellAbility sa) { final StringBuilder sb = new StringBuilder(); sb.append("Unattach all valid Equipment and Auras from "); final List targets = getTargets(sa); @@ -145,7 +145,7 @@ public class UnattachAllEffect extends SpellAbilityEffect { } @Override - public void resolve(SpellAbility sa) { + public void resolve(final SpellAbility sa) { Card source = sa.getHostCard(); final Game game = sa.getActivatingPlayer().getGame(); final List targets = getTargets(sa); diff --git a/forge-game/src/main/java/forge/game/ability/effects/VoteEffect.java b/forge-game/src/main/java/forge/game/ability/effects/VoteEffect.java index 32ffb19980f..ac207dd5c2a 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/VoteEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/VoteEffect.java @@ -28,8 +28,8 @@ public class VoteEffect extends SpellAbilityEffect { * @see forge.card.abilityfactory.SpellEffect#getStackDescription(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - protected String getStackDescription(SpellAbility sa) { - StringBuilder sb = new StringBuilder(); + protected String getStackDescription(final SpellAbility sa) { + final StringBuilder sb = new StringBuilder(); sb.append(StringUtils.join(getDefinedPlayersOrTargeted(sa), ", ")); sb.append(" vote "); if (sa.hasParam("VoteType")) { @@ -44,7 +44,7 @@ public class VoteEffect extends SpellAbilityEffect { * @see forge.card.abilityfactory.SpellEffect#resolve(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void resolve(SpellAbility sa) { + public void resolve(final SpellAbility sa) { final List tgtPlayers = getDefinedPlayersOrTargeted(sa); final List voteType = new ArrayList(); final Card host = sa.getHostCard(); @@ -107,11 +107,11 @@ public class VoteEffect extends SpellAbilityEffect { } } - private List getMostVotes(ArrayListMultimap votes) { - List most = Lists.newArrayList(); + private static List getMostVotes(final ArrayListMultimap votes) { + final List most = Lists.newArrayList(); int amount = 0; - for (Object voteType : votes.keySet()) { - int voteAmount = votes.get(voteType).size(); + for (final Object voteType : votes.keySet()) { + final int voteAmount = votes.get(voteType).size(); if (voteAmount == amount) { most.add(voteType); } else if (voteAmount > amount) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index eb69e77c3a6..ab4e7ed0910 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -89,7 +89,7 @@ import java.util.concurrent.CopyOnWriteArrayList; * @author Forge * @version $Id$ */ -public class Card extends GameEntity implements Comparable, IIdentifiable { +public class Card extends GameEntity implements Comparable { private static HashMap cardCache = new HashMap(); public static Card get(CardView cardView) { if (cardView == null) { return null; } @@ -1398,24 +1398,24 @@ public class Card extends GameEntity implements Comparable, IIdentifiable return sb.toString(); } - private String getTextForKwCantBeBlockedByAmount(String keyword) { - String restriction = keyword.split(" ", 2)[1]; - boolean isLT = "LT".equals(restriction.substring(0,2)); + private static String getTextForKwCantBeBlockedByAmount(final String keyword) { + final String restriction = keyword.split(" ", 2)[1]; + final boolean isLT = "LT".equals(restriction.substring(0,2)); final String byClause = isLT ? "except by " : "by more than "; - int cnt = Integer.parseInt(restriction.substring(2)); + final int cnt = Integer.parseInt(restriction.substring(2)); return byClause + Lang.nounWithNumeral(cnt, isLT ? "or more creature" : "creature"); } - private String getTextForKwCantBeBlockedByType(String keyword) { + private static String getTextForKwCantBeBlockedByType(final String keyword) { boolean negative = true; - List subs = Lists.newArrayList(TextUtil.split(keyword.split(" ", 2)[1], ',')); - List> subsAnd = Lists.newArrayList(); - List orClauses = new ArrayList(); + final List subs = Lists.newArrayList(TextUtil.split(keyword.split(" ", 2)[1], ',')); + final List> subsAnd = Lists.newArrayList(); + final List orClauses = new ArrayList(); for (int iOr = 0; iOr < subs.size(); iOr++) { - String expession = subs.get(iOr); - List parts = Lists.newArrayList(expession.split("[.+]")); + final String expession = subs.get(iOr); + final List parts = Lists.newArrayList(expession.split("[.+]")); for (int p = 0; p < parts.size(); p++) { - String part = parts.get(p); + final String part = parts.get(p); if (part.equalsIgnoreCase("creature")) { parts.remove(p--); continue; @@ -1438,9 +1438,9 @@ public class Card extends GameEntity implements Comparable, IIdentifiable }; for (int iOr = 0; iOr < subsAnd.size(); iOr++) { - List andOperands = subsAnd.get(iOr); - List> prependedAdjectives = Lists.newArrayList(); - List> postponedAdjectives = Lists.newArrayList(); + final List andOperands = subsAnd.get(iOr); + final List> prependedAdjectives = Lists.newArrayList(); + final List> postponedAdjectives = Lists.newArrayList(); String creatures = null; for (String part : andOperands) { @@ -4747,10 +4747,8 @@ public class Card extends GameEntity implements Comparable, IIdentifiable } else if (property.equals("attackedBySourceThisCombat")) { if (null == combat) return false; final GameEntity defender = combat.getDefenderByAttacker(source); - if (defender instanceof Card) { - if (!equals((Card) defender)) { - return false; - } + if (defender instanceof Card && !equals(defender)) { + return false; } } else if (property.startsWith("blocking")) { if (null == combat) return false; diff --git a/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java b/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java index 1d2c0f0d832..06b051c2b26 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java +++ b/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java @@ -40,7 +40,7 @@ import org.apache.commons.lang3.StringUtils; * @version $Id$ */ public class ManaCostBeingPaid { - private class ManaCostBeingPaidIterator implements IParserManaCost, Iterator { + private class ManaCostBeingPaidIterator implements IParserManaCost { private Iterator mch; private ManaCostShard nextShard = null; private int remainingShards = 0; @@ -404,7 +404,7 @@ public class ManaCostBeingPaid { return chosenShard; } - private int getPayPriority(ManaCostShard bill, byte paymentColor) { + private static int getPayPriority(final ManaCostShard bill, final byte paymentColor) { if (bill == ManaCostShard.COLORLESS) { return 0; } @@ -421,7 +421,7 @@ public class ManaCostBeingPaid { return 5; } - private boolean canBePaidWith(ManaCostShard shard, Mana mana, ManaPool pool) { + private static boolean canBePaidWith(final ManaCostShard shard, final Mana mana, final ManaPool pool) { if (shard.isSnow() && !mana.isSnow()) { return false; } diff --git a/forge-game/src/main/java/forge/game/phase/Upkeep.java b/forge-game/src/main/java/forge/game/phase/Upkeep.java index b5fee76094e..306e03c0ea5 100644 --- a/forge-game/src/main/java/forge/game/phase/Upkeep.java +++ b/forge-game/src/main/java/forge/game/phase/Upkeep.java @@ -149,7 +149,7 @@ public class Upkeep extends Phase { this.setCumulativeupkeep(true); boolean isPaid = controller.getController().payManaOptional(c, upkeepCost, this, sb.toString(), ManaPaymentPurpose.CumulativeUpkeep); final HashMap runParams = new HashMap(); - runParams.put("CumulativeUpkeepPaid", (Boolean) isPaid); + runParams.put("CumulativeUpkeepPaid", Boolean.valueOf(isPaid)); runParams.put("Card", this.getHostCard()); runParams.put("PayingMana", StringUtils.join(this.getPayingMana(), "")); game.getTriggerHandler().runTrigger(TriggerType.PayCumulativeUpkeep, runParams, false); 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 40c11d18e63..f7f637968fe 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -1229,8 +1229,8 @@ public class Player extends GameEntity implements Comparable { return dredge; } - protected final int getDredgeNumber(final Card c) { - for (String s : c.getKeywords()) { + private static int getDredgeNumber(final Card c) { + for (final String s : c.getKeywords()) { if (s.startsWith("Dredge")) { return Integer.parseInt("" + s.charAt(s.length() - 1)); } @@ -1300,7 +1300,7 @@ public class Player extends GameEntity implements Comparable { runParams.put("Player", this); runParams.put("Card", c); runParams.put("Cause", cause); - runParams.put("IsMadness", (Boolean) discardMadness); + runParams.put("IsMadness", Boolean.valueOf(discardMadness)); game.getTriggerHandler().runTrigger(TriggerType.Discarded, runParams, false); game.getGameLog().add(GameLogEntryType.DISCARD, sb.toString()); return newCard; diff --git a/forge-game/src/main/java/forge/game/player/PlayerView.java b/forge-game/src/main/java/forge/game/player/PlayerView.java index 6ff22e17f19..cf933bfd63a 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerView.java +++ b/forge-game/src/main/java/forge/game/player/PlayerView.java @@ -204,7 +204,7 @@ public class PlayerView extends GameEntityView { TrackableCollection cards = get(zoneProp); return cards == null ? 0 : cards.size(); } - private TrackableProperty getZoneProp(final ZoneType zone) { + private static TrackableProperty getZoneProp(final ZoneType zone) { switch (zone) { case Ante: return TrackableProperty.Ante; diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index bc307654744..7f058943cd6 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -56,7 +56,7 @@ public class StaticAbility extends CardTraitBase { * a {@link forge.game.card.Card} object. * @return a {@link java.util.HashMap} object. */ - public final HashMap parseParams(final String abString, final Card hostCard) { + private static HashMap parseParams(final String abString, final Card hostCard) { final HashMap mapParameters = new HashMap(); if (!(abString.length() > 0)) { @@ -174,7 +174,7 @@ public class StaticAbility extends CardTraitBase { * the host */ public StaticAbility(final String params, final Card host) { - final Map parsedParams = this.parseParams(params, host); + final Map parsedParams = parseParams(params, host); this.originalMapParams.putAll(parsedParams); this.mapParams.putAll(parsedParams); this.hostCard = host; diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java index 39436301f07..c61db5f2b6b 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerChangesZone.java @@ -98,7 +98,7 @@ public class TriggerChangesZone extends Trigger { final String comparator = condition.length < 2 ? "GE1" : condition[1]; final int referenceValue = AbilityUtils.calculateAmount(host, comparator.substring(2), this); final Card triggered = (Card)runParams2.get("Card"); - final int actualValue = CardFactoryUtil.xCount((Card)triggered, host.getSVar(condition[0])); + final int actualValue = CardFactoryUtil.xCount(triggered, host.getSVar(condition[0])); if (!Expressions.compare(actualValue, comparator.substring(0, 2), referenceValue)) { return false; } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index c4cc7727ae8..ba0700f9f2a 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -52,7 +52,7 @@ public class TriggerHandler { private final List waitingTriggers = Collections.synchronizedList(new ArrayList()); private final Game game; - public TriggerHandler(Game gameState) { + public TriggerHandler(final Game gameState) { game = gameState; } @@ -86,10 +86,10 @@ public class TriggerHandler { delayedTriggers.clear(); } - public final void clearDelayedTrigger(Card card) { - ArrayList deltrigs = new ArrayList(delayedTriggers); + public final void clearDelayedTrigger(final Card card) { + final List deltrigs = new ArrayList(delayedTriggers); - for (Trigger trigger : deltrigs) { + for (final Trigger trigger : deltrigs) { if (trigger.getHostCard().equals(card)) { delayedTriggers.remove(trigger); } @@ -184,25 +184,25 @@ public class TriggerHandler { } } - public final void clearInstrinsicActiveTriggers(Card c) { - Iterator itr = activeTriggers.iterator(); + public final void clearInstrinsicActiveTriggers(final Card c) { + final Iterator itr = activeTriggers.iterator(); Trigger t; - ArrayList toBeRemoved = new ArrayList<>(); + final List toBeRemoved = new ArrayList(); while(itr.hasNext()) { - t = (Trigger)itr.next(); + t = itr.next(); if (c.getId() == t.getHostCard().getId() && t.isIntrinsic()) { toBeRemoved.add(t); } } - for (Trigger removed : toBeRemoved) { + for (final Trigger removed : toBeRemoved) { activeTriggers.remove(removed); } } - public final void registerActiveTrigger(Card c, boolean onlyExtrinsic) { - for (final Trigger t: c.getTriggers()) { + public final void registerActiveTrigger(final Card c, final boolean onlyExtrinsic) { + for (final Trigger t : c.getTriggers()) { if (!onlyExtrinsic || c.isCloned() || !t.isIntrinsic() || t instanceof TriggerAlways) { if (isTriggerActive(t)) { activeTriggers.add(t); @@ -241,21 +241,21 @@ public class TriggerHandler { } public final boolean runWaitingTriggers() { - ArrayList waiting = new ArrayList(waitingTriggers); + final List waiting = new ArrayList(waitingTriggers); waitingTriggers.clear(); if (waiting.isEmpty()) { return false; } boolean haveWaiting = false; - for (TriggerWaiting wt : waiting) { + for (final TriggerWaiting wt : waiting) { haveWaiting |= runWaitingTrigger(wt); } return haveWaiting; } - public final boolean runWaitingTrigger(TriggerWaiting wt) { + public final boolean runWaitingTrigger(final TriggerWaiting wt) { final TriggerType mode = wt.getMode(); final Map runParams = wt.getParams(); @@ -266,7 +266,7 @@ public class TriggerHandler { } // Copy triggers here, so things can be modified just in case - final ArrayList delayedTriggersWorkingCopy = new ArrayList(delayedTriggers); + final List delayedTriggersWorkingCopy = new ArrayList(delayedTriggers); boolean checkStatics = false; @@ -280,7 +280,7 @@ public class TriggerHandler { if (runParams.containsKey("Destination")) { // Check static abilities when a card enters the battlefield - String type = (String) runParams.get("Destination"); + final String type = (String) runParams.get("Destination"); checkStatics |= type.equals("Battlefield"); } @@ -288,16 +288,14 @@ public class TriggerHandler { checkStatics |= runNonStaticTriggersForPlayer(playerAP, mode, runParams, delayedTriggersWorkingCopy); // NAPs - for (Player nap : game.getPlayers()) { - if (!nap.equals(playerAP)) { - checkStatics |= runNonStaticTriggersForPlayer(nap, mode, runParams, delayedTriggersWorkingCopy); - } + for (final Player nap : game.getNonactivePlayers()) { + checkStatics |= runNonStaticTriggersForPlayer(nap, mode, runParams, delayedTriggersWorkingCopy); } return checkStatics; } private boolean runNonStaticTriggersForPlayer(final Player player, final TriggerType mode, - final Map runParams, final ArrayList delayedTriggersWorkingCopy ) { + final Map runParams, final List delayedTriggersWorkingCopy ) { Card card = null; boolean checkStatics = false; @@ -319,7 +317,7 @@ public class TriggerHandler { } } - for (Trigger deltrig : delayedTriggersWorkingCopy) { + for (final Trigger deltrig : delayedTriggersWorkingCopy) { if (deltrig.getHostCard().getController().equals(player)) { if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) { runSingleTrigger(deltrig, runParams); @@ -385,9 +383,9 @@ public class TriggerHandler { if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noCreatureETBTriggers) && !regtrig.isStatic() && mode.equals(TriggerType.ChangesZone)) { if (runParams.get("Destination") instanceof String) { - String dest = (String) runParams.get("Destination"); + final String dest = (String) runParams.get("Destination"); if (dest.equals("Battlefield") && runParams.get("Card") instanceof Card) { - Card card = (Card) runParams.get("Card"); + final Card card = (Card) runParams.get("Card"); if (card.isCreature()) { return false; } @@ -415,7 +413,7 @@ public class TriggerHandler { SpellAbility sa = null; Card host = regtrig.getHostCard(); - Card trigCard = regtrig.getRunParams().containsKey("Card") ? (Card)regtrig.getRunParams().get("Card") : null; + final Card trigCard = regtrig.getRunParams().containsKey("Card") ? (Card)regtrig.getRunParams().get("Card") : null; if (trigCard != null && (host.getId() == trigCard.getId())) { host = trigCard; @@ -493,7 +491,7 @@ public class TriggerHandler { } final boolean isMandatory = mand; - WrappedAbility wrapperAbility = new WrappedAbility(regtrig, sa, decider); + final WrappedAbility wrapperAbility = new WrappedAbility(regtrig, sa, decider); wrapperAbility.setTrigger(true); wrapperAbility.setMandatory(isMandatory); wrapperAbility.setDescription(wrapperAbility.getStackDescription()); @@ -505,7 +503,7 @@ public class TriggerHandler { game.getStack().addSimultaneousStackEntry(wrapperAbility); } regtrig.setTriggeredSA(wrapperAbility); - + if (triggerParams.containsKey("OneOff")) { if (regtrig.getHostCard().isImmutable()) { Player p = regtrig.getHostCard().getController(); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerVote.java b/forge-game/src/main/java/forge/game/trigger/TriggerVote.java index 258e3652c27..c219dbe3479 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerVote.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerVote.java @@ -20,9 +20,8 @@ package forge.game.trigger; import forge.game.card.Card; import forge.game.player.Player; import forge.game.spellability.SpellAbility; +import forge.util.FCollection; -import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Map; @@ -56,7 +55,7 @@ public class TriggerVote extends Trigger { /** {@inheritDoc} */ @Override - public final boolean performTest(final java.util.Map runParams2) { + public final boolean performTest(final Map runParams2) { return true; } @@ -64,22 +63,20 @@ public class TriggerVote extends Trigger { @Override public final void setTriggeringObjects(final SpellAbility sa) { @SuppressWarnings("unchecked") - ArrayListMultimap votes = (ArrayListMultimap) this.getRunParams().get("AllVotes"); + final ArrayListMultimap votes = (ArrayListMultimap) this.getRunParams().get("AllVotes"); sa.setTriggeringObject("OtherVoters", getVoters(this.getHostCard().getController(), votes, true, true)); } - private List getVoters(Player player, ArrayListMultimap votes, - boolean isOpponent, boolean votedOtherchoice) { - List voters = new ArrayList(); - for (Object voteType : votes.keySet()) { - List players = votes.get(voteType); + private static FCollection getVoters(final Player player, + final ArrayListMultimap votes, + final boolean isOpponent, final boolean votedOtherchoice) { + final FCollection voters = new FCollection(); + for (final Object voteType : votes.keySet()) { + final List players = votes.get(voteType); if (votedOtherchoice ^ players.contains(player)) { voters.addAll(players); } } - HashSet set = new HashSet(voters); - voters.clear(); - voters.addAll(set); // clear duplicated players, sometime a player votes more than once if (isOpponent) { voters.retainAll(player.getOpponents()); } diff --git a/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java b/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java index 78face75dc0..44b585988dc 100644 --- a/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java +++ b/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java @@ -23,7 +23,7 @@ import com.google.common.collect.Lists; // possible corner cases. // (The trigger can have a hardcoded OverridingAbility which can make // use of any of the methods) -public class WrappedAbility extends Ability implements ISpellAbility { +public class WrappedAbility extends Ability { private final SpellAbility sa; private final Trigger regtrig; diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index f9a440e737d..834954b530f 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -54,7 +54,6 @@ import java.util.*; import java.util.Map.Entry; import java.util.concurrent.LinkedBlockingDeque; - /** *

* MagicStack class. @@ -784,7 +783,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable c) { + private static void execute(final List c) { final int length = c.size(); for (int i = 0; i < length; i++) { c.remove(0).run(); diff --git a/forge-game/src/main/java/forge/game/zone/Zone.java b/forge-game/src/main/java/forge/game/zone/Zone.java index 638eedf3590..dd046a3f2b4 100644 --- a/forge-game/src/main/java/forge/game/zone/Zone.java +++ b/forge-game/src/main/java/forge/game/zone/Zone.java @@ -166,15 +166,15 @@ public class Zone implements java.io.Serializable, Iterable { return getCardsAdded(cardsAddedLastTurn, origin); } - private final CardCollectionView getCardsAdded(final MapOfLists cardsAdded, final ZoneType origin) { + private static CardCollectionView getCardsAdded(final MapOfLists cardsAdded, final ZoneType origin) { if (origin != null) { - Collection cards = cardsAdded.get(origin); + final Collection cards = cardsAdded.get(origin); return cards == null ? CardCollection.EMPTY : new CardCollection(cards); } // all cards if key == null final CardCollection ret = new CardCollection(); - for (Collection kv : cardsAdded.values()) { + for (final Collection kv : cardsAdded.values()) { ret.addAll(kv); } return ret; @@ -182,7 +182,7 @@ public class Zone implements java.io.Serializable, Iterable { public final void resetCardsAddedThisTurn() { cardsAddedLastTurn.clear(); - for (Entry> entry : cardsAddedThisTurn.entrySet()) { + for (final Entry> entry : cardsAddedThisTurn.entrySet()) { cardsAddedLastTurn.addAll(entry.getKey(), entry.getValue()); } cardsAddedThisTurn.clear();