Huge cleanup: use collection interfaces (List, Set, Map) rather than

implementations (ArrayList etc.) in references to objects
This commit is contained in:
elcnesh
2015-05-17 11:28:21 +00:00
parent 6274c5379a
commit b3f38edef3
105 changed files with 521 additions and 436 deletions

View File

@@ -40,9 +40,9 @@ import java.util.Set;
*/ */
public class AiCardMemory { public class AiCardMemory {
private HashSet<Card> memMandatoryAttackers = new HashSet<Card>(); private Set<Card> memMandatoryAttackers = new HashSet<Card>();
private HashSet<Card> memHeldManaSources = new HashSet<Card>(); private Set<Card> memHeldManaSources = new HashSet<Card>();
private HashSet<Card> memAttachedThisTurn = new HashSet<Card>(); private Set<Card> memAttachedThisTurn = new HashSet<Card>();
//private HashSet<Card> memRevealedCards = new HashSet<Card>(); //private HashSet<Card> memRevealedCards = new HashSet<Card>();
/** /**

View File

@@ -137,7 +137,7 @@ public class AiController {
simPicker = new SpellAbilityPicker(game, player); simPicker = new SpellAbilityPicker(game, player);
} }
private ArrayList<SpellAbility> getPossibleETBCounters() { private List<SpellAbility> getPossibleETBCounters() {
final Player opp = player.getOpponent(); final Player opp = player.getOpponent();
CardCollection all = new CardCollection(player.getCardsIn(ZoneType.Hand)); CardCollection all = new CardCollection(player.getCardsIn(ZoneType.Hand));
all.addAll(player.getCardsIn(ZoneType.Exile)); all.addAll(player.getCardsIn(ZoneType.Exile));
@@ -147,7 +147,7 @@ public class AiController {
} }
all.addAll(opp.getCardsIn(ZoneType.Exile)); all.addAll(opp.getCardsIn(ZoneType.Exile));
final ArrayList<SpellAbility> spellAbilities = new ArrayList<SpellAbility>(); final List<SpellAbility> spellAbilities = new ArrayList<SpellAbility>();
for (final Card c : all) { for (final Card c : all) {
for (final SpellAbility sa : c.getNonManaAbilities()) { for (final SpellAbility sa : c.getNonManaAbilities()) {
if (sa instanceof SpellPermanent) { if (sa instanceof SpellPermanent) {
@@ -323,8 +323,8 @@ public class AiController {
return true; return true;
} }
private static ArrayList<SpellAbility> getPlayableCounters(final CardCollection l) { private static List<SpellAbility> getPlayableCounters(final CardCollection l) {
final ArrayList<SpellAbility> spellAbility = new ArrayList<SpellAbility>(); final List<SpellAbility> spellAbility = new ArrayList<SpellAbility>();
for (final Card c : l) { for (final Card c : l) {
for (final SpellAbility sa : c.getNonManaAbilities()) { for (final SpellAbility sa : c.getNonManaAbilities()) {
// Check if this AF is a Counterpsell // Check if this AF is a Counterpsell
@@ -482,7 +482,7 @@ public class AiController {
if (Iterables.any(landList, CardPredicates.Presets.BASIC_LANDS)) { if (Iterables.any(landList, CardPredicates.Presets.BASIC_LANDS)) {
final CardCollectionView combined = player.getCardsIn(ZoneType.Battlefield); final CardCollectionView combined = player.getCardsIn(ZoneType.Battlefield);
final ArrayList<String> basics = new ArrayList<String>(); final List<String> basics = new ArrayList<String>();
// what types can I go get? // what types can I go get?
for (final String name : CardType.Constant.BASIC_TYPES) { for (final String name : CardType.Constant.BASIC_TYPES) {
@@ -513,7 +513,7 @@ public class AiController {
} }
// if return true, go to next phase // if return true, go to next phase
private SpellAbility chooseCounterSpell(final ArrayList<SpellAbility> possibleCounters) { private SpellAbility chooseCounterSpell(final List<SpellAbility> possibleCounters) {
if (possibleCounters == null || possibleCounters.isEmpty()) { if (possibleCounters == null || possibleCounters.isEmpty()) {
return null; return null;
} }
@@ -562,7 +562,7 @@ public class AiController {
final CardCollectionView cards = handOnly ? player.getCardsIn(ZoneType.Hand) : final CardCollectionView cards = handOnly ? player.getCardsIn(ZoneType.Hand) :
ComputerUtilAbility.getAvailableCards(game, player); ComputerUtilAbility.getAvailableCards(game, player);
ArrayList<SpellAbility> all = ComputerUtilAbility.getSpellAbilities(cards, player); List<SpellAbility> all = ComputerUtilAbility.getSpellAbilities(cards, player);
Collections.sort(all, saComparator); // put best spells first Collections.sort(all, saComparator); // put best spells first
for (final SpellAbility sa : ComputerUtilAbility.getOriginalAndAltCostAbilities(all, player)) { for (final SpellAbility sa : ComputerUtilAbility.getOriginalAndAltCostAbilities(all, player)) {
@@ -1169,7 +1169,7 @@ public class AiController {
return result; return result;
} }
private SpellAbility chooseSpellAbilityToPlay(final ArrayList<SpellAbility> all, boolean skipCounter) { private SpellAbility chooseSpellAbilityToPlay(final List<SpellAbility> all, boolean skipCounter) {
if (all == null || all.isEmpty()) if (all == null || all.isEmpty())
return null; return null;

View File

@@ -62,7 +62,7 @@ public class AiProfileUtil {
AI_PROFILE_DIR = aiProfileDir; AI_PROFILE_DIR = aiProfileDir;
loadedProfiles.clear(); loadedProfiles.clear();
ArrayList<String> availableProfiles = getAvailableProfiles(); List<String> availableProfiles = getAvailableProfiles();
for (String profile : availableProfiles) { for (String profile : availableProfiles) {
loadedProfiles.put(profile, loadProfile(profile)); loadedProfiles.put(profile, loadProfile(profile));
} }
@@ -119,9 +119,9 @@ public class AiProfileUtil {
* @return ArrayList<String> - an array of strings containing all * @return ArrayList<String> - an array of strings containing all
* available profiles. * available profiles.
*/ */
public static ArrayList<String> getAvailableProfiles() public static List<String> getAvailableProfiles()
{ {
final ArrayList<String> availableProfiles = new ArrayList<String>(); final List<String> availableProfiles = new ArrayList<String>();
final File dir = new File(AI_PROFILE_DIR); final File dir = new File(AI_PROFILE_DIR);
final String[] children = dir.list(); final String[] children = dir.list();
@@ -144,8 +144,8 @@ public class AiProfileUtil {
* @return ArrayList<String> - an array list of strings containing all * @return ArrayList<String> - an array list of strings containing all
* available profiles including special random profile tags. * available profiles including special random profile tags.
*/ */
public static ArrayList<String> getProfilesDisplayList() { public static List<String> getProfilesDisplayList() {
final ArrayList<String> availableProfiles = new ArrayList<String>(); final List<String> availableProfiles = new ArrayList<String>();
availableProfiles.add(AI_PROFILE_RANDOM_MATCH); availableProfiles.add(AI_PROFILE_RANDOM_MATCH);
availableProfiles.add(AI_PROFILE_RANDOM_DUEL); availableProfiles.add(AI_PROFILE_RANDOM_DUEL);
availableProfiles.addAll(getAvailableProfiles()); availableProfiles.addAll(getAvailableProfiles());

View File

@@ -27,9 +27,9 @@ import java.util.Random;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
import forge.ai.ability.ProtectAi; import forge.ai.ability.ProtectAi;
import forge.card.CardType; import forge.card.CardType;
@@ -1156,7 +1156,7 @@ public class ComputerUtil {
} }
} else { } else {
objects = topStack.getTargets().getTargets(); objects = topStack.getTargets().getTargets();
final ArrayList<GameObject> canBeTargeted = new ArrayList<GameObject>(); final List<GameObject> canBeTargeted = new ArrayList<GameObject>();
for (Object o : objects) { for (Object o : objects) {
if (o instanceof Card) { if (o instanceof Card) {
final Card c = (Card) o; final Card c = (Card) o;
@@ -1612,7 +1612,7 @@ public class ComputerUtil {
if (logic != null) { if (logic != null) {
if (logic.equals("MostNeededType")) { if (logic.equals("MostNeededType")) {
// Choose a type that is in the deck, but not in hand or on the battlefield // Choose a type that is in the deck, but not in hand or on the battlefield
final ArrayList<String> basics = new ArrayList<String>(); final List<String> basics = new ArrayList<String>();
basics.addAll(CardType.Constant.BASIC_TYPES); basics.addAll(CardType.Constant.BASIC_TYPES);
CardCollectionView presentCards = CardCollection.combine(ai.getCardsIn(ZoneType.Battlefield), ai.getCardsIn(ZoneType.Hand)); CardCollectionView presentCards = CardCollection.combine(ai.getCardsIn(ZoneType.Battlefield), ai.getCardsIn(ZoneType.Hand));
CardCollectionView possibleCards = ai.getAllCards(); CardCollectionView possibleCards = ai.getAllCards();
@@ -1666,7 +1666,7 @@ public class ComputerUtil {
return chosen; return chosen;
} }
public static Object vote(Player ai, List<Object> options, SpellAbility sa, ArrayListMultimap<Object, Player> votes) { public static Object vote(Player ai, List<Object> options, SpellAbility sa, Multimap<Object, Player> votes) {
if (!sa.hasParam("AILogic")) { if (!sa.hasParam("AILogic")) {
return Aggregates.random(options); return Aggregates.random(options);
} else { } else {

View File

@@ -1,6 +1,7 @@
package forge.ai; package forge.ai;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import forge.card.CardStateName; import forge.card.CardStateName;
import forge.game.Game; import forge.game.Game;
@@ -12,7 +13,6 @@ import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
public class ComputerUtilAbility { public class ComputerUtilAbility {
public static CardCollection getAvailableCards(final Game game, final Player player) { public static CardCollection getAvailableCards(final Game game, final Player player) {
CardCollection all = new CardCollection(player.getCardsIn(ZoneType.Hand)); CardCollection all = new CardCollection(player.getCardsIn(ZoneType.Hand));
@@ -29,8 +29,8 @@ public class ComputerUtilAbility {
return all; return all;
} }
public static ArrayList<SpellAbility> getSpellAbilities(final CardCollectionView l, final Player player) { public static List<SpellAbility> getSpellAbilities(final CardCollectionView l, final Player player) {
final ArrayList<SpellAbility> spellAbilities = new ArrayList<SpellAbility>(); final List<SpellAbility> spellAbilities = new ArrayList<SpellAbility>();
for (final Card c : l) { for (final Card c : l) {
for (final SpellAbility sa : c.getSpellAbilities()) { for (final SpellAbility sa : c.getSpellAbilities()) {
spellAbilities.add(sa); spellAbilities.add(sa);
@@ -44,8 +44,8 @@ public class ComputerUtilAbility {
return spellAbilities; return spellAbilities;
} }
public static ArrayList<SpellAbility> getOriginalAndAltCostAbilities(final ArrayList<SpellAbility> originList, final Player player) { public static List<SpellAbility> getOriginalAndAltCostAbilities(final List<SpellAbility> originList, final Player player) {
final ArrayList<SpellAbility> newAbilities = new ArrayList<SpellAbility>(); final List<SpellAbility> newAbilities = new ArrayList<SpellAbility>();
for (SpellAbility sa : originList) { for (SpellAbility sa : originList) {
sa.setActivatingPlayer(player); sa.setActivatingPlayer(player);
//add alternative costs as additional spell abilities //add alternative costs as additional spell abilities
@@ -53,7 +53,7 @@ public class ComputerUtilAbility {
newAbilities.addAll(GameActionUtil.getAlternativeCosts(sa, player)); newAbilities.addAll(GameActionUtil.getAlternativeCosts(sa, player));
} }
final ArrayList<SpellAbility> result = new ArrayList<SpellAbility>(); final List<SpellAbility> result = new ArrayList<SpellAbility>();
for (SpellAbility sa : newAbilities) { for (SpellAbility sa : newAbilities) {
sa.setActivatingPlayer(player); sa.setActivatingPlayer(player);
result.addAll(GameActionUtil.getOptionalCosts(sa)); result.addAll(GameActionUtil.getOptionalCosts(sa));

View File

@@ -1,5 +1,18 @@
package forge.ai; package forge.ai;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
@@ -15,7 +28,15 @@ import forge.game.Game;
import forge.game.GameObject; import forge.game.GameObject;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.ApiType; import forge.game.ability.ApiType;
import forge.game.card.*; import forge.game.card.Card;
import forge.game.card.CardCollection;
import forge.game.card.CardCollectionView;
import forge.game.card.CardFactory;
import forge.game.card.CardFactoryUtil;
import forge.game.card.CardLists;
import forge.game.card.CardPredicates;
import forge.game.card.CardUtil;
import forge.game.card.CounterType;
import forge.game.combat.Combat; import forge.game.combat.Combat;
import forge.game.combat.CombatUtil; import forge.game.combat.CombatUtil;
import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseHandler;
@@ -30,13 +51,6 @@ import forge.item.PaperCard;
import forge.util.Aggregates; import forge.util.Aggregates;
import forge.util.MyRandom; import forge.util.MyRandom;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.tuple.MutablePair;
import org.apache.commons.lang3.tuple.Pair;
import java.util.*;
import java.util.Map.Entry;
public class ComputerUtilCard { public class ComputerUtilCard {
public static Card getMostExpensivePermanentAI(final CardCollectionView list, final SpellAbility spell, final boolean targeted) { public static Card getMostExpensivePermanentAI(final CardCollectionView list, final SpellAbility spell, final boolean targeted) {
@@ -1153,7 +1167,7 @@ public class ComputerUtilCard {
Card pumped = CardFactory.copyCard(c, true); Card pumped = CardFactory.copyCard(c, true);
pumped.setSickness(c.hasSickness()); pumped.setSickness(c.hasSickness());
final long timestamp = c.getGame().getNextTimestamp(); final long timestamp = c.getGame().getNextTimestamp();
final ArrayList<String> kws = new ArrayList<String>(); final List<String> kws = new ArrayList<String>();
for (String kw : keywords) { for (String kw : keywords) {
if (kw.startsWith("HIDDEN")) { if (kw.startsWith("HIDDEN")) {
pumped.addHiddenExtrinsicKeyword(kw); pumped.addHiddenExtrinsicKeyword(kw);

View File

@@ -2,6 +2,8 @@ package forge.ai;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.card.MagicColor; import forge.card.MagicColor;
@@ -133,7 +135,7 @@ public class ComputerUtilMana {
} }
} }
private static void sortManaAbilities(final ArrayListMultimap<ManaCostShard, SpellAbility> manaAbilityMap) { private static void sortManaAbilities(final Multimap<ManaCostShard, SpellAbility> manaAbilityMap) {
final Map<Card, ManaProducingCard> manaCardMap = new HashMap<>(); final Map<Card, ManaProducingCard> manaCardMap = new HashMap<>();
final List<Card> orderedCards = new ArrayList<>(); final List<Card> orderedCards = new ArrayList<>();
@@ -162,7 +164,7 @@ public class ComputerUtilMana {
} }
for (final ManaCostShard shard : manaAbilityMap.keySet()) { for (final ManaCostShard shard : manaAbilityMap.keySet()) {
final List<SpellAbility> abilities = manaAbilityMap.get(shard); final Collection<SpellAbility> abilities = manaAbilityMap.get(shard);
final List<SpellAbility> newAbilities = new ArrayList<>(abilities); final List<SpellAbility> newAbilities = new ArrayList<>(abilities);
if (DEBUG_MANA_PAYMENT) { if (DEBUG_MANA_PAYMENT) {
@@ -254,7 +256,7 @@ public class ComputerUtilMana {
} }
// arrange all mana abilities by color produced. // arrange all mana abilities by color produced.
final ArrayListMultimap<Integer, SpellAbility> manaAbilityMap = ComputerUtilMana.groupSourcesByManaColor(ai, true); final ListMultimap<Integer, SpellAbility> manaAbilityMap = ComputerUtilMana.groupSourcesByManaColor(ai, true);
if (manaAbilityMap.isEmpty()) { if (manaAbilityMap.isEmpty()) {
refundMana(manaSpentToPay, ai, sa); refundMana(manaSpentToPay, ai, sa);
@@ -263,7 +265,7 @@ public class ComputerUtilMana {
} }
// select which abilities may be used for each shard // select which abilities may be used for each shard
ArrayListMultimap<ManaCostShard, SpellAbility> sourcesForShards = ComputerUtilMana.groupAndOrderToPayShards(ai, manaAbilityMap, cost); Multimap<ManaCostShard, SpellAbility> sourcesForShards = ComputerUtilMana.groupAndOrderToPayShards(ai, manaAbilityMap, cost);
sortManaAbilities(sourcesForShards); sortManaAbilities(sourcesForShards);
@@ -321,7 +323,7 @@ public class ComputerUtilMana {
} }
// arrange all mana abilities by color produced. // arrange all mana abilities by color produced.
final ArrayListMultimap<Integer, SpellAbility> manaAbilityMap = ComputerUtilMana.groupSourcesByManaColor(ai, checkPlayable); final ListMultimap<Integer, SpellAbility> manaAbilityMap = ComputerUtilMana.groupSourcesByManaColor(ai, checkPlayable);
if (manaAbilityMap.isEmpty()) { if (manaAbilityMap.isEmpty()) {
refundMana(manaSpentToPay, ai, sa); refundMana(manaSpentToPay, ai, sa);
@@ -334,7 +336,7 @@ public class ComputerUtilMana {
} }
// select which abilities may be used for each shard // select which abilities may be used for each shard
ArrayListMultimap<ManaCostShard, SpellAbility> sourcesForShards = ComputerUtilMana.groupAndOrderToPayShards(ai, manaAbilityMap, cost); ListMultimap<ManaCostShard, SpellAbility> sourcesForShards = ComputerUtilMana.groupAndOrderToPayShards(ai, manaAbilityMap, cost);
sortManaAbilities(sourcesForShards); sortManaAbilities(sourcesForShards);
@@ -826,9 +828,9 @@ public class ComputerUtilMana {
* @param manaAbilityMap The map of SpellAbilities that produce mana. * @param manaAbilityMap The map of SpellAbilities that produce mana.
* @return Were all mana sources found? * @return Were all mana sources found?
*/ */
private static ArrayListMultimap<ManaCostShard, SpellAbility> groupAndOrderToPayShards(final Player ai, final ArrayListMultimap<Integer, SpellAbility> manaAbilityMap, private static ListMultimap<ManaCostShard, SpellAbility> groupAndOrderToPayShards(final Player ai, final ListMultimap<Integer, SpellAbility> manaAbilityMap,
final ManaCostBeingPaid cost) { final ManaCostBeingPaid cost) {
ArrayListMultimap<ManaCostShard, SpellAbility> res = ArrayListMultimap.create(); ListMultimap<ManaCostShard, SpellAbility> res = ArrayListMultimap.create();
if (cost.getColorlessManaAmount() > 0 && manaAbilityMap.containsKey(ManaAtom.COLORLESS)) { if (cost.getColorlessManaAmount() > 0 && manaAbilityMap.containsKey(ManaAtom.COLORLESS)) {
res.putAll(ManaCostShard.COLORLESS, manaAbilityMap.get(ManaAtom.COLORLESS)); res.putAll(ManaCostShard.COLORLESS, manaAbilityMap.get(ManaAtom.COLORLESS));
@@ -974,7 +976,7 @@ public class ComputerUtilMana {
int usableManaAbilities = 0; int usableManaAbilities = 0;
boolean needsLimitedResources = false; boolean needsLimitedResources = false;
boolean producesAnyColor = false; boolean producesAnyColor = false;
final ArrayList<SpellAbility> manaAbilities = getAIPlayableMana(card); final List<SpellAbility> manaAbilities = getAIPlayableMana(card);
for (final SpellAbility m : manaAbilities) { for (final SpellAbility m : manaAbilities) {
if (m.getManaPart().isAnyMana()) { if (m.getManaPart().isAnyMana()) {
@@ -1044,8 +1046,8 @@ public class ComputerUtilMana {
} // getAvailableMana() } // getAvailableMana()
//This method is currently used by AI to estimate mana available //This method is currently used by AI to estimate mana available
private static ArrayListMultimap<Integer, SpellAbility> groupSourcesByManaColor(final Player ai, boolean checkPlayable) { private static ListMultimap<Integer, SpellAbility> groupSourcesByManaColor(final Player ai, boolean checkPlayable) {
final ArrayListMultimap<Integer, SpellAbility> manaMap = ArrayListMultimap.create(); final ListMultimap<Integer, SpellAbility> manaMap = ArrayListMultimap.create();
final Game game = ai.getGame(); final Game game = ai.getGame();
List<ReplacementEffect> replacementEffects = new ArrayList<ReplacementEffect>(); List<ReplacementEffect> replacementEffects = new ArrayList<ReplacementEffect>();
@@ -1167,10 +1169,10 @@ public class ComputerUtilMana {
* getAIPlayableMana. * getAIPlayableMana.
* </p> * </p>
* *
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.List} object.
*/ */
public static ArrayList<SpellAbility> getAIPlayableMana(Card c) { public static List<SpellAbility> getAIPlayableMana(Card c) {
final ArrayList<SpellAbility> res = new ArrayList<>(); final List<SpellAbility> res = new ArrayList<>();
for (final SpellAbility a : c.getManaAbilities()) { for (final SpellAbility a : c.getManaAbilities()) {
// if a mana ability has a mana cost the AI will miscalculate // if a mana ability has a mana cost the AI will miscalculate
// if there is a parent ability the AI can't use it // if there is a parent ability the AI can't use it

View File

@@ -6,6 +6,7 @@ import java.io.InputStreamReader;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
@@ -214,7 +215,7 @@ public abstract class GameState {
if (life > 0) p.setLife(life, null); if (life > 0) p.setLife(life, null);
for (Entry<ZoneType, CardCollectionView> kv : playerCards.entrySet()) { for (Entry<ZoneType, CardCollectionView> kv : playerCards.entrySet()) {
if (kv.getKey() == ZoneType.Battlefield) { if (kv.getKey() == ZoneType.Battlefield) {
ArrayList<Card> cards = new ArrayList<Card>(); List<Card> cards = new ArrayList<Card>();
for (final Card c : kv.getValue()) { for (final Card c : kv.getValue()) {
if (c.isToken()) { if (c.isToken()) {
cards.add(c); cards.add(c);

View File

@@ -3,8 +3,8 @@ package forge.ai;
import com.esotericsoftware.minlog.Log; import com.esotericsoftware.minlog.Log;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import forge.LobbyPlayer; import forge.LobbyPlayer;
@@ -356,7 +356,7 @@ public class PlayerControllerAi extends PlayerController {
} }
@Override @Override
public Object vote(SpellAbility sa, String prompt, List<Object> options, ArrayListMultimap<Object, Player> votes) { public Object vote(SpellAbility sa, String prompt, List<Object> options, ListMultimap<Object, Player> votes) {
return ComputerUtil.vote(player, options, sa, votes); return ComputerUtil.vote(player, options, sa, votes);
} }
@@ -599,7 +599,7 @@ public class PlayerControllerAi extends PlayerController {
} }
@Override @Override
public ReplacementEffect chooseSingleReplacementEffect(String prompt, List<ReplacementEffect> possibleReplacers, HashMap<String, Object> runParams) { public ReplacementEffect chooseSingleReplacementEffect(String prompt, List<ReplacementEffect> possibleReplacers, Map<String, Object> runParams) {
// AI logic for choosing which replacement effect to apply // AI logic for choosing which replacement effect to apply
// happens here. // happens here.
return possibleReplacers.get(0); return possibleReplacers.get(0);

View File

@@ -290,17 +290,17 @@ public class AnimateAi extends SpellAbilityAi {
types.add(source.getChosenType()); types.add(source.getChosenType());
} }
final ArrayList<String> keywords = new ArrayList<String>(); final List<String> keywords = new ArrayList<String>();
if (sa.hasParam("Keywords")) { if (sa.hasParam("Keywords")) {
keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & ")));
} }
final ArrayList<String> removeKeywords = new ArrayList<String>(); final List<String> removeKeywords = new ArrayList<String>();
if (sa.hasParam("RemoveKeywords")) { if (sa.hasParam("RemoveKeywords")) {
removeKeywords.addAll(Arrays.asList(sa.getParam("RemoveKeywords").split(" & "))); removeKeywords.addAll(Arrays.asList(sa.getParam("RemoveKeywords").split(" & ")));
} }
final ArrayList<String> hiddenKeywords = new ArrayList<String>(); final List<String> hiddenKeywords = new ArrayList<String>();
if (sa.hasParam("HiddenKeywords")) { if (sa.hasParam("HiddenKeywords")) {
hiddenKeywords.addAll(Arrays.asList(sa.getParam("HiddenKeywords").split(" & "))); hiddenKeywords.addAll(Arrays.asList(sa.getParam("HiddenKeywords").split(" & ")));
} }
@@ -327,31 +327,31 @@ public class AnimateAi extends SpellAbilityAi {
final String finalDesc = tmpDesc; final String finalDesc = tmpDesc;
// abilities to add to the animated being // abilities to add to the animated being
final ArrayList<String> abilities = new ArrayList<String>(); final List<String> abilities = new ArrayList<String>();
if (sa.hasParam("Abilities")) { if (sa.hasParam("Abilities")) {
abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(","))); abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(",")));
} }
// replacement effects to add to the animated being // replacement effects to add to the animated being
final ArrayList<String> replacements = new ArrayList<String>(); final List<String> replacements = new ArrayList<String>();
if (sa.hasParam("Replacements")) { if (sa.hasParam("Replacements")) {
replacements.addAll(Arrays.asList(sa.getParam("Replacements").split(","))); replacements.addAll(Arrays.asList(sa.getParam("Replacements").split(",")));
} }
// triggers to add to the animated being // triggers to add to the animated being
final ArrayList<String> triggers = new ArrayList<String>(); final List<String> triggers = new ArrayList<String>();
if (sa.hasParam("Triggers")) { if (sa.hasParam("Triggers")) {
triggers.addAll(Arrays.asList(sa.getParam("Triggers").split(","))); triggers.addAll(Arrays.asList(sa.getParam("Triggers").split(",")));
} }
// static abilities to add to the animated being // static abilities to add to the animated being
final ArrayList<String> stAbs = new ArrayList<String>(); final List<String> stAbs = new ArrayList<String>();
if (sa.hasParam("staticAbilities")) { if (sa.hasParam("staticAbilities")) {
stAbs.addAll(Arrays.asList(sa.getParam("staticAbilities").split(","))); stAbs.addAll(Arrays.asList(sa.getParam("staticAbilities").split(",")));
} }
// sVars to add to the animated being // sVars to add to the animated being
final ArrayList<String> sVars = new ArrayList<String>(); final List<String> sVars = new ArrayList<String>();
if (sa.hasParam("sVars")) { if (sa.hasParam("sVars")) {
sVars.addAll(Arrays.asList(sa.getParam("sVars").split(","))); sVars.addAll(Arrays.asList(sa.getParam("sVars").split(",")));
} }
@@ -413,7 +413,7 @@ public class AnimateAi extends SpellAbilityAi {
//back to duplicating AnimateEffect.resolve //back to duplicating AnimateEffect.resolve
//TODO will all these abilities/triggers/replacements/etc. lead to memory leaks or unintended effects? //TODO will all these abilities/triggers/replacements/etc. lead to memory leaks or unintended effects?
// remove abilities // remove abilities
final ArrayList<SpellAbility> removedAbilities = new ArrayList<SpellAbility>(); final List<SpellAbility> removedAbilities = new ArrayList<SpellAbility>();
boolean clearAbilities = sa.hasParam("OverwriteAbilities"); boolean clearAbilities = sa.hasParam("OverwriteAbilities");
boolean clearSpells = sa.hasParam("OverwriteSpells"); boolean clearSpells = sa.hasParam("OverwriteSpells");
boolean removeAll = sa.hasParam("RemoveAllAbilities"); boolean removeAll = sa.hasParam("RemoveAllAbilities");
@@ -429,7 +429,7 @@ public class AnimateAi extends SpellAbilityAi {
} }
// give abilities // give abilities
final ArrayList<SpellAbility> addedAbilities = new ArrayList<SpellAbility>(); final List<SpellAbility> addedAbilities = new ArrayList<SpellAbility>();
if (abilities.size() > 0) { if (abilities.size() > 0) {
for (final String s : abilities) { for (final String s : abilities) {
final String actualAbility = source.getSVar(s); final String actualAbility = source.getSVar(s);
@@ -440,7 +440,7 @@ public class AnimateAi extends SpellAbilityAi {
} }
// Grant triggers // Grant triggers
final ArrayList<Trigger> addedTriggers = new ArrayList<Trigger>(); final List<Trigger> addedTriggers = new ArrayList<Trigger>();
if (triggers.size() > 0) { if (triggers.size() > 0) {
for (final String s : triggers) { for (final String s : triggers) {
final String actualTrigger = source.getSVar(s); final String actualTrigger = source.getSVar(s);
@@ -450,7 +450,7 @@ public class AnimateAi extends SpellAbilityAi {
} }
// give replacement effects // give replacement effects
final ArrayList<ReplacementEffect> addedReplacements = new ArrayList<ReplacementEffect>(); final List<ReplacementEffect> addedReplacements = new ArrayList<ReplacementEffect>();
if (replacements.size() > 0) { if (replacements.size() > 0) {
for (final String s : replacements) { for (final String s : replacements) {
final String actualReplacement = source.getSVar(s); final String actualReplacement = source.getSVar(s);
@@ -460,7 +460,7 @@ public class AnimateAi extends SpellAbilityAi {
} }
// suppress triggers from the animated card // suppress triggers from the animated card
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>(); final List<Trigger> removedTriggers = new ArrayList<Trigger>();
if (sa.hasParam("OverwriteTriggers") || removeAll) { if (sa.hasParam("OverwriteTriggers") || removeAll) {
final FCollectionView<Trigger> triggersToRemove = card.getTriggers(); final FCollectionView<Trigger> triggersToRemove = card.getTriggers();
for (final Trigger trigger : triggersToRemove) { for (final Trigger trigger : triggersToRemove) {
@@ -498,7 +498,7 @@ public class AnimateAi extends SpellAbilityAi {
} }
// suppress static abilities from the animated card // suppress static abilities from the animated card
final ArrayList<StaticAbility> removedStatics = new ArrayList<StaticAbility>(); final List<StaticAbility> removedStatics = new ArrayList<StaticAbility>();
if (sa.hasParam("OverwriteStatics") || removeAll) { if (sa.hasParam("OverwriteStatics") || removeAll) {
final FCollectionView<StaticAbility> staticsToRemove = card.getStaticAbilities(); final FCollectionView<StaticAbility> staticsToRemove = card.getStaticAbilities();
for (final StaticAbility stAb : staticsToRemove) { for (final StaticAbility stAb : staticsToRemove) {
@@ -508,7 +508,7 @@ public class AnimateAi extends SpellAbilityAi {
} }
// suppress static abilities from the animated card // suppress static abilities from the animated card
final ArrayList<ReplacementEffect> removedReplacements = new ArrayList<ReplacementEffect>(); final List<ReplacementEffect> removedReplacements = new ArrayList<ReplacementEffect>();
if (sa.hasParam("OverwriteReplacements") || removeAll) { if (sa.hasParam("OverwriteReplacements") || removeAll) {
for (final ReplacementEffect re : card.getReplacementEffects()) { for (final ReplacementEffect re : card.getReplacementEffects()) {
re.setTemporarilySuppressed(true); re.setTemporarilySuppressed(true);

View File

@@ -564,7 +564,7 @@ public class AttachAi extends SpellAbilityAi {
int totToughness = 0; int totToughness = 0;
int totPower = 0; int totPower = 0;
final ArrayList<String> keywords = new ArrayList<String>(); final List<String> keywords = new ArrayList<String>();
for (final StaticAbility stAbility : attachSource.getStaticAbilities()) { for (final StaticAbility stAbility : attachSource.getStaticAbilities()) {
final Map<String, String> stabMap = stAbility.getMapParams(); final Map<String, String> stabMap = stAbility.getMapParams();
@@ -860,7 +860,7 @@ public class AttachAi extends SpellAbilityAi {
int totToughness = 0; int totToughness = 0;
int totPower = 0; int totPower = 0;
final ArrayList<String> keywords = new ArrayList<String>(); final List<String> keywords = new ArrayList<String>();
boolean grantingAbilities = false; boolean grantingAbilities = false;
for (final StaticAbility stAbility : attachSource.getStaticAbilities()) { for (final StaticAbility stAbility : attachSource.getStaticAbilities()) {
@@ -1169,7 +1169,7 @@ public class AttachAi extends SpellAbilityAi {
* @param sa SpellAbility * @param sa SpellAbility
* @return true, if successful * @return true, if successful
*/ */
private static boolean containsUsefulCurseKeyword(final ArrayList<String> keywords, final Card card, final SpellAbility sa) { private static boolean containsUsefulCurseKeyword(final List<String> keywords, final Card card, final SpellAbility sa) {
for (final String keyword : keywords) { for (final String keyword : keywords) {
if (isUsefulCurseKeyword(keyword, card, sa)) { if (isUsefulCurseKeyword(keyword, card, sa)) {
return true; return true;

View File

@@ -465,7 +465,7 @@ public class ChangeZoneAi extends SpellAbilityAi {
*/ */
private static Card basicManaFixing(final Player ai, final List<Card> list) { // Search for a Basic Land private static Card basicManaFixing(final Player ai, final List<Card> list) { // Search for a Basic Land
final CardCollectionView combined = CardCollection.combine(ai.getCardsIn(ZoneType.Battlefield), ai.getCardsIn(ZoneType.Hand)); final CardCollectionView combined = CardCollection.combine(ai.getCardsIn(ZoneType.Battlefield), ai.getCardsIn(ZoneType.Hand));
final ArrayList<String> basics = new ArrayList<String>(); final List<String> basics = new ArrayList<String>();
// what types can I go get? // what types can I go get?
for (final String name : MagicColor.Constant.BASIC_LANDS) { for (final String name : MagicColor.Constant.BASIC_LANDS) {

View File

@@ -1,8 +1,17 @@
package forge.ai.ability; package forge.ai.ability;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import forge.ai.*; import forge.ai.AiAttackController;
import forge.ai.ComputerUtil;
import forge.ai.ComputerUtilCard;
import forge.ai.ComputerUtilCombat;
import forge.ai.ComputerUtilCost;
import forge.ai.SpellAbilityAi;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
@@ -21,13 +30,9 @@ import forge.game.spellability.TargetRestrictions;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.MyRandom; import forge.util.MyRandom;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class ProtectAi extends SpellAbilityAi { public class ProtectAi extends SpellAbilityAi {
private static boolean hasProtectionFrom(final Card card, final String color) { private static boolean hasProtectionFrom(final Card card, final String color) {
final ArrayList<String> onlyColors = new ArrayList<String>(MagicColor.Constant.ONLY_COLORS); final List<String> onlyColors = new ArrayList<String>(MagicColor.Constant.ONLY_COLORS);
// make sure we have a valid color // make sure we have a valid color
if (!onlyColors.contains(color)) { if (!onlyColors.contains(color)) {

View File

@@ -26,7 +26,7 @@ public class GameSimulator {
private Game simGame; private Game simGame;
private Player aiPlayer; private Player aiPlayer;
private GameStateEvaluator eval; private GameStateEvaluator eval;
private ArrayList<String> origLines; private List<String> origLines;
private Score origScore; private Score origScore;
public GameSimulator(final SimulationController controller, final Game origGame, final Player origAiPlayer) { public GameSimulator(final SimulationController controller, final Game origGame, final Player origAiPlayer) {
@@ -44,7 +44,7 @@ public class GameSimulator {
origScore = eval.getScoreForGameState(origGame, origAiPlayer); origScore = eval.getScoreForGameState(origGame, origAiPlayer);
eval.setDebugging(true); eval.setDebugging(true);
ArrayList<String> simLines = new ArrayList<String>(); List<String> simLines = new ArrayList<String>();
debugLines = simLines; debugLines = simLines;
Score simScore = eval.getScoreForGameState(simGame, aiPlayer); Score simScore = eval.getScoreForGameState(simGame, aiPlayer);
if (!simScore.equals(origScore)) { if (!simScore.equals(origScore)) {
@@ -102,7 +102,7 @@ public class GameSimulator {
} }
public static boolean debugPrint; public static boolean debugPrint;
public static ArrayList<String> debugLines; public static List<String> debugLines;
public static void debugPrint(String str) { public static void debugPrint(String str) {
if (debugPrint) { if (debugPrint) {
System.out.println(str); System.out.println(str);
@@ -172,7 +172,7 @@ public class GameSimulator {
// TODO: If this is during combat, before blockers are declared, // TODO: If this is during combat, before blockers are declared,
// we should simulate how combat will resolve and evaluate that // we should simulate how combat will resolve and evaluate that
// state instead! // state instead!
ArrayList<String> simLines = null; List<String> simLines = null;
if (debugPrint) { if (debugPrint) {
debugPrint("SimGame:"); debugPrint("SimGame:");
simLines = new ArrayList<String>(); simLines = new ArrayList<String>();
@@ -190,7 +190,7 @@ public class GameSimulator {
controller.push(sa); controller.push(sa);
SpellAbilityPicker sim = new SpellAbilityPicker(simGame, aiPlayer); SpellAbilityPicker sim = new SpellAbilityPicker(simGame, aiPlayer);
CardCollection cards = ComputerUtilAbility.getAvailableCards(simGame, aiPlayer); CardCollection cards = ComputerUtilAbility.getAvailableCards(simGame, aiPlayer);
ArrayList<SpellAbility> all = ComputerUtilAbility.getSpellAbilities(cards, aiPlayer); List<SpellAbility> all = ComputerUtilAbility.getSpellAbilities(cards, aiPlayer);
SpellAbility nextSa = sim.chooseSpellAbilityToPlay(controller, all, true); SpellAbility nextSa = sim.chooseSpellAbilityToPlay(controller, all, true);
if (nextSa != null) { if (nextSa != null) {
score = sim.getScoreForChosenAbility(); score = sim.getScoreForChosenAbility();

View File

@@ -32,7 +32,7 @@ public class SpellAbilityPicker {
} }
} }
public SpellAbility chooseSpellAbilityToPlay(SimulationController controller, final ArrayList<SpellAbility> all, boolean skipCounter) { public SpellAbility chooseSpellAbilityToPlay(SimulationController controller, final List<SpellAbility> all, boolean skipCounter) {
printOutput = false; printOutput = false;
if (controller == null) { if (controller == null) {
controller = new SimulationController(); controller = new SimulationController();
@@ -40,7 +40,7 @@ public class SpellAbilityPicker {
} }
print("---- choose ability (phase = " + game.getPhaseHandler().getPhase() + ")"); print("---- choose ability (phase = " + game.getPhaseHandler().getPhase() + ")");
ArrayList<SpellAbility> candidateSAs = new ArrayList<>(); List<SpellAbility> candidateSAs = new ArrayList<>();
for (final SpellAbility sa : ComputerUtilAbility.getOriginalAndAltCostAbilities(all, player)) { for (final SpellAbility sa : ComputerUtilAbility.getOriginalAndAltCostAbilities(all, player)) {
// Don't add Counterspells to the "normal" playcard lookups // Don't add Counterspells to the "normal" playcard lookups
if (skipCounter && sa.getApi() == ApiType.Counter) { if (skipCounter && sa.getApi() == ApiType.Counter) {

View File

@@ -223,7 +223,7 @@ public class BoosterGenerator {
} else if (operator.startsWith("fromSheet(") && invert) { } else if (operator.startsWith("fromSheet(") && invert) {
String sheetName = StringUtils.strip(operator.substring(9), "()\" "); String sheetName = StringUtils.strip(operator.substring(9), "()\" ");
Iterable<PaperCard> src = StaticData.instance().getPrintSheets().get(sheetName).toFlatList(); Iterable<PaperCard> src = StaticData.instance().getPrintSheets().get(sheetName).toFlatList();
ArrayList<String> cardNames = Lists.newArrayList(); List<String> cardNames = Lists.newArrayList();
for (PaperCard card : src) { for (PaperCard card : src) {
cardNames.add(card.getName()); cardNames.add(card.getName());
} }

View File

@@ -22,6 +22,7 @@ import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Set;
import org.apache.commons.lang3.Range; import org.apache.commons.lang3.Range;
import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.ImmutablePair;
@@ -50,7 +51,7 @@ public enum DeckFormat {
Limited ( Range.between(40, Integer.MAX_VALUE), null, Integer.MAX_VALUE), Limited ( Range.between(40, Integer.MAX_VALUE), null, Integer.MAX_VALUE),
Commander ( Range.is(99), Range.between(0, 10), 1), Commander ( Range.is(99), Range.between(0, 10), 1),
TinyLeaders ( Range.is(49), Range.between(0, 10), 1, new Predicate<CardRules>() { TinyLeaders ( Range.is(49), Range.between(0, 10), 1, new Predicate<CardRules>() {
private final HashSet<String> bannedCards = new HashSet<String>(Arrays.asList( private final Set<String> bannedCards = new HashSet<String>(Arrays.asList(
"Ancestral Recall", "Balance", "Black Lotus", "Black Vise", "Channel", "Chaos Orb", "Contract From Below", "Counterbalance", "Darkpact", "Demonic Attorney", "Demonic Tutor", "Earthcraft", "Edric, Spymaster of Trest", "Falling Star", "Ancestral Recall", "Balance", "Black Lotus", "Black Vise", "Channel", "Chaos Orb", "Contract From Below", "Counterbalance", "Darkpact", "Demonic Attorney", "Demonic Tutor", "Earthcraft", "Edric, Spymaster of Trest", "Falling Star",
"Fastbond", "Flash", "Goblin Recruiter", "Hermit Druid", "Imperial Seal", "Jeweled Bird", "Karakas", "Library of Alexandria", "Mana Crypt", "Mana Drain", "Mana Vault", "Metalworker", "Mind Twist", "Mishra's Workshop", "Mox Emerald", "Fastbond", "Flash", "Goblin Recruiter", "Hermit Druid", "Imperial Seal", "Jeweled Bird", "Karakas", "Library of Alexandria", "Mana Crypt", "Mana Drain", "Mana Vault", "Metalworker", "Mind Twist", "Mishra's Workshop", "Mox Emerald",
"Mox Jet", "Mox Pearl", "Mox Ruby", "Mox Sapphire", "Necropotence", "Painter's Servant", "Shahrazad", "Skullclamp", "Sol Ring", "Strip Mine", "Survival of the Fittest", "Sword of Body and Mind", "Time Vault", "Time Walk", "Timetwister", "Mox Jet", "Mox Pearl", "Mox Ruby", "Mox Sapphire", "Necropotence", "Painter's Servant", "Shahrazad", "Skullclamp", "Sol Ring", "Strip Mine", "Survival of the Fittest", "Sword of Body and Mind", "Time Vault", "Time Walk", "Timetwister",

View File

@@ -1,6 +1,7 @@
package forge.deck.generation; package forge.deck.generation;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
@@ -8,7 +9,7 @@ import com.google.common.collect.Iterables;
import forge.item.PaperCard; import forge.item.PaperCard;
public class DeckGenPool implements IDeckGenPool { public class DeckGenPool implements IDeckGenPool {
private final HashMap<String, PaperCard> cards = new HashMap<String, PaperCard>(); private final Map<String, PaperCard> cards = new HashMap<String, PaperCard>();
public DeckGenPool() { public DeckGenPool() {
} }

View File

@@ -1,41 +1,41 @@
package forge.util; package forge.util;
import java.util.List;
import java.util.Set;
import java.util.SortedSet;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import java.util.ArrayList; public final class CollectionSuppliers {
import java.util.HashSet;
import java.util.TreeSet;
/** /**
* TODO: Write javadoc for this type. * Private constructor to prevent instantiation.
* */
*/ private CollectionSuppliers() {
public abstract class CollectionSuppliers { }
public static <T> Supplier<List<T>> arrayLists() {
public static <T> Supplier<ArrayList<T>> arrayLists() { return new Supplier<List<T>>() {
return new Supplier<ArrayList<T>>() { @Override public List<T> get() {
@Override return Lists.newArrayList();
public ArrayList<T> get() {
return new ArrayList<T>();
} }
}; };
} }
public static <T> Supplier<HashSet<T>> hashSets() { public static <T> Supplier<Set<T>> hashSets() {
return new Supplier<HashSet<T>>() { return new Supplier<Set<T>>() {
@Override @Override public Set<T> get() {
public HashSet<T> get() { return Sets.newHashSet();
return new HashSet<T>();
} }
}; };
} }
public static <T extends Comparable<T>> Supplier<TreeSet<T>> treeSets() { public static <T extends Comparable<T>> Supplier<SortedSet<T>> treeSets() {
return new Supplier<TreeSet<T>>() { return new Supplier<SortedSet<T>>() {
@Override @Override public SortedSet<T> get() {
public TreeSet<T> get() { return Sets.newTreeSet();
return new TreeSet<T>();
} }
}; };
} }

View File

@@ -234,7 +234,7 @@ public final class FileUtil {
* @return list of strings * @return list of strings
*/ */
public static List<String> readAllLines(final Reader reader, final boolean mayTrim) { public static List<String> readAllLines(final Reader reader, final boolean mayTrim) {
final ArrayList<String> list = new ArrayList<String>(); final List<String> list = new ArrayList<String>();
try { try {
final BufferedReader in = new BufferedReader(reader); final BufferedReader in = new BufferedReader(reader);
String line; String line;

View File

@@ -1414,13 +1414,13 @@ public class GameAction {
// Power Play - Each player with a Power Play in the CommandZone becomes the Starting Player // Power Play - Each player with a Power Play in the CommandZone becomes the Starting Player
Set<Player> powerPlayers = new HashSet<>(); Set<Player> powerPlayers = new HashSet<>();
for (Card c : game.getCardsIn(ZoneType.Command)) { for (Card c : game.getCardsIn(ZoneType.Command)) {
if (c.getName().equals("Power Play")) { if (c.getName().equals("Power Play")) {
powerPlayers.add(c.getOwner()); powerPlayers.add(c.getOwner());
} }
} }
if (!powerPlayers.isEmpty()) { if (!powerPlayers.isEmpty()) {
ArrayList<Player> players = Lists.newArrayList(powerPlayers); List<Player> players = Lists.newArrayList(powerPlayers);
Collections.shuffle(players); Collections.shuffle(players);
return players.get(0); return players.get(0);
} }

View File

@@ -450,9 +450,9 @@ public final class GameActionUtil {
* @return an ArrayList<SpellAbility>. * @return an ArrayList<SpellAbility>.
* get abilities with all Splice options * get abilities with all Splice options
*/ */
private static final ArrayList<SpellAbility> getSpliceAbilities(SpellAbility sa) { private static final List<SpellAbility> getSpliceAbilities(SpellAbility sa) {
ArrayList<SpellAbility> newSAs = new ArrayList<SpellAbility>(); List<SpellAbility> newSAs = new ArrayList<SpellAbility>();
ArrayList<SpellAbility> allSaCombinations = new ArrayList<SpellAbility>(); List<SpellAbility> allSaCombinations = new ArrayList<SpellAbility>();
allSaCombinations.add(sa); allSaCombinations.add(sa);
Card source = sa.getHostCard(); Card source = sa.getHostCard();

View File

@@ -32,7 +32,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
private String name = ""; private String name = "";
private int preventNextDamage = 0; private int preventNextDamage = 0;
private CardCollection enchantedBy; private CardCollection enchantedBy;
private TreeMap<Card, Map<String, String>> preventionShieldsWithEffects = new TreeMap<Card, Map<String, String>>(); private Map<Card, Map<String, String>> preventionShieldsWithEffects = new TreeMap<Card, Map<String, String>>();
protected GameEntity(int id0) { protected GameEntity(int id0) {
id = id0; id = id0;
@@ -97,7 +97,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
} }
// PreventNextDamageWithEffect // PreventNextDamageWithEffect
public TreeMap<Card, Map<String, String>> getPreventNextDamageWithEffect() { public Map<Card, Map<String, String>> getPreventNextDamageWithEffect() {
return preventionShieldsWithEffects; return preventionShieldsWithEffects;
} }
public int getPreventNextDamageTotalShields() { public int getPreventNextDamageTotalShields() {
@@ -112,7 +112,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
* @param shieldSource - The source card which generated the shield * @param shieldSource - The source card which generated the shield
* @param effectMap - A map of the effect occurring with the damage prevention * @param effectMap - A map of the effect occurring with the damage prevention
*/ */
public void addPreventNextDamageWithEffect(final Card shieldSource, TreeMap<String, String> effectMap) { public void addPreventNextDamageWithEffect(final Card shieldSource, Map<String, String> effectMap) {
if (preventionShieldsWithEffects.containsKey(shieldSource)) { if (preventionShieldsWithEffects.containsKey(shieldSource)) {
int currentShields = Integer.valueOf(preventionShieldsWithEffects.get(shieldSource).get("ShieldAmount")); int currentShields = Integer.valueOf(preventionShieldsWithEffects.get(shieldSource).get("ShieldAmount"));
currentShields += Integer.valueOf(effectMap.get("ShieldAmount")); currentShields += Integer.valueOf(effectMap.get("ShieldAmount"));

View File

@@ -1,22 +1,36 @@
package forge.game; package forge.game;
import java.util.Collection;
import java.util.List;
import java.util.Map.Entry;
import com.google.common.eventbus.Subscribe; import com.google.common.eventbus.Subscribe;
import forge.LobbyPlayer; import forge.LobbyPlayer;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.event.*; import forge.game.event.GameEvent;
import forge.game.event.GameEventAttackersDeclared;
import forge.game.event.GameEventBlockersDeclared;
import forge.game.event.GameEventCardDamaged;
import forge.game.event.GameEventCardDamaged.DamageType; import forge.game.event.GameEventCardDamaged.DamageType;
import forge.game.event.GameEventGameOutcome;
import forge.game.event.GameEventLandPlayed;
import forge.game.event.GameEventMulligan;
import forge.game.event.GameEventPlayerControl;
import forge.game.event.GameEventPlayerDamaged;
import forge.game.event.GameEventPlayerPoisoned;
import forge.game.event.GameEventScry;
import forge.game.event.GameEventSpellAbilityCast;
import forge.game.event.GameEventSpellResolved;
import forge.game.event.GameEventTurnBegan;
import forge.game.event.GameEventTurnPhase;
import forge.game.event.IGameEventVisitor;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.TargetChoices; import forge.game.spellability.TargetChoices;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.Lang; import forge.util.Lang;
import forge.util.maps.MapOfLists; import forge.util.maps.MapOfLists;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map.Entry;
public class GameLogFormatter extends IGameEventVisitor.Base<GameLogEntry> { public class GameLogFormatter extends IGameEventVisitor.Base<GameLogEntry> {
private final GameLog log; private final GameLog log;
@@ -68,7 +82,7 @@ public class GameLogFormatter extends IGameEventVisitor.Base<GameLogEntry> {
if (event.sa.getTargetRestrictions() != null) { if (event.sa.getTargetRestrictions() != null) {
sb.append(" targeting "); sb.append(" targeting ");
ArrayList<TargetChoices> targets = event.sa.getAllTargetChoices(); List<TargetChoices> targets = event.sa.getAllTargetChoices();
// Include the TargetChoices from the stack instance, since the real target choices // Include the TargetChoices from the stack instance, since the real target choices
// are on that object at this point (see SpellAbilityStackInstance constructor). // are on that object at this point (see SpellAbilityStackInstance constructor).
targets.add(event.si.getTargetChoices()); targets.add(event.si.getTargetChoices());

View File

@@ -14,37 +14,37 @@ public abstract class GameObjectMap {
public abstract GameObject map(GameObject o); public abstract GameObject map(GameObject o);
public Player map(Player p) { public Player map(final Player p) {
return (Player) map((GameObject) p); return (Player) map((GameObject) p);
} }
public Card map(Card c) { public Card map(final Card c) {
return (Card) map((GameObject) c); return (Card) map((GameObject) c);
} }
public GameEntity map(GameEntity e) { public GameEntity map(final GameEntity e) {
return (GameEntity) map((GameObject) e); return (GameEntity) map((GameObject) e);
} }
public CardCollectionView mapCollection(CardCollectionView cards) { public CardCollectionView mapCollection(final CardCollectionView cards) {
CardCollection collection = new CardCollection(); final CardCollection collection = new CardCollection();
for (Card c : cards) { for (final Card c : cards) {
collection.add(map(c)); collection.add(map(c));
} }
return collection; return collection;
} }
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public <T extends GameObject> List<T> mapList(List<T> objects) { public <T extends GameObject> List<T> mapList(final List<T> objects) {
ArrayList<T> result = new ArrayList<T>(); final List<T> result = new ArrayList<T>();
for (T o : objects) { for (final T o : objects) {
result.add((T) map(o)); result.add((T) map(o));
} }
return result; return result;
} }
public <K extends GameObject, V> void fillKeyedMap(Map<K, V> dest, Map<K, V> src) { public <K extends GameObject, V> void fillKeyedMap(final Map<K, V> dest, final Map<K, V> src) {
for (Map.Entry<K, V> entry : src.entrySet()) { for (final Map.Entry<K, V> entry : src.entrySet()) {
dest.put(entry.getKey(), entry.getValue()); dest.put(entry.getKey(), entry.getValue());
} }
} }

View File

@@ -181,7 +181,7 @@ public class StaticEffect {
* @param c * @param c
* a {@link forge.game.card.Card} object. * a {@link forge.game.card.Card} object.
* @param s * @param s
* a {@link java.util.ArrayList} object. * a {@link java.util.List} object.
*/ */
public final void addOriginalAbilities(final Card c, final List<SpellAbility> s) { public final void addOriginalAbilities(final Card c, final List<SpellAbility> s) {
final List<SpellAbility> list = new ArrayList<SpellAbility>(s); final List<SpellAbility> list = new ArrayList<SpellAbility>(s);
@@ -200,10 +200,10 @@ public class StaticEffect {
* *
* @param c * @param c
* a {@link forge.game.card.Card} object. * a {@link forge.game.card.Card} object.
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.List} object.
*/ */
public final ArrayList<SpellAbility> getOriginalAbilities(final Card c) { public final List<SpellAbility> getOriginalAbilities(final Card c) {
final ArrayList<SpellAbility> returnList = new ArrayList<SpellAbility>(); final List<SpellAbility> returnList = new ArrayList<SpellAbility>();
if (this.originalAbilities.containsKey(c)) { if (this.originalAbilities.containsKey(c)) {
returnList.addAll(this.originalAbilities.get(c)); returnList.addAll(this.originalAbilities.get(c));
} }
@@ -566,7 +566,7 @@ public class StaticEffect {
*/ */
public final void addType(final Card c, final String s) { public final void addType(final Card c, final String s) {
if (!this.types.containsKey(c)) { if (!this.types.containsKey(c)) {
final ArrayList<String> list = new ArrayList<String>(); final List<String> list = new ArrayList<String>();
list.add(s); list.add(s);
this.types.put(c, list); this.types.put(c, list);
} else { } else {
@@ -581,10 +581,10 @@ public class StaticEffect {
* *
* @param c * @param c
* a {@link forge.game.card.Card} object. * a {@link forge.game.card.Card} object.
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.List} object.
*/ */
public final ArrayList<String> getTypes(final Card c) { public final List<String> getTypes(final Card c) {
final ArrayList<String> returnList = new ArrayList<String>(); final List<String> returnList = new ArrayList<String>();
if (this.types.containsKey(c)) { if (this.types.containsKey(c)) {
returnList.addAll(this.types.get(c)); returnList.addAll(this.types.get(c));
} }
@@ -749,7 +749,7 @@ public class StaticEffect {
* @param list * @param list
* the new affected players * the new affected players
*/ */
public final void setAffectedPlayers(final ArrayList<Player> list) { public final void setAffectedPlayers(final List<Player> list) {
this.affectedPlayers = list; this.affectedPlayers = list;
} }

View File

@@ -69,17 +69,17 @@ public class AnimateAllEffect extends AnimateEffectBase {
types.add(host.getChosenType()); types.add(host.getChosenType());
} }
final ArrayList<String> keywords = new ArrayList<String>(); final List<String> keywords = new ArrayList<String>();
if (sa.hasParam("Keywords")) { if (sa.hasParam("Keywords")) {
keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & ")));
} }
final ArrayList<String> removeKeywords = new ArrayList<String>(); final List<String> removeKeywords = new ArrayList<String>();
if (sa.hasParam("RemoveKeywords")) { if (sa.hasParam("RemoveKeywords")) {
removeKeywords.addAll(Arrays.asList(sa.getParam("RemoveKeywords").split(" & "))); removeKeywords.addAll(Arrays.asList(sa.getParam("RemoveKeywords").split(" & ")));
} }
final ArrayList<String> hiddenKeywords = new ArrayList<String>(); final List<String> hiddenKeywords = new ArrayList<String>();
if (sa.hasParam("HiddenKeywords")) { if (sa.hasParam("HiddenKeywords")) {
hiddenKeywords.addAll(Arrays.asList(sa.getParam("HiddenKeywords").split(" & "))); hiddenKeywords.addAll(Arrays.asList(sa.getParam("HiddenKeywords").split(" & ")));
} }
@@ -105,23 +105,23 @@ public class AnimateAllEffect extends AnimateEffectBase {
final String finalDesc = tmpDesc; final String finalDesc = tmpDesc;
// abilities to add to the animated being // abilities to add to the animated being
final ArrayList<String> abilities = new ArrayList<String>(); final List<String> abilities = new ArrayList<String>();
if (sa.hasParam("Abilities")) { if (sa.hasParam("Abilities")) {
abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(","))); abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(",")));
} }
// replacement effects to add to the animated being // replacement effects to add to the animated being
final ArrayList<String> replacements = new ArrayList<String>(); final List<String> replacements = new ArrayList<String>();
if (sa.hasParam("Replacements")) { if (sa.hasParam("Replacements")) {
replacements.addAll(Arrays.asList(sa.getParam("Replacements").split(","))); replacements.addAll(Arrays.asList(sa.getParam("Replacements").split(",")));
} }
// triggers to add to the animated being // triggers to add to the animated being
final ArrayList<String> triggers = new ArrayList<String>(); final List<String> triggers = new ArrayList<String>();
if (sa.hasParam("Triggers")) { if (sa.hasParam("Triggers")) {
triggers.addAll(Arrays.asList(sa.getParam("Triggers").split(","))); triggers.addAll(Arrays.asList(sa.getParam("Triggers").split(",")));
} }
// sVars to add to the animated being // sVars to add to the animated being
final ArrayList<String> sVars = new ArrayList<String>(); final List<String> sVars = new ArrayList<String>();
if (sa.hasParam("sVars")) { if (sa.hasParam("sVars")) {
sVars.addAll(Arrays.asList(sa.getParam("sVars").split(","))); sVars.addAll(Arrays.asList(sa.getParam("sVars").split(",")));
} }
@@ -149,7 +149,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
keywords, removeKeywords, hiddenKeywords, timestamp); keywords, removeKeywords, hiddenKeywords, timestamp);
// give abilities // give abilities
final ArrayList<SpellAbility> addedAbilities = new ArrayList<SpellAbility>(); final List<SpellAbility> addedAbilities = new ArrayList<SpellAbility>();
if (abilities.size() > 0) { if (abilities.size() > 0) {
for (final String s : abilities) { for (final String s : abilities) {
final String actualAbility = host.getSVar(s); final String actualAbility = host.getSVar(s);
@@ -160,7 +160,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
} }
// remove abilities // remove abilities
final ArrayList<SpellAbility> removedAbilities = new ArrayList<SpellAbility>(); final List<SpellAbility> removedAbilities = new ArrayList<SpellAbility>();
if (sa.hasParam("OverwriteAbilities") || sa.hasParam("RemoveAllAbilities")) { if (sa.hasParam("OverwriteAbilities") || sa.hasParam("RemoveAllAbilities")) {
for (final SpellAbility ab : c.getSpellAbilities()) { for (final SpellAbility ab : c.getSpellAbilities()) {
if (ab.isAbility()) { if (ab.isAbility()) {
@@ -170,7 +170,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
} }
} }
// give replacement effects // give replacement effects
final ArrayList<ReplacementEffect> addedReplacements = new ArrayList<ReplacementEffect>(); final List<ReplacementEffect> addedReplacements = new ArrayList<ReplacementEffect>();
if (replacements.size() > 0) { if (replacements.size() > 0) {
for (final String s : replacements) { for (final String s : replacements) {
final String actualReplacement = host.getSVar(s); final String actualReplacement = host.getSVar(s);
@@ -179,7 +179,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
} }
} }
// Grant triggers // Grant triggers
final ArrayList<Trigger> addedTriggers = new ArrayList<Trigger>(); final List<Trigger> addedTriggers = new ArrayList<Trigger>();
if (triggers.size() > 0) { if (triggers.size() > 0) {
for (final String s : triggers) { for (final String s : triggers) {
final String actualTrigger = host.getSVar(s); final String actualTrigger = host.getSVar(s);
@@ -189,7 +189,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
} }
// suppress triggers from the animated card // suppress triggers from the animated card
final ArrayList<Trigger> removedTriggers = new ArrayList<Trigger>(); final List<Trigger> removedTriggers = new ArrayList<Trigger>();
if (sa.hasParam("OverwriteTriggers") || sa.hasParam("RemoveAllAbilities")) { if (sa.hasParam("OverwriteTriggers") || sa.hasParam("RemoveAllAbilities")) {
final FCollectionView<Trigger> triggersToRemove = c.getTriggers(); final FCollectionView<Trigger> triggersToRemove = c.getTriggers();
for (final Trigger trigger : triggersToRemove) { for (final Trigger trigger : triggersToRemove) {
@@ -199,7 +199,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
} }
// suppress static abilities from the animated card // suppress static abilities from the animated card
final ArrayList<StaticAbility> removedStatics = new ArrayList<StaticAbility>(); final List<StaticAbility> removedStatics = new ArrayList<StaticAbility>();
if (sa.hasParam("OverwriteStatics") || sa.hasParam("RemoveAllAbilities")) { if (sa.hasParam("OverwriteStatics") || sa.hasParam("RemoveAllAbilities")) {
final FCollectionView<StaticAbility> staticsToRemove = c.getStaticAbilities(); final FCollectionView<StaticAbility> staticsToRemove = c.getStaticAbilities();
for (final StaticAbility stAb : staticsToRemove) { for (final StaticAbility stAb : staticsToRemove) {

View File

@@ -202,7 +202,7 @@ public class CloneEffect extends SpellAbilityEffect {
} }
// triggers to add to clone // triggers to add to clone
final ArrayList<String> triggers = new ArrayList<String>(); final List<String> triggers = new ArrayList<String>();
if (sa.hasParam("AddTriggers")) { if (sa.hasParam("AddTriggers")) {
triggers.addAll(Arrays.asList(sa.getParam("AddTriggers").split(","))); triggers.addAll(Arrays.asList(sa.getParam("AddTriggers").split(",")));
for (final String s : triggers) { for (final String s : triggers) {
@@ -237,7 +237,7 @@ public class CloneEffect extends SpellAbilityEffect {
} }
// keywords to add to clone // keywords to add to clone
final ArrayList<String> keywords = new ArrayList<String>(); final List<String> keywords = new ArrayList<String>();
if (sa.hasParam("AddKeywords")) { if (sa.hasParam("AddKeywords")) {
keywords.addAll(Arrays.asList(sa.getParam("AddKeywords").split(" & "))); keywords.addAll(Arrays.asList(sa.getParam("AddKeywords").split(" & ")));
// allow SVar substitution for keywords // allow SVar substitution for keywords

View File

@@ -56,7 +56,7 @@ public class CopyPermanentEffect extends SpellAbilityEffect {
public void resolve(final SpellAbility sa) { public void resolve(final SpellAbility sa) {
final Card hostCard = sa.getHostCard(); final Card hostCard = sa.getHostCard();
final Game game = hostCard.getGame(); final Game game = hostCard.getGame();
final ArrayList<String> keywords = new ArrayList<String>(); final List<String> keywords = new ArrayList<String>();
final List<String> types = new ArrayList<String>(); final List<String> types = new ArrayList<String>();
final List<String> svars = new ArrayList<String>(); final List<String> svars = new ArrayList<String>();
final List<String> triggers = new ArrayList<String>(); final List<String> triggers = new ArrayList<String>();

View File

@@ -101,7 +101,7 @@ public class CountersMoveEffect extends SpellAbilityEffect {
while (cntToMove > 0 && source.hasCounters()) { while (cntToMove > 0 && source.hasCounters()) {
final Map<CounterType, Integer> tgtCounters = source.getCounters(); final Map<CounterType, Integer> tgtCounters = source.getCounters();
final ArrayList<CounterType> typeChoices = new ArrayList<CounterType>(); final List<CounterType> typeChoices = new ArrayList<CounterType>();
// get types of counters // get types of counters
for (CounterType ct : tgtCounters.keySet()) { for (CounterType ct : tgtCounters.keySet()) {
if (ct != CounterType.M1M1 || canPlaceM1M1Counters) { if (ct != CounterType.M1M1 || canPlaceM1M1Counters) {

View File

@@ -1,5 +1,10 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import forge.game.GameObject; import forge.game.GameObject;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.ability.SpellAbilityEffect; import forge.game.ability.SpellAbilityEffect;
@@ -8,10 +13,6 @@ import forge.game.card.CardUtil;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
public class DamagePreventEffect extends SpellAbilityEffect { public class DamagePreventEffect extends SpellAbilityEffect {
@Override @Override
@@ -68,7 +69,7 @@ public class DamagePreventEffect extends SpellAbilityEffect {
int numDam = AbilityUtils.calculateAmount(host, sa.getParam("Amount"), sa); int numDam = AbilityUtils.calculateAmount(host, sa.getParam("Amount"), sa);
final List<GameObject> tgts = getTargets(sa); final List<GameObject> tgts = getTargets(sa);
final ArrayList<Card> untargetedCards = new ArrayList<Card>(); final List<Card> untargetedCards = new ArrayList<Card>();
if (sa.hasParam("Radiance") && (sa.usesTargeting())) { if (sa.hasParam("Radiance") && (sa.usesTargeting())) {
Card origin = null; Card origin = null;
@@ -95,7 +96,7 @@ public class DamagePreventEffect extends SpellAbilityEffect {
final Card c = (Card) o; final Card c = (Card) o;
if (c.isInPlay() && (!targeted || c.canBeTargetedBy(sa))) { if (c.isInPlay() && (!targeted || c.canBeTargetedBy(sa))) {
if (preventionWithEffect) { if (preventionWithEffect) {
TreeMap<String, String> effectMap = new TreeMap<String, String>(); Map<String, String> effectMap = new TreeMap<String, String>();
effectMap.put("EffectString", sa.getSVar(sa.getParam("PreventionSubAbility"))); effectMap.put("EffectString", sa.getSVar(sa.getParam("PreventionSubAbility")));
effectMap.put("ShieldAmount", String.valueOf(numDam)); effectMap.put("ShieldAmount", String.valueOf(numDam));
if (sa.hasParam("ShieldEffectTarget")) { if (sa.hasParam("ShieldEffectTarget")) {
@@ -122,7 +123,7 @@ public class DamagePreventEffect extends SpellAbilityEffect {
final Player p = (Player) o; final Player p = (Player) o;
if (!targeted || p.canBeTargetedBy(sa)) { if (!targeted || p.canBeTargetedBy(sa)) {
if (preventionWithEffect) { if (preventionWithEffect) {
TreeMap<String, String> effectMap = new TreeMap<String, String>(); Map<String, String> effectMap = new TreeMap<String, String>();
effectMap.put("EffectString", sa.getSVar(sa.getParam("PreventionSubAbility"))); effectMap.put("EffectString", sa.getSVar(sa.getParam("PreventionSubAbility")));
effectMap.put("ShieldAmount", String.valueOf(numDam)); effectMap.put("ShieldAmount", String.valueOf(numDam));
if (sa.hasParam("ShieldEffectTarget")) { if (sa.hasParam("ShieldEffectTarget")) {

View File

@@ -63,7 +63,7 @@ public class DebuffEffect extends SpellAbilityEffect {
final long timestamp = game.getNextTimestamp(); final long timestamp = game.getNextTimestamp();
for (final Card tgtC : getTargetCards(sa)) { for (final Card tgtC : getTargetCards(sa)) {
final ArrayList<String> hadIntrinsic = new ArrayList<String>(); final List<String> hadIntrinsic = new ArrayList<String>();
if (tgtC.isInPlay() && tgtC.canBeTargetedBy(sa)) { if (tgtC.isInPlay() && tgtC.canBeTargetedBy(sa)) {
if (sa.hasParam("AllSuffixKeywords")) { if (sa.hasParam("AllSuffixKeywords")) {
String suffix = sa.getParam("AllSuffixKeywords"); String suffix = sa.getParam("AllSuffixKeywords");

View File

@@ -73,7 +73,7 @@ public class DestroyEffect extends SpellAbilityEffect {
final boolean sac = sa.hasParam("Sacrifice"); final boolean sac = sa.hasParam("Sacrifice");
final List<Card> tgtCards = getTargetCards(sa); final List<Card> tgtCards = getTargetCards(sa);
final ArrayList<Card> untargetedCards = new ArrayList<Card>(); final List<Card> untargetedCards = new ArrayList<Card>();
final TargetRestrictions tgt = sa.getTargetRestrictions(); final TargetRestrictions tgt = sa.getTargetRestrictions();

View File

@@ -75,7 +75,7 @@ public class DigEffect extends SpellAbilityEffect {
boolean changeAll = false; boolean changeAll = false;
boolean allButOne = false; boolean allButOne = false;
final ArrayList<String> keywords = new ArrayList<String>(); final List<String> keywords = new ArrayList<String>();
if (sa.hasParam("Keywords")) { if (sa.hasParam("Keywords")) {
keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & "))); keywords.addAll(Arrays.asList(sa.getParam("Keywords").split(" & ")));
} }

View File

@@ -16,7 +16,6 @@ import java.util.Arrays;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
public class ProtectEffect extends SpellAbilityEffect { public class ProtectEffect extends SpellAbilityEffect {
/* (non-Javadoc) /* (non-Javadoc)
@@ -122,7 +121,7 @@ public class ProtectEffect extends SpellAbilityEffect {
} }
} }
final ArrayList<Card> untargetedCards = new ArrayList<Card>(); final List<Card> untargetedCards = new ArrayList<Card>();
final TargetRestrictions tgt = sa.getTargetRestrictions(); final TargetRestrictions tgt = sa.getTargetRestrictions();
if (sa.hasParam("Radiance") && (tgt != null)) { if (sa.hasParam("Radiance") && (tgt != null)) {
@@ -205,7 +204,7 @@ public class ProtectEffect extends SpellAbilityEffect {
public static List<String> getProtectionList(final SpellAbility sa) { public static List<String> getProtectionList(final SpellAbility sa) {
final ArrayList<String> gains = new ArrayList<String>(); final List<String> gains = new ArrayList<String>();
final String gainStr = sa.getParam("Gains"); final String gainStr = sa.getParam("Gains");
if (gainStr.equals("Choice")) { if (gainStr.equals("Choice")) {

View File

@@ -19,12 +19,12 @@ import java.util.List;
public class PumpAllEffect extends SpellAbilityEffect { public class PumpAllEffect extends SpellAbilityEffect {
private static void applyPumpAll(final SpellAbility sa, private static void applyPumpAll(final SpellAbility sa,
final List<Card> list, final int a, final int d, final List<Card> list, final int a, final int d,
final List<String> keywords, final ArrayList<ZoneType> affectedZones) { final List<String> keywords, final List<ZoneType> affectedZones) {
final Game game = sa.getActivatingPlayer().getGame(); final Game game = sa.getActivatingPlayer().getGame();
final long timestamp = game.getNextTimestamp(); final long timestamp = game.getNextTimestamp();
final ArrayList<String> kws = new ArrayList<String>(); final List<String> kws = new ArrayList<String>();
final ArrayList<String> hiddenkws = new ArrayList<String>(); final List<String> hiddenkws = new ArrayList<String>();
boolean suspend = false; boolean suspend = false;
for (String kw : keywords) { for (String kw : keywords) {
@@ -124,7 +124,7 @@ public class PumpAllEffect extends SpellAbilityEffect {
@Override @Override
public void resolve(final SpellAbility sa) { public void resolve(final SpellAbility sa) {
final List<Player> tgtPlayers = getTargetPlayers(sa); final List<Player> tgtPlayers = getTargetPlayers(sa);
final ArrayList<ZoneType> affectedZones = new ArrayList<ZoneType>(); final List<ZoneType> affectedZones = new ArrayList<ZoneType>();
final Game game = sa.getActivatingPlayer().getGame(); final Game game = sa.getActivatingPlayer().getGame();
if (sa.hasParam("PumpZone")) { if (sa.hasParam("PumpZone")) {

View File

@@ -34,7 +34,7 @@ public class PumpEffect extends SpellAbilityEffect {
return; return;
} }
final Game game = sa.getActivatingPlayer().getGame(); final Game game = sa.getActivatingPlayer().getGame();
final ArrayList<String> kws = new ArrayList<String>(); final List<String> kws = new ArrayList<String>();
for (String kw : keywords) { for (String kw : keywords) {
if (kw.startsWith("HIDDEN")) { if (kw.startsWith("HIDDEN")) {

View File

@@ -1,7 +1,15 @@
package forge.game.ability.effects; package forge.game.ability.effects;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.game.Game; import forge.game.Game;
@@ -16,12 +24,6 @@ import forge.game.spellability.SpellAbility;
import forge.game.trigger.TriggerType; import forge.game.trigger.TriggerType;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
public class VoteEffect extends SpellAbilityEffect { public class VoteEffect extends SpellAbilityEffect {
/* (non-Javadoc) /* (non-Javadoc)
@@ -66,7 +68,7 @@ public class VoteEffect extends SpellAbilityEffect {
while (tgtPlayers.contains(activator) && !activator.equals(Iterables.getFirst(tgtPlayers, null))) { while (tgtPlayers.contains(activator) && !activator.equals(Iterables.getFirst(tgtPlayers, null))) {
tgtPlayers.add(pSize - 1, tgtPlayers.remove(0)); tgtPlayers.add(pSize - 1, tgtPlayers.remove(0));
} }
ArrayListMultimap<Object, Player> votes = ArrayListMultimap.create(); ListMultimap<Object, Player> votes = ArrayListMultimap.create();
for (final Player p : tgtPlayers) { for (final Player p : tgtPlayers) {
int voteAmount = p.getKeywords().getAmount("You get an additional vote.") + 1; int voteAmount = p.getKeywords().getAmount("You get an additional vote.") + 1;
@@ -107,7 +109,7 @@ public class VoteEffect extends SpellAbilityEffect {
} }
} }
private static List<Object> getMostVotes(final ArrayListMultimap<Object, Player> votes) { private static List<Object> getMostVotes(final ListMultimap<Object, Player> votes) {
final List<Object> most = Lists.newArrayList(); final List<Object> most = Lists.newArrayList();
int amount = 0; int amount = 0;
for (final Object voteType : votes.keySet()) { for (final Object voteType : votes.keySet()) {

View File

@@ -642,7 +642,7 @@ public class CardFactory {
} }
private static String[] getCardTypes(Card c) { private static String[] getCardTypes(Card c) {
ArrayList<String> relevantTypes = new ArrayList<String>(); List<String> relevantTypes = new ArrayList<String>();
for (CoreType t : c.getType().getCoreTypes()) { for (CoreType t : c.getType().getCoreTypes()) {
relevantTypes.add(t.name()); relevantTypes.add(t.name());
} }

View File

@@ -2007,8 +2007,8 @@ public class CardFactoryUtil {
return types.size(); return types.size();
} }
public static ArrayList<SpellAbility> getBushidoEffects(final Card c) { public static List<SpellAbility> getBushidoEffects(final Card c) {
final ArrayList<SpellAbility> list = new ArrayList<SpellAbility>(); final List<SpellAbility> list = new ArrayList<SpellAbility>();
for (final String kw : c.getKeywords()) { for (final String kw : c.getKeywords()) {
if (kw.contains("Bushido")) { if (kw.contains("Bushido")) {
final String[] parse = kw.split(" "); final String[] parse = kw.split(" ");

View File

@@ -153,7 +153,7 @@ public class CardState {
public final boolean hasIntrinsicKeyword(String k) { public final boolean hasIntrinsicKeyword(String k) {
return intrinsicKeywords.contains(k); return intrinsicKeywords.contains(k);
} }
public final void setIntrinsicKeywords(final ArrayList<String> intrinsicKeyword0) { public final void setIntrinsicKeywords(final List<String> intrinsicKeyword0) {
intrinsicKeywords = intrinsicKeyword0; intrinsicKeywords = intrinsicKeyword0;
} }
@@ -296,7 +296,7 @@ public class CardState {
public final Iterable<String> getStaticAbilityStrings() { public final Iterable<String> getStaticAbilityStrings() {
return staticAbilityStrings; return staticAbilityStrings;
} }
public final void setStaticAbilityStrings(final ArrayList<String> staticAbilityStrings0) { public final void setStaticAbilityStrings(final List<String> staticAbilityStrings0) {
staticAbilityStrings = staticAbilityStrings0; staticAbilityStrings = staticAbilityStrings0;
} }
public boolean addStaticAbilityString(String s) { public boolean addStaticAbilityString(String s) {

View File

@@ -17,15 +17,17 @@
*/ */
package forge.game.cost; package forge.game.cost;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.game.card.Card; import forge.game.card.Card;
import forge.game.mana.Mana; import forge.game.mana.Mana;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
/** /**
* The Class CostAddMana. * The Class CostAddMana.
@@ -73,7 +75,7 @@ public class CostAddMana extends CostPart {
if (ai.getGame().getRules().hasCommander()) { if (ai.getGame().getRules().hasCommander()) {
cid = ai.getCommander().getRules().getColorIdentity(); cid = ai.getCommander().getRules().getColorIdentity();
} }
ArrayList<Mana> manaProduced = new ArrayList<Mana>(); List<Mana> manaProduced = new ArrayList<Mana>();
final String type = this.getType(); final String type = this.getType();
for (int n = 0; n < decision.c; n++) { for (int n = 0; n < decision.c; n++) {
if (StringUtils.isNumeric(type)) { if (StringUtils.isNumeric(type)) {

View File

@@ -37,7 +37,7 @@ import java.util.Map;
public class CostPayment { public class CostPayment {
private final Cost cost; private final Cost cost;
private final SpellAbility ability; private final SpellAbility ability;
private final ArrayList<CostPart> paidCostParts = new ArrayList<CostPart>(); private final List<CostPart> paidCostParts = new ArrayList<CostPart>();
/** /**
* <p> * <p>

View File

@@ -52,9 +52,9 @@ public class ManaCostAdjustment {
if (!cardsOnBattlefield.contains(originalCard)) { if (!cardsOnBattlefield.contains(originalCard)) {
cardsOnBattlefield.add(originalCard); cardsOnBattlefield.add(originalCard);
} }
final ArrayList<StaticAbility> raiseAbilities = new ArrayList<StaticAbility>(); final List<StaticAbility> raiseAbilities = new ArrayList<StaticAbility>();
final ArrayList<StaticAbility> reduceAbilities = new ArrayList<StaticAbility>(); final List<StaticAbility> reduceAbilities = new ArrayList<StaticAbility>();
final ArrayList<StaticAbility> setAbilities = new ArrayList<StaticAbility>(); final List<StaticAbility> setAbilities = new ArrayList<StaticAbility>();
// Sort abilities to apply them in proper order // Sort abilities to apply them in proper order
for (Card c : cardsOnBattlefield) { for (Card c : cardsOnBattlefield) {

View File

@@ -494,7 +494,7 @@ public class ManaCostBeingPaid {
} }
// Sort the keys to get a deterministic ordering. // Sort the keys to get a deterministic ordering.
ArrayList<ManaCostShard> shards = new ArrayList<ManaCostShard>(unpaidShards.keySet()); List<ManaCostShard> shards = new ArrayList<ManaCostShard>(unpaidShards.keySet());
Collections.sort(shards); Collections.sort(shards);
for (ManaCostShard shard : shards) { for (ManaCostShard shard : shards) {
if (shard == ManaCostShard.COLORLESS) { if (shard == ManaCostShard.COLORLESS) {

View File

@@ -280,14 +280,14 @@ public class ManaPool implements Iterable<Mana> {
//Account for mana part of ability when undoing it //Account for mana part of ability when undoing it
public boolean accountFor(final AbilityManaPart ma) { public boolean accountFor(final AbilityManaPart ma) {
if (ma == null) { if (ma == null) {
return false; return false;
} }
if (floatingMana.isEmpty()) { if (floatingMana.isEmpty()) {
return false; return false;
} }
final ArrayList<Mana> removeFloating = new ArrayList<Mana>(); final List<Mana> removeFloating = new ArrayList<Mana>();
boolean manaNotAccountedFor = false; boolean manaNotAccountedFor = false;
// loop over mana produced by mana ability // loop over mana produced by mana ability

View File

@@ -45,8 +45,8 @@ public class Phase implements java.io.Serializable {
this.type = type; this.type = type;
} }
protected final ArrayList<GameCommand> at = new ArrayList<GameCommand>(); protected final List<GameCommand> at = new ArrayList<GameCommand>();
private final ArrayList<GameCommand> until = new ArrayList<GameCommand>(); private final List<GameCommand> until = new ArrayList<GameCommand>();
private final HashMap<Player, ArrayList<GameCommand>> untilMap = new HashMap<Player, ArrayList<GameCommand>>(); private final HashMap<Player, ArrayList<GameCommand>> untilMap = new HashMap<Player, ArrayList<GameCommand>>();
private final HashMap<Player, ArrayList<GameCommand>> untilEndMap = new HashMap<Player, ArrayList<GameCommand>>(); private final HashMap<Player, ArrayList<GameCommand>> untilEndMap = new HashMap<Player, ArrayList<GameCommand>>();
private final HashMap<Player, ArrayList<GameCommand>> registerMap = new HashMap<Player, ArrayList<GameCommand>>(); private final HashMap<Player, ArrayList<GameCommand>> registerMap = new HashMap<Player, ArrayList<GameCommand>>();

View File

@@ -1,6 +1,7 @@
package forge.game.player; package forge.game.player;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.game.card.Card; import forge.game.card.Card;
@@ -8,8 +9,8 @@ import forge.game.spellability.SpellAbility;
//class for storing information during a game that is used at the end of the game to determine achievements //class for storing information during a game that is used at the end of the game to determine achievements
public class AchievementTracker { public class AchievementTracker {
public final HashSet<String> activatedUltimates = new HashSet<String>(); public final Set<String> activatedUltimates = new HashSet<String>();
public final HashSet<String> challengesCompleted = new HashSet<String>(); public final Set<String> challengesCompleted = new HashSet<String>();
public int mulliganTo = 7; public int mulliganTo = 7;
public int spellsCast = 0; public int spellsCast = 0;
public int maxStormCount = 0; public int maxStormCount = 0;

View File

@@ -121,7 +121,7 @@ public class Player extends GameEntity implements Comparable<Player> {
private final Map<ZoneType, PlayerZone> zones = new EnumMap<ZoneType, PlayerZone>(ZoneType.class); private final Map<ZoneType, PlayerZone> zones = new EnumMap<ZoneType, PlayerZone>(ZoneType.class);
private CardCollection currentPlanes = new CardCollection(); private CardCollection currentPlanes = new CardCollection();
private ArrayList<String> prowl = new ArrayList<String>(); private List<String> prowl = new ArrayList<String>();
private PlayerStatistics stats = new PlayerStatistics(); private PlayerStatistics stats = new PlayerStatistics();
private PlayerController controller; private PlayerController controller;
@@ -692,7 +692,7 @@ public class Player extends GameEntity implements Comparable<Player> {
boolean DEBUGShieldsWithEffects = false; boolean DEBUGShieldsWithEffects = false;
while (!getPreventNextDamageWithEffect().isEmpty() && restDamage != 0) { while (!getPreventNextDamageWithEffect().isEmpty() && restDamage != 0) {
TreeMap<Card, Map<String, String>> shieldMap = getPreventNextDamageWithEffect(); Map<Card, Map<String, String>> shieldMap = getPreventNextDamageWithEffect();
CardCollection preventionEffectSources = new CardCollection(shieldMap.keySet()); CardCollection preventionEffectSources = new CardCollection(shieldMap.keySet());
Card shieldSource = preventionEffectSources.get(0); Card shieldSource = preventionEffectSources.get(0);
if (preventionEffectSources.size() > 1) { if (preventionEffectSources.size() > 1) {

View File

@@ -1,7 +1,6 @@
package forge.game.player; package forge.game.player;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -9,7 +8,7 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import forge.LobbyPlayer; import forge.LobbyPlayer;
@@ -164,7 +163,7 @@ public abstract class PlayerController {
return chooseSomeType(kindOfType, sa, validTypes, invalidTypes, false); return chooseSomeType(kindOfType, sa, validTypes, invalidTypes, false);
} }
public abstract Object vote(SpellAbility sa, String prompt, List<Object> options, ArrayListMultimap<Object, Player> votes); public abstract Object vote(SpellAbility sa, String prompt, List<Object> options, ListMultimap<Object, Player> votes);
public abstract Pair<CounterType,String> chooseAndRemoveOrPutCounter(Card cardWithCounter); public abstract Pair<CounterType,String> chooseAndRemoveOrPutCounter(Card cardWithCounter);
public abstract boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, String question); public abstract boolean confirmReplacementEffect(ReplacementEffect replacementEffect, SpellAbility effectSA, String question);
public abstract CardCollectionView getCardsToMulligan(boolean isCommander, Player firstPlayer); public abstract CardCollectionView getCardsToMulligan(boolean isCommander, Player firstPlayer);
@@ -195,7 +194,7 @@ public abstract class PlayerController {
public abstract CounterType chooseCounterType(List<CounterType> options, SpellAbility sa, String prompt); public abstract CounterType chooseCounterType(List<CounterType> options, SpellAbility sa, String prompt);
public abstract boolean confirmPayment(CostPart costPart, String string); public abstract boolean confirmPayment(CostPart costPart, String string);
public abstract ReplacementEffect chooseSingleReplacementEffect(String prompt, List<ReplacementEffect> possibleReplacers, HashMap<String, Object> runParams); public abstract ReplacementEffect chooseSingleReplacementEffect(String prompt, List<ReplacementEffect> possibleReplacers, Map<String, Object> runParams);
public abstract String chooseProtectionType(String string, SpellAbility sa, List<String> choices); public abstract String chooseProtectionType(String string, SpellAbility sa, List<String> choices);
public abstract CardShields chooseRegenerationShield(Card c); public abstract CardShields chooseRegenerationShield(Card c);

View File

@@ -17,6 +17,15 @@
*/ */
package forge.game.spellability; package forge.game.spellability;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.game.card.Card; import forge.game.card.Card;
@@ -29,14 +38,6 @@ import forge.game.replacement.ReplacementLayer;
import forge.game.replacement.ReplacementResult; import forge.game.replacement.ReplacementResult;
import forge.game.trigger.TriggerType; import forge.game.trigger.TriggerType;
import org.apache.commons.lang3.StringUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/** /**
* <p> * <p>
* Abstract AbilityMana class. * Abstract AbilityMana class.
@@ -60,7 +61,7 @@ public class AbilityManaPart implements java.io.Serializable {
private final boolean persistentMana; private final boolean persistentMana;
private String manaReplaceType; private String manaReplaceType;
private transient ArrayList<Mana> lastManaProduced = new ArrayList<Mana>(); private transient List<Mana> lastManaProduced = new ArrayList<Mana>();
private final transient Card sourceCard; private final transient Card sourceCard;
@@ -405,7 +406,7 @@ public class AbilityManaPart implements java.io.Serializable {
* *
* @return a {@link java.lang.String} object. * @return a {@link java.lang.String} object.
*/ */
public ArrayList<Mana> getLastManaProduced() { public List<Mana> getLastManaProduced() {
return this.lastManaProduced; return this.lastManaProduced;
} }

View File

@@ -110,7 +110,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
protected ApiType api = null; protected ApiType api = null;
private final ArrayList<Mana> payingMana = new ArrayList<Mana>(); private final List<Mana> payingMana = new ArrayList<Mana>();
private final List<SpellAbility> paidAbilities = new ArrayList<SpellAbility>(); private final List<SpellAbility> paidAbilities = new ArrayList<SpellAbility>();
private HashMap<String, CardCollection> paidLists = new HashMap<String, CardCollection>(); private HashMap<String, CardCollection> paidLists = new HashMap<String, CardCollection>();
@@ -946,8 +946,8 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object.
* @since 1.0.15 * @since 1.0.15
*/ */
public final ArrayList<TargetChoices> getAllTargetChoices() { public final List<TargetChoices> getAllTargetChoices() {
final ArrayList<TargetChoices> res = new ArrayList<TargetChoices>(); final List<TargetChoices> res = new ArrayList<TargetChoices>();
SpellAbility sa = getRootAbility(); SpellAbility sa = getRootAbility();
if (sa.getTargetRestrictions() != null) { if (sa.getTargetRestrictions() != null) {

View File

@@ -17,6 +17,10 @@
*/ */
package forge.game.spellability; package forge.game.spellability;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import forge.game.Game; import forge.game.Game;
import forge.game.ability.AbilityUtils; import forge.game.ability.AbilityUtils;
import forge.game.card.Card; import forge.game.card.Card;
@@ -29,9 +33,6 @@ import forge.game.zone.Zone;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.Expressions; import forge.util.Expressions;
import java.util.ArrayList;
import java.util.Map;
/** /**
* <p> * <p>
* SpellAbilityRestriction class. * SpellAbilityRestriction class.
@@ -80,7 +81,7 @@ public class SpellAbilityRestriction extends SpellAbilityVariables {
this.setHellbent(true); this.setHellbent(true);
} }
if (value.startsWith("Prowl")) { if (value.startsWith("Prowl")) {
final ArrayList<String> prowlTypes = new ArrayList<String>(); final List<String> prowlTypes = new ArrayList<String>();
prowlTypes.add("Rogue"); prowlTypes.add("Rogue");
if (value.split("Prowl").length > 1) { if (value.split("Prowl").length > 1) {
prowlTypes.add(value.split("Prowl")[1]); prowlTypes.add(value.split("Prowl")[1]);

View File

@@ -254,9 +254,9 @@ public class SpellAbilityStackInstance implements IIdentifiable, IHasCardView {
view.updateText(this); view.updateText(this);
// Run BecomesTargetTrigger // Run BecomesTargetTrigger
HashMap<String, Object> runParams = new HashMap<String, Object>(); Map<String, Object> runParams = new HashMap<String, Object>();
runParams.put("SourceSA", ability); runParams.put("SourceSA", ability);
HashSet<Object> distinctObjects = new HashSet<Object>(); Set<Object> distinctObjects = new HashSet<Object>();
for (final Object tgt : target.getTargets()) { for (final Object tgt : target.getTargets()) {
if (distinctObjects.contains(tgt)) { if (distinctObjects.contains(tgt)) {
continue; continue;

View File

@@ -156,7 +156,7 @@ public class SpellAbilityVariables {
private boolean allTargetsLegal = false; private boolean allTargetsLegal = false;
/** The prowl. */ /** The prowl. */
private ArrayList<String> prowlTypes = new ArrayList<String>(); private List<String> prowlTypes = new ArrayList<String>();
/** The s is present. */ /** The s is present. */
private String isPresent = null; private String isPresent = null;
@@ -518,7 +518,7 @@ public class SpellAbilityVariables {
* @param types * @param types
* the new prowl * the new prowl
*/ */
public final void setProwlTypes(final ArrayList<String> types) { public final void setProwlTypes(final List<String> types) {
this.prowlTypes = types; this.prowlTypes = types;
} }
@@ -750,7 +750,7 @@ public class SpellAbilityVariables {
* *
* @return the prowl * @return the prowl
*/ */
public final ArrayList<String> getProwlTypes() { public final List<String> getProwlTypes() {
return this.prowlTypes; return this.prowlTypes;
} }

View File

@@ -109,7 +109,7 @@ public class TargetChoices implements Cloneable {
} }
public final List<GameObject> getTargets() { public final List<GameObject> getTargets() {
final ArrayList<GameObject> tgts = new ArrayList<GameObject>(); final List<GameObject> tgts = new ArrayList<GameObject>();
tgts.addAll(targetPlayers); tgts.addAll(targetPlayers);
tgts.addAll(targetCards); tgts.addAll(targetCards);
tgts.addAll(targetSpells); tgts.addAll(targetSpells);

View File

@@ -100,7 +100,7 @@ public final class StaticAbilityContinuous {
final Card hostCard = stAb.getHostCard(); final Card hostCard = stAb.getHostCard();
final Player controller = hostCard.getController(); final Player controller = hostCard.getController();
final ArrayList<Player> affectedPlayers = StaticAbilityContinuous.getAffectedPlayers(stAb); final List<Player> affectedPlayers = StaticAbilityContinuous.getAffectedPlayers(stAb);
final Game game = hostCard.getGame(); final Game game = hostCard.getGame();
final StaticEffect se = game.getStaticEffects().getStaticEffect(stAb); final StaticEffect se = game.getStaticEffects().getStaticEffect(stAb);
@@ -132,7 +132,7 @@ public final class StaticAbilityContinuous {
String addColors = null; String addColors = null;
String[] addTriggers = null; String[] addTriggers = null;
String[] addStatics = null; String[] addStatics = null;
ArrayList<SpellAbility> addFullAbs = null; List<SpellAbility> addFullAbs = null;
boolean removeAllAbilities = false; boolean removeAllAbilities = false;
boolean removeSuperTypes = false; boolean removeSuperTypes = false;
boolean removeCardTypes = false; boolean removeCardTypes = false;
@@ -329,7 +329,7 @@ public final class StaticAbilityContinuous {
if (layer == StaticAbilityLayer.ABILITIES1 && params.containsKey("GainsAbilitiesOf")) { if (layer == StaticAbilityLayer.ABILITIES1 && params.containsKey("GainsAbilitiesOf")) {
final String[] valids = params.get("GainsAbilitiesOf").split(","); final String[] valids = params.get("GainsAbilitiesOf").split(",");
ArrayList<ZoneType> validZones = new ArrayList<ZoneType>(); List<ZoneType> validZones = new ArrayList<ZoneType>();
validZones.add(ZoneType.Battlefield); validZones.add(ZoneType.Battlefield);
if (params.containsKey("GainsAbilitiesOfZones")) { if (params.containsKey("GainsAbilitiesOfZones")) {
validZones.clear(); validZones.clear();
@@ -656,12 +656,12 @@ public final class StaticAbilityContinuous {
sourceCard.addLeavesPlayCommand(removeIgnore); sourceCard.addLeavesPlayCommand(removeIgnore);
} }
private static ArrayList<Player> getAffectedPlayers(final StaticAbility stAb) { private static List<Player> getAffectedPlayers(final StaticAbility stAb) {
final Map<String, String> params = stAb.getMapParams(); final Map<String, String> params = stAb.getMapParams();
final Card hostCard = stAb.getHostCard(); final Card hostCard = stAb.getHostCard();
final Player controller = hostCard.getController(); final Player controller = hostCard.getController();
final ArrayList<Player> players = new ArrayList<Player>(); final List<Player> players = new ArrayList<Player>();
if (!params.containsKey("Affected")) { if (!params.containsKey("Affected")) {
return players; return players;

View File

@@ -17,15 +17,16 @@
*/ */
package forge.game.trigger; 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.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.ListMultimap;
import forge.game.card.Card;
import forge.game.player.Player;
import forge.game.spellability.SpellAbility;
import forge.util.FCollection;
/** /**
* <p> * <p>
@@ -63,12 +64,12 @@ public class TriggerVote extends Trigger {
@Override @Override
public final void setTriggeringObjects(final SpellAbility sa) { public final void setTriggeringObjects(final SpellAbility sa) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
final ArrayListMultimap<Object, Player> votes = (ArrayListMultimap<Object, Player>) this.getRunParams().get("AllVotes"); final ListMultimap<Object, Player> votes = (ArrayListMultimap<Object, Player>) this.getRunParams().get("AllVotes");
sa.setTriggeringObject("OtherVoters", getVoters(this.getHostCard().getController(), votes, true, true)); sa.setTriggeringObject("OtherVoters", getVoters(this.getHostCard().getController(), votes, true, true));
} }
private static FCollection<Player> getVoters(final Player player, private static FCollection<Player> getVoters(final Player player,
final ArrayListMultimap<Object, Player> votes, final ListMultimap<Object, Player> votes,
final boolean isOpponent, final boolean votedOtherchoice) { final boolean isOpponent, final boolean votedOtherchoice) {
final FCollection<Player> voters = new FCollection<Player>(); final FCollection<Player> voters = new FCollection<Player>();
for (final Object voteType : votes.keySet()) { for (final Object voteType : votes.keySet()) {

View File

@@ -23,6 +23,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Stack; import java.util.Stack;
import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.LinkedBlockingDeque;
@@ -377,7 +378,7 @@ public class MagicStack /* extends MyObservable */ implements Iterable<SpellAbil
s = si.getSpellAbility(true); s = si.getSpellAbility(true);
} }
runParams.put("SourceSA", s); runParams.put("SourceSA", s);
HashSet<Object> distinctObjects = new HashSet<Object>(); Set<Object> distinctObjects = new HashSet<Object>();
for (final TargetChoices tc : chosenTargets) { for (final TargetChoices tc : chosenTargets) {
if (tc != null && tc.getTargetCards() != null) { if (tc != null && tc.getTargetCards() != null) {
for (final Object tgt : tc.getTargets()) { for (final Object tgt : tc.getTargets()) {

View File

@@ -16,7 +16,7 @@ import java.util.Set;
public class FCollection<T> implements List<T>, Set<T>, FCollectionView<T>, Cloneable, Serializable { public class FCollection<T> implements List<T>, Set<T>, FCollectionView<T>, Cloneable, Serializable {
private static final long serialVersionUID = -1664555336364294106L; private static final long serialVersionUID = -1664555336364294106L;
private final HashSet<T> set = new HashSet<T>(); private final Set<T> set = new HashSet<T>();
private final LinkedList<T> list = new LinkedList<T>(); private final LinkedList<T> list = new LinkedList<T>();
public FCollection() { public FCollection() {

View File

@@ -603,7 +603,7 @@ public class MultiLineLabelUI extends BasicLabelUI implements ComponentListener
/** /**
* Reused segments. * Reused segments.
*/ */
private final ArrayList<Segment> segments = new ArrayList<Segment>(2); private final List<Segment> segments = new ArrayList<Segment>(2);
/** /**
* Singleton instance. * Singleton instance.

View File

@@ -94,7 +94,7 @@ public abstract class ItemManager<T extends InventoryItem> extends JPanel implem
private final Class<T> genericType; private final Class<T> genericType;
private final CDetailPicture cDetailPicture; private final CDetailPicture cDetailPicture;
private ItemManagerConfig config; private ItemManagerConfig config;
private final ArrayList<ListSelectionListener> selectionListeners = new ArrayList<ListSelectionListener>(); private final List<ListSelectionListener> selectionListeners = new ArrayList<ListSelectionListener>();
private final SkinnedCheckBox chkEnableFilters = new SkinnedCheckBox(); private final SkinnedCheckBox chkEnableFilters = new SkinnedCheckBox();

View File

@@ -1,18 +1,20 @@
package forge.itemmanager.filters; package forge.itemmanager.filters;
import java.awt.Graphics;
import java.util.ArrayList;
import java.util.List;
import javax.swing.Icon;
import javax.swing.JPanel;
import forge.UiCommand; import forge.UiCommand;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.itemmanager.ItemManager; import forge.itemmanager.ItemManager;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import forge.toolbox.FSkin; import forge.toolbox.FSkin;
import forge.toolbox.LayoutHelper;
import forge.toolbox.FSkin.SkinFont; import forge.toolbox.FSkin.SkinFont;
import forge.toolbox.FSkin.SkinImage; import forge.toolbox.FSkin.SkinImage;
import forge.toolbox.LayoutHelper;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
/** /**
* TODO: Write javadoc for this type. * TODO: Write javadoc for this type.
@@ -21,7 +23,7 @@ import java.util.ArrayList;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public abstract class ToggleButtonsFilter<T extends InventoryItem> extends ItemFilter<T> { public abstract class ToggleButtonsFilter<T extends InventoryItem> extends ItemFilter<T> {
protected boolean lockFiltering; protected boolean lockFiltering;
private final ArrayList<FLabel> buttons = new ArrayList<FLabel>(); private final List<FLabel> buttons = new ArrayList<FLabel>();
protected ToggleButtonsFilter(ItemManager<? super T> itemManager0) { protected ToggleButtonsFilter(ItemManager<? super T> itemManager0) {
super(itemManager0); super(itemManager0);

View File

@@ -79,8 +79,8 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
private Point hoverScrollPos; private Point hoverScrollPos;
private ItemInfo hoveredItem; private ItemInfo hoveredItem;
private ItemInfo focalItem; private ItemInfo focalItem;
private final ArrayList<ItemInfo> orderedItems = new ArrayList<ItemInfo>(); private final List<ItemInfo> orderedItems = new ArrayList<ItemInfo>();
private final ArrayList<Group> groups = new ArrayList<Group>(); private final List<Group> groups = new ArrayList<Group>();
@SuppressWarnings("serial") @SuppressWarnings("serial")
private class ExpandCollapseButton extends FLabel { private class ExpandCollapseButton extends FLabel {
@@ -580,7 +580,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
if (forRefresh && pileBy != null) { //refresh piles if needed if (forRefresh && pileBy != null) { //refresh piles if needed
//use TreeMap to build pile set so iterating below sorts on key //use TreeMap to build pile set so iterating below sorts on key
ColumnDef groupPileBy = groupBy == null ? pileBy : groupBy.getGroupPileBy(i, pileBy); ColumnDef groupPileBy = groupBy == null ? pileBy : groupBy.getGroupPileBy(i, pileBy);
TreeMap<Comparable<?>, Pile> piles = new TreeMap<Comparable<?>, Pile>(); Map<Comparable<?>, Pile> piles = new TreeMap<Comparable<?>, Pile>();
for (ItemInfo itemInfo : group.items) { for (ItemInfo itemInfo : group.items) {
Comparable<?> key = groupPileBy.fnSort.apply(itemInfo); Comparable<?> key = groupPileBy.fnSort.apply(itemInfo);
if (!piles.containsKey(key)) { if (!piles.containsKey(key)) {

View File

@@ -80,7 +80,7 @@ public class DeckHtmlSerializer {
} }
} }
final TreeMap<String, Integer> map = new TreeMap<String, Integer>(); final Map<String, Integer> map = new TreeMap<String, Integer>();
for (final Entry<PaperCard, Integer> entry : d.getMain()) { for (final Entry<PaperCard, Integer> entry : d.getMain()) {
map.put(entry.getKey().getName(), entry.getValue()); map.put(entry.getKey().getName(), entry.getValue());
// System.out.println(entry.getValue() + " " + // System.out.println(entry.getValue() + " " +

View File

@@ -242,7 +242,7 @@ public final class CMatchUI
return FSkin.getAvatars().get(avatarIdx >= 0 ? avatarIdx : defaultIndex); return FSkin.getAvatars().get(avatarIdx >= 0 ? avatarIdx : defaultIndex);
} }
private void initMatch(final FCollectionView<PlayerView> sortedPlayers, final Iterable<PlayerView> myPlayers) { private void initMatch(final FCollectionView<PlayerView> sortedPlayers, final Collection<PlayerView> myPlayers) {
this.sortedPlayers = sortedPlayers; this.sortedPlayers = sortedPlayers;
this.setLocalPlayers(myPlayers); this.setLocalPlayers(myPlayers);
allHands = sortedPlayers.size() == getLocalPlayerCount(); allHands = sortedPlayers.size() == getLocalPlayerCount();

View File

@@ -2,6 +2,7 @@ package forge.toolbox;
import java.awt.FlowLayout; import java.awt.FlowLayout;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel; import javax.swing.JPanel;
@@ -14,7 +15,7 @@ import forge.toolbox.FSkin.SkinnedLabel;
@SuppressWarnings("serial") @SuppressWarnings("serial")
public class FComboBoxPanel<E> extends JPanel { public class FComboBoxPanel<E> extends JPanel {
private static final ArrayList<FComboBoxPanel<?>> allPanels = new ArrayList<FComboBoxPanel<?>>(); private static final List<FComboBoxPanel<?>> allPanels = new ArrayList<FComboBoxPanel<?>>();
public static void refreshAllSkins() { public static void refreshAllSkins() {
for (final FComboBoxPanel<?> panel : allPanels) { for (final FComboBoxPanel<?> panel : allPanels) {

View File

@@ -5,6 +5,7 @@ import java.awt.event.ActionListener;
import java.awt.event.ItemListener; import java.awt.event.ItemListener;
import java.awt.event.KeyListener; import java.awt.event.KeyListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import javax.swing.ComboBoxModel; import javax.swing.ComboBoxModel;
import javax.swing.JComponent; import javax.swing.JComponent;
@@ -22,7 +23,7 @@ import forge.toolbox.FSkin.SkinFont;
*/ */
public class FComboBoxWrapper<E> implements IComboBox<E> { public class FComboBoxWrapper<E> implements IComboBox<E> {
private static final ArrayList<FComboBoxWrapper<?>> allWrappers = new ArrayList<FComboBoxWrapper<?>>(); private static final List<FComboBoxWrapper<?>> allWrappers = new ArrayList<FComboBoxWrapper<?>>();
public static void refreshAllSkins() { public static void refreshAllSkins() {
for (final FComboBoxWrapper<?> wrapper : allWrappers) { for (final FComboBoxWrapper<?> wrapper : allWrappers) {

View File

@@ -5,6 +5,7 @@ import java.awt.event.ActionListener;
import java.text.DateFormat; import java.text.DateFormat;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.List;
import javax.swing.Timer; import javax.swing.Timer;
@@ -18,7 +19,7 @@ import forge.toolbox.FSkin.SkinnedLabel;
public class FDigitalClock extends SkinnedLabel { public class FDigitalClock extends SkinnedLabel {
private static final Calendar now = Calendar.getInstance(); private static final Calendar now = Calendar.getInstance();
private static final DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT); private static final DateFormat timeFormatter = DateFormat.getTimeInstance(DateFormat.SHORT);
private static final ArrayList<FDigitalClock> clocks = new ArrayList<FDigitalClock>(); private static final List<FDigitalClock> clocks = new ArrayList<FDigitalClock>();
private static Timer timer; private static Timer timer;
private static String currentTimeDisplay; private static String currentTimeDisplay;

View File

@@ -1100,7 +1100,7 @@ public class FSkin {
if (allSkins == null) { //initialize if (allSkins == null) { //initialize
allSkins = new ArrayList<String>(); allSkins = new ArrayList<String>();
final ArrayList<String> skinDirectoryNames = getSkinDirectoryNames(); final List<String> skinDirectoryNames = getSkinDirectoryNames();
for (int i = 0; i < skinDirectoryNames.size(); i++) { for (int i = 0; i < skinDirectoryNames.size(); i++) {
allSkins.add(WordUtils.capitalize(skinDirectoryNames.get(i).replace('_', ' '))); allSkins.add(WordUtils.capitalize(skinDirectoryNames.get(i).replace('_', ' ')));
} }
@@ -1337,8 +1337,8 @@ public class FSkin {
* *
* @return the skins * @return the skins
*/ */
public static ArrayList<String> getSkinDirectoryNames() { public static List<String> getSkinDirectoryNames() {
final ArrayList<String> mySkins = new ArrayList<String>(); final List<String> mySkins = new ArrayList<String>();
final File dir = new File(ForgeConstants.SKINS_DIR); final File dir = new File(ForgeConstants.SKINS_DIR);
final String[] children = dir.list(); final String[] children = dir.list();

View File

@@ -1,8 +1,9 @@
package forge.ai.simulation; package forge.ai.simulation;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import junit.framework.TestCase;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import forge.GuiBase; import forge.GuiBase;
@@ -26,7 +27,6 @@ import forge.game.spellability.SpellAbility;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.item.IPaperCard; import forge.item.IPaperCard;
import forge.model.FModel; import forge.model.FModel;
import junit.framework.TestCase;
public class GameSimulatorTest extends TestCase { public class GameSimulatorTest extends TestCase {
private static boolean initialized = false; private static boolean initialized = false;
@@ -319,7 +319,7 @@ public class GameSimulatorTest extends TestCase {
game.getAction().checkStateEffects(true); game.getAction().checkStateEffects(true);
CardCollection cards = ComputerUtilAbility.getAvailableCards(game, p); CardCollection cards = ComputerUtilAbility.getAvailableCards(game, p);
ArrayList<SpellAbility> abilities = ComputerUtilAbility.getSpellAbilities(cards, p); List<SpellAbility> abilities = ComputerUtilAbility.getSpellAbilities(cards, p);
SpellAbility minusTwo = findSAWithPrefix(abilities, "-2: Put a 2/2 black Vampire"); SpellAbility minusTwo = findSAWithPrefix(abilities, "-2: Put a 2/2 black Vampire");
assertNotNull(minusTwo); assertNotNull(minusTwo);
minusTwo.setActivatingPlayer(p); minusTwo.setActivatingPlayer(p);

View File

@@ -9,8 +9,8 @@ import org.apache.commons.lang3.tuple.ImmutablePair;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.collect.ArrayListMultimap;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.google.common.collect.ListMultimap;
import com.google.common.collect.Multimap; import com.google.common.collect.Multimap;
import forge.LobbyPlayer; import forge.LobbyPlayer;
@@ -465,26 +465,26 @@ public class PlayerControllerForTests extends PlayerController {
return (CardCollection)items.subList(0, Math.max(amount, items.size())); return (CardCollection)items.subList(0, Math.max(amount, items.size()));
} }
private <T> T chooseItem(Iterable<T> items) { private <T> T chooseItem(Iterable<T> items) {
if (items == null) { if (items == null) {
return null; return null;
} }
return Iterables.getFirst(items, null); return Iterables.getFirst(items, null);
} }
@Override
public SpellAbility getAbilityToPlay(Card hostCard, List<SpellAbility> abilities, ITriggerEvent triggerEvent) {
// Isn't this a method invocation loop? --elcnesh
return getAbilityToPlay(hostCard, abilities);
}
@Override
public String chooseSomeType(String kindOfType, SpellAbility sa, List<String> validTypes, List<String> invalidTypes, boolean isOptional) {
return chooseItem(validTypes);
}
@Override @Override
public Object vote(SpellAbility sa, String prompt, List<Object> options, ArrayListMultimap<Object, Player> votes) { public SpellAbility getAbilityToPlay(Card hostCard, List<SpellAbility> abilities, ITriggerEvent triggerEvent) {
// Isn't this a method invocation loop? --elcnesh
return getAbilityToPlay(hostCard, abilities);
}
@Override
public String chooseSomeType(String kindOfType, SpellAbility sa, List<String> validTypes, List<String> invalidTypes, boolean isOptional) {
return chooseItem(validTypes);
}
@Override
public Object vote(SpellAbility sa, String prompt, List<Object> options, ListMultimap<Object, Player> votes) {
return chooseItem(options); return chooseItem(options);
} }
@@ -509,9 +509,7 @@ public class PlayerControllerForTests extends PlayerController {
} }
@Override @Override
public ReplacementEffect chooseSingleReplacementEffect(String prompt, public ReplacementEffect chooseSingleReplacementEffect(String prompt, List<ReplacementEffect> possibleReplacers, Map<String, Object> runParams) {
List<ReplacementEffect> possibleReplacers,
HashMap<String, Object> runParams) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return Iterables.getFirst(possibleReplacers, null); return Iterables.getFirst(possibleReplacers, null);
} }

View File

@@ -1,6 +1,7 @@
package forge; package forge;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Stack; import java.util.Stack;
import com.badlogic.gdx.ApplicationListener; import com.badlogic.gdx.ApplicationListener;
@@ -405,7 +406,7 @@ public class Forge implements ApplicationListener {
} }
private static class MainInputProcessor extends FGestureAdapter { private static class MainInputProcessor extends FGestureAdapter {
private static final ArrayList<FDisplayObject> potentialListeners = new ArrayList<FDisplayObject>(); private static final List<FDisplayObject> potentialListeners = new ArrayList<FDisplayObject>();
private static char lastKeyTyped; private static char lastKeyTyped;
private static boolean keyTyped, shiftKeyDown; private static boolean keyTyped, shiftKeyDown;

View File

@@ -10,19 +10,17 @@ import forge.Graphics;
import forge.toolbox.FDisplayObject; import forge.toolbox.FDisplayObject;
import forge.toolbox.FOverlay; import forge.toolbox.FOverlay;
public class ForgeTransition extends ForgeAnimation { public class ForgeTransition extends ForgeAnimation {
private static final FOverlay overlay = new FOverlay(null) { private static final FOverlay overlay = new FOverlay(null) {
@Override @Override protected void doLayout(final float width, final float height) {
protected void doLayout(float width, float height) {
} }
}; };
private static final Map<FDisplayObject, TransitionObject> transitionLookup = new LinkedHashMap<FDisplayObject, TransitionObject>(); private static final Map<FDisplayObject, TransitionObject> transitionLookup = new LinkedHashMap<FDisplayObject, TransitionObject>();
public static void queue(FDisplayObject obj, Rectangle destBounds, float duration, Runnable onFinished) { public static void queue(final FDisplayObject obj, final Rectangle destBounds, final float duration, final Runnable onFinished) {
queue(obj, destBounds, duration, 0, false, onFinished); queue(obj, destBounds, duration, 0, false, onFinished);
} }
public static void queue(FDisplayObject obj, Rectangle destBounds, float duration, float arcAmount, boolean arcOriginBelow, Runnable onFinished) { public static void queue(final FDisplayObject obj, final Rectangle destBounds, final float duration, final float arcAmount, final boolean arcOriginBelow, final Runnable onFinished) {
TransitionObject transitionObj = transitionLookup.get(obj); TransitionObject transitionObj = transitionLookup.get(obj);
if (transitionObj == null) { if (transitionObj == null) {
transitionObj = new TransitionObject(obj); transitionObj = new TransitionObject(obj);
@@ -30,7 +28,7 @@ public class ForgeTransition extends ForgeAnimation {
overlay.add(transitionObj); overlay.add(transitionObj);
obj.setVisible(false); //hide original object while transition in progress obj.setVisible(false); //hide original object while transition in progress
} }
ForgeTransition transition = new ForgeTransition(transitionObj, destBounds, duration, arcAmount, arcOriginBelow, onFinished); final ForgeTransition transition = new ForgeTransition(transitionObj, destBounds, duration, arcAmount, arcOriginBelow, onFinished);
transitionObj.transitions.add(transition); transitionObj.transitions.add(transition);
if (transitionObj.transitions.size() == 1) { if (transitionObj.transitions.size() == 1) {
transition.start(); //start transition right away if first transition added transition.start(); //start transition right away if first transition added
@@ -45,7 +43,7 @@ public class ForgeTransition extends ForgeAnimation {
private final boolean arcOriginBelow;*/ private final boolean arcOriginBelow;*/
private final Runnable onFinished; private final Runnable onFinished;
private ForgeTransition(TransitionObject obj0, Rectangle destBounds0, float duration0, float arcAmount0, boolean arcOriginBelow0, Runnable onFinished0) { private ForgeTransition(final TransitionObject obj0, final Rectangle destBounds0, final float duration0, final float arcAmount0, final boolean arcOriginBelow0, final Runnable onFinished0) {
obj = obj0; obj = obj0;
/*destBounds = destBounds0; /*destBounds = destBounds0;
duration = duration0; duration = duration0;
@@ -55,12 +53,12 @@ public class ForgeTransition extends ForgeAnimation {
} }
@Override @Override
protected boolean advance(float dt) { protected boolean advance(final float dt) {
return false; return false;
} }
@Override @Override
protected void onEnd(boolean endingAll) { protected void onEnd(final boolean endingAll) {
if (onFinished != null) { if (onFinished != null) {
onFinished.run(); onFinished.run();
} }
@@ -70,7 +68,7 @@ public class ForgeTransition extends ForgeAnimation {
return; return;
} }
int index = obj.transitions.indexOf(this); final int index = obj.transitions.indexOf(this);
obj.transitions.remove(index); obj.transitions.remove(index);
if (index == 0) { if (index == 0) {
if (obj.transitions.isEmpty()) { if (obj.transitions.isEmpty()) {
@@ -91,13 +89,13 @@ public class ForgeTransition extends ForgeAnimation {
private final FDisplayObject originalObj; private final FDisplayObject originalObj;
private final LinkedList<ForgeTransition> transitions = new LinkedList<ForgeTransition>(); private final LinkedList<ForgeTransition> transitions = new LinkedList<ForgeTransition>();
private TransitionObject(FDisplayObject originalObj0) { private TransitionObject(final FDisplayObject originalObj0) {
originalObj = originalObj0; originalObj = originalObj0;
setBounds(originalObj.screenPos.x, originalObj.screenPos.y, originalObj.getWidth(), originalObj.getHeight()); setBounds(originalObj.screenPos.x, originalObj.screenPos.y, originalObj.getWidth(), originalObj.getHeight());
} }
@Override @Override
public void draw(Graphics g) { public void draw(final Graphics g) {
originalObj.draw(g); originalObj.draw(g);
} }
} }

View File

@@ -3,6 +3,7 @@ package forge.assets;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import org.apache.commons.lang3.text.WordUtils; import org.apache.commons.lang3.text.WordUtils;
@@ -30,7 +31,7 @@ public class FSkin {
private static final Map<FSkinProp, FSkinImage> images = new HashMap<FSkinProp, FSkinImage>(); private static final Map<FSkinProp, FSkinImage> images = new HashMap<FSkinProp, FSkinImage>();
private static final Map<Integer, TextureRegion> avatars = new HashMap<Integer, TextureRegion>(); private static final Map<Integer, TextureRegion> avatars = new HashMap<Integer, TextureRegion>();
private static ArrayList<String> allSkins; private static List<String> allSkins;
private static FileHandle preferredDir; private static FileHandle preferredDir;
private static String preferredName; private static String preferredName;
private static boolean loaded = false; private static boolean loaded = false;
@@ -98,9 +99,9 @@ public class FSkin {
if (splashScreen != null) { if (splashScreen != null) {
if (allSkins == null) { //initialize if (allSkins == null) { //initialize
allSkins = new ArrayList<String>(); allSkins = new ArrayList<String>();
ArrayList<String> skinDirectoryNames = getSkinDirectoryNames(); final List<String> skinDirectoryNames = getSkinDirectoryNames();
for (int i = 0; i < skinDirectoryNames.size(); i++) { for (final String skinDirectoryName : skinDirectoryNames) {
allSkins.add(WordUtils.capitalize(skinDirectoryNames.get(i).replace('_', ' '))); allSkins.add(WordUtils.capitalize(skinDirectoryName.replace('_', ' ')));
} }
Collections.sort(allSkins); Collections.sort(allSkins);
} }
@@ -300,8 +301,8 @@ public class FSkin {
* *
* @return the skins * @return the skins
*/ */
public static ArrayList<String> getSkinDirectoryNames() { public static List<String> getSkinDirectoryNames() {
final ArrayList<String> mySkins = new ArrayList<String>(); final List<String> mySkins = new ArrayList<String>();
final FileHandle dir = Gdx.files.absolute(ForgeConstants.SKINS_DIR); final FileHandle dir = Gdx.files.absolute(ForgeConstants.SKINS_DIR);
for (FileHandle skinFile : dir.list()) { for (FileHandle skinFile : dir.list()) {

View File

@@ -1,5 +1,10 @@
package forge.itemmanager.filters; package forge.itemmanager.filters;
import java.util.ArrayList;
import java.util.List;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import forge.assets.FImage; import forge.assets.FImage;
import forge.item.InventoryItem; import forge.item.InventoryItem;
import forge.itemmanager.ItemManager; import forge.itemmanager.ItemManager;
@@ -7,14 +12,11 @@ import forge.toolbox.FEvent;
import forge.toolbox.FEvent.FEventHandler; import forge.toolbox.FEvent.FEventHandler;
import forge.toolbox.FEvent.FEventType; import forge.toolbox.FEvent.FEventType;
import forge.toolbox.FLabel; import forge.toolbox.FLabel;
import java.util.ArrayList;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
public abstract class ToggleButtonsFilter<T extends InventoryItem> extends ItemFilter<T> { public abstract class ToggleButtonsFilter<T extends InventoryItem> extends ItemFilter<T> {
protected boolean lockFiltering; protected boolean lockFiltering;
private final ArrayList<FLabel> buttons = new ArrayList<FLabel>(); private final List<FLabel> buttons = new ArrayList<FLabel>();
protected ToggleButtonsFilter(ItemManager<? super T> itemManager0) { protected ToggleButtonsFilter(ItemManager<? super T> itemManager0) {
super(itemManager0); super(itemManager0);

View File

@@ -63,8 +63,8 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
private ItemInfo focalItem; private ItemInfo focalItem;
private boolean updatingLayout; private boolean updatingLayout;
private float totalZoomAmount; private float totalZoomAmount;
private final ArrayList<ItemInfo> orderedItems = new ArrayList<ItemInfo>(); private final List<ItemInfo> orderedItems = new ArrayList<ItemInfo>();
private final ArrayList<Group> groups = new ArrayList<Group>(); private final List<Group> groups = new ArrayList<Group>();
private class ExpandCollapseButton extends FLabel { private class ExpandCollapseButton extends FLabel {
private boolean isAllCollapsed; private boolean isAllCollapsed;
@@ -435,7 +435,7 @@ public class ImageView<T extends InventoryItem> extends ItemView<T> {
if (forRefresh && pileBy != null) { //refresh piles if needed if (forRefresh && pileBy != null) { //refresh piles if needed
//use TreeMap to build pile set so iterating below sorts on key //use TreeMap to build pile set so iterating below sorts on key
ColumnDef groupPileBy = groupBy == null ? pileBy : groupBy.getGroupPileBy(i, pileBy); ColumnDef groupPileBy = groupBy == null ? pileBy : groupBy.getGroupPileBy(i, pileBy);
TreeMap<Comparable<?>, Pile> piles = new TreeMap<Comparable<?>, Pile>(); Map<Comparable<?>, Pile> piles = new TreeMap<Comparable<?>, Pile>();
for (ItemInfo itemInfo : group.items) { for (ItemInfo itemInfo : group.items) {
Comparable<?> key = groupPileBy.fnSort.apply(itemInfo); Comparable<?> key = groupPileBy.fnSort.apply(itemInfo);
if (!piles.containsKey(key)) { if (!piles.containsKey(key)) {

View File

@@ -1,6 +1,6 @@
package forge.screens; package forge.screens;
import java.util.ArrayList; import java.util.List;
import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
@@ -10,8 +10,8 @@ import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.assets.FImage; import forge.assets.FImage;
import forge.assets.FSkinColor; import forge.assets.FSkinColor;
import forge.assets.FSkinFont;
import forge.assets.FSkinColor.Colors; import forge.assets.FSkinColor.Colors;
import forge.assets.FSkinFont;
import forge.assets.FSkinTexture; import forge.assets.FSkinTexture;
import forge.menu.FPopupMenu; import forge.menu.FPopupMenu;
import forge.screens.home.HomeScreen; import forge.screens.home.HomeScreen;
@@ -130,7 +130,7 @@ public abstract class FScreen extends FContainer {
} }
@Override @Override
public void buildTouchListeners(float screenX, float screenY, ArrayList<FDisplayObject> listeners) { public void buildTouchListeners(float screenX, float screenY, List<FDisplayObject> listeners) {
if (Forge.isLandscapeMode()) { if (Forge.isLandscapeMode()) {
//allow touch events on backdrop screen if any //allow touch events on backdrop screen if any
FScreen backdrop = getLandscapeBackdropScreen(); FScreen backdrop = getLandscapeBackdropScreen();

View File

@@ -1,17 +1,18 @@
package forge.screens.home; package forge.screens.home;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment; import com.badlogic.gdx.graphics.g2d.BitmapFont.HAlignment;
import forge.Forge; import forge.Forge;
import forge.Graphics; import forge.Graphics;
import forge.screens.FScreen;
import forge.assets.FSkinColor; import forge.assets.FSkinColor;
import forge.assets.FSkinColor.Colors; import forge.assets.FSkinColor.Colors;
import forge.assets.FSkinImage; import forge.assets.FSkinImage;
import forge.deck.FDeckChooser; import forge.deck.FDeckChooser;
import forge.game.GameType; import forge.game.GameType;
import forge.screens.FScreen;
import forge.screens.achievements.AchievementsScreen; import forge.screens.achievements.AchievementsScreen;
import forge.screens.online.OnlineMenu; import forge.screens.online.OnlineMenu;
import forge.screens.settings.SettingsScreen; import forge.screens.settings.SettingsScreen;
@@ -31,7 +32,7 @@ public class HomeScreen extends FScreen {
public static final HomeScreen instance = new HomeScreen(); public static final HomeScreen instance = new HomeScreen();
private final FLabel lblLogo = add(new FLabel.Builder().icon(FSkinImage.LOGO).iconInBackground().iconScaleFactor(1).build()); private final FLabel lblLogo = add(new FLabel.Builder().icon(FSkinImage.LOGO).iconInBackground().iconScaleFactor(1).build());
private final ArrayList<MenuButton> buttons = new ArrayList<MenuButton>(); private final List<MenuButton> buttons = new ArrayList<MenuButton>();
private int activeButtonIndex; private int activeButtonIndex;
private FDeckChooser deckManager; private FDeckChooser deckManager;

View File

@@ -129,7 +129,7 @@ public class MatchController extends AbstractGuiGame {
} }
@Override @Override
public void buildTouchListeners(final float screenX, final float screenY, final ArrayList<FDisplayObject> listeners) { public void buildTouchListeners(final float screenX, final float screenY, final List<FDisplayObject> listeners) {
if (screenY < view.getHeight() - VPrompt.HEIGHT) { if (screenY < view.getHeight() - VPrompt.HEIGHT) {
hostedMatch.pause(); hostedMatch.pause();
} }

View File

@@ -4,6 +4,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
@@ -313,7 +314,7 @@ public class MatchScreen extends FScreen {
if (game == null) { return; } if (game == null) { return; }
//draw arrows for paired cards //draw arrows for paired cards
HashSet<CardView> pairedCards = new HashSet<CardView>(); Set<CardView> pairedCards = new HashSet<CardView>();
for (VPlayerPanel playerPanel : playerPanels.values()) { for (VPlayerPanel playerPanel : playerPanels.values()) {
for (CardView card : playerPanel.getField().getRow1().getOrderedCards()) { for (CardView card : playerPanel.getField().getRow1().getOrderedCards()) {
if (pairedCards.contains(card)) { continue; } //prevent arrows going both ways if (pairedCards.contains(card)) { continue; } //prevent arrows going both ways

View File

@@ -1,6 +1,6 @@
package forge.screens.match.views; package forge.screens.match.views;
import java.util.ArrayList; import java.util.List;
import forge.game.player.PlayerView; import forge.game.player.PlayerView;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
@@ -27,7 +27,7 @@ public class VZoneDisplay extends VCardDisplayArea {
} }
@Override @Override
public void buildTouchListeners(float screenX, float screenY, ArrayList<FDisplayObject> listeners) { public void buildTouchListeners(float screenX, float screenY, List<FDisplayObject> listeners) {
super.buildTouchListeners(screenX, screenY, listeners); super.buildTouchListeners(screenX, screenY, listeners);
if (revealedPanel != null) { if (revealedPanel != null) {

View File

@@ -2,6 +2,7 @@ package forge.toolbox;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.ConcurrentModificationException; import java.util.ConcurrentModificationException;
import java.util.List;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
@@ -9,7 +10,7 @@ import forge.Graphics;
import forge.error.BugReporter; import forge.error.BugReporter;
public abstract class FContainer extends FDisplayObject { public abstract class FContainer extends FDisplayObject {
private final ArrayList<FDisplayObject> children = new ArrayList<FDisplayObject>(); private final List<FDisplayObject> children = new ArrayList<FDisplayObject>();
public <T extends FDisplayObject> T add(T child) { public <T extends FDisplayObject> T add(T child) {
children.add(child); children.add(child);
@@ -103,7 +104,7 @@ public abstract class FContainer extends FDisplayObject {
protected abstract void doLayout(float width, float height); protected abstract void doLayout(float width, float height);
@Override @Override
public void buildTouchListeners(float screenX, float screenY, ArrayList<FDisplayObject> listeners) { public void buildTouchListeners(float screenX, float screenY, List<FDisplayObject> listeners) {
if (isEnabled() && isVisible() && screenPos.contains(screenX, screenY)) { if (isEnabled() && isVisible() && screenPos.contains(screenX, screenY)) {
for (int i = children.size() - 1; i >= 0; i--) { for (int i = children.size() - 1; i >= 0; i--) {
children.get(i).buildTouchListeners(screenX, screenY, listeners); children.get(i).buildTouchListeners(screenX, screenY, listeners);

View File

@@ -1,8 +1,9 @@
package forge.toolbox; package forge.toolbox;
import java.util.ArrayList; import java.util.List;
import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Rectangle;
import forge.Graphics; import forge.Graphics;
public abstract class FDisplayObject { public abstract class FDisplayObject {
@@ -109,7 +110,7 @@ public abstract class FDisplayObject {
} }
public abstract void draw(Graphics g); public abstract void draw(Graphics g);
public void buildTouchListeners(float screenX, float screenY, ArrayList<FDisplayObject> listeners) { public void buildTouchListeners(float screenX, float screenY, List<FDisplayObject> listeners) {
if (enabled && visible && screenPos.contains(screenX, screenY)) { if (enabled && visible && screenPos.contains(screenX, screenY)) {
listeners.add(this); listeners.add(this);
} }

View File

@@ -1,6 +1,7 @@
package forge.toolbox; package forge.toolbox;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import java.util.Stack; import java.util.Stack;
import com.badlogic.gdx.Input.Keys; import com.badlogic.gdx.Input.Keys;
@@ -47,7 +48,7 @@ public abstract class FOverlay extends FContainer {
if (overlays.size() < 2) { if (overlays.size() < 2) {
return overlays; //don't need to create new list if one or fewer overlay return overlays; //don't need to create new list if one or fewer overlay
} }
ArrayList<FOverlay> reversedList = new ArrayList<FOverlay>(); List<FOverlay> reversedList = new ArrayList<FOverlay>();
for (int i = overlays.size() - 1; i >= 0; i--) { for (int i = overlays.size() - 1; i >= 0; i--) {
reversedList.add(overlays.get(i)); reversedList.add(overlays.get(i));
} }
@@ -183,7 +184,7 @@ public abstract class FOverlay extends FContainer {
} }
@Override @Override
public void buildTouchListeners(float screenX, float screenY, ArrayList<FDisplayObject> listeners) { public void buildTouchListeners(float screenX, float screenY, List<FDisplayObject> listeners) {
if (tempOverlay == this) { return; } //suppress touch events if waiting to be hidden if (tempOverlay == this) { return; } //suppress touch events if waiting to be hidden
super.buildTouchListeners(screenX, screenY, listeners); super.buildTouchListeners(screenX, screenY, listeners);

View File

@@ -1,11 +1,11 @@
package forge.toolbox; package forge.toolbox;
import java.util.ArrayList; import java.util.List;
import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.math.Vector2;
import forge.animation.ForgeAnimation;
import forge.Graphics; import forge.Graphics;
import forge.animation.ForgeAnimation;
import forge.util.PhysicsObject; import forge.util.PhysicsObject;
import forge.util.Utils; import forge.util.Utils;
@@ -273,7 +273,7 @@ public abstract class FScrollPane extends FContainer {
} }
@Override @Override
public void buildTouchListeners(float screenX, float screenY, ArrayList<FDisplayObject> listeners) { public void buildTouchListeners(float screenX, float screenY, List<FDisplayObject> listeners) {
//if fling animation active, stop it and prevent child controls handling touch events before next touch down unless already moving really slow //if fling animation active, stop it and prevent child controls handling touch events before next touch down unless already moving really slow
if (activeFlingAnimation != null) { if (activeFlingAnimation != null) {
boolean suppressEvent = activeFlingAnimation.physicsObj.getVelocity().len() > Utils.AVG_FINGER_HEIGHT; boolean suppressEvent = activeFlingAnimation.physicsObj.getVelocity().len() > Utils.AVG_FINGER_HEIGHT;

View File

@@ -1,6 +1,7 @@
package forge.achievement; package forge.achievement;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set;
import forge.game.Game; import forge.game.Game;
import forge.game.card.Card; import forge.game.card.Card;
@@ -15,7 +16,7 @@ public class Domain extends ProgressiveAchievement {
@Override @Override
protected boolean eval(Player player, Game game) { protected boolean eval(Player player, Game game) {
if (player.getOutcome().hasWon()) { if (player.getOutcome().hasWon()) {
HashSet<String> basicLands = new HashSet<String>(); Set<String> basicLands = new HashSet<String>();
for (Card c : player.getCardsIn(ZoneType.Battlefield)) { for (Card c : player.getCardsIn(ZoneType.Battlefield)) {
if (c.isBasicLand()) { if (c.isBasicLand()) {
basicLands.add(c.getName()); basicLands.add(c.getName());

View File

@@ -322,7 +322,7 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
@Override @Override
public Void visit(final GameEventBlockersDeclared event) { public Void visit(final GameEventBlockersDeclared event) {
final HashSet<Card> cards = new HashSet<Card>(); final Set<Card> cards = new HashSet<Card>();
for (final MapOfLists<Card, Card> kv : event.blockers.values()) { for (final MapOfLists<Card, Card> kv : event.blockers.values()) {
for (final Collection<Card> blockers : kv.values()) { for (final Collection<Card> blockers : kv.values()) {
cards.addAll(blockers); cards.addAll(blockers);

View File

@@ -9,7 +9,7 @@ public class ColorDeckGenerator extends DeckProxy implements Comparable<ColorDec
public static List<DeckProxy> getColorDecks(final IItemManager<DeckProxy> lstDecks0, final boolean isAi0) { public static List<DeckProxy> getColorDecks(final IItemManager<DeckProxy> lstDecks0, final boolean isAi0) {
final String[] colors = new String[] { "Random 1", "Random 2", "Random 3", final String[] colors = new String[] { "Random 1", "Random 2", "Random 3",
"White", "Blue", "Black", "Red", "Green" }; "White", "Blue", "Black", "Red", "Green" };
final ArrayList<DeckProxy> decks = new ArrayList<DeckProxy>(); final List<DeckProxy> decks = new ArrayList<DeckProxy>();
for (int i = 0; i < colors.length; i++) { for (int i = 0; i < colors.length; i++) {
decks.add(new ColorDeckGenerator(colors[i], i, lstDecks0, isAi0)); decks.add(new ColorDeckGenerator(colors[i], i, lstDecks0, isAi0));
} }

View File

@@ -59,8 +59,8 @@ public class DeckGeneratorTheme extends DeckGeneratorBase {
* *
* @return a {@link java.util.ArrayList} object. * @return a {@link java.util.ArrayList} object.
*/ */
public static final ArrayList<String> getThemeNames() { public static final List<String> getThemeNames() {
final ArrayList<String> ltNames = new ArrayList<String>(); final List<String> ltNames = new ArrayList<String>();
final File file = new File(ForgeConstants.THEMES_DIR); final File file = new File(ForgeConstants.THEMES_DIR);
@@ -170,7 +170,7 @@ public class DeckGeneratorTheme extends DeckGeneratorBase {
private class Grp { private class Grp {
/** The Cardnames. */ /** The Cardnames. */
private final ArrayList<String> cardnames = new ArrayList<String>(); private final List<String> cardnames = new ArrayList<String>();
/** The Max cnt. */ /** The Max cnt. */
private int maxCnt; private int maxCnt;

View File

@@ -3,6 +3,7 @@ package forge.deck;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import java.util.Map.Entry; import java.util.Map.Entry;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
@@ -140,7 +141,7 @@ public class DeckProxy implements InventoryItem {
if (color == null && !isGeneratedDeck()) { if (color == null && !isGeneratedDeck()) {
byte colorProfile = MagicColor.COLORLESS; byte colorProfile = MagicColor.COLORLESS;
byte landProfile = MagicColor.COLORLESS; byte landProfile = MagicColor.COLORLESS;
HashSet<Byte> nonReqColors = null; Set<Byte> nonReqColors = null;
for (final Entry<DeckSection, CardPool> deckEntry : getDeck()) { for (final Entry<DeckSection, CardPool> deckEntry : getDeck()) {
switch (deckEntry.getKey()) { switch (deckEntry.getKey()) {

View File

@@ -17,11 +17,12 @@
*/ */
package forge.download; package forge.download;
import forge.properties.ForgeConstants;
import java.util.HashMap;
import java.util.Map; import java.util.Map;
import com.google.common.collect.ImmutableMap;
import forge.properties.ForgeConstants;
public class GuiDownloadPrices extends GuiDownloadService { public class GuiDownloadPrices extends GuiDownloadService {
@Override @Override
public String getTitle() { public String getTitle() {
@@ -30,8 +31,6 @@ public class GuiDownloadPrices extends GuiDownloadService {
@Override @Override
protected Map<String, String> getNeededFiles() { protected Map<String, String> getNeededFiles() {
Map<String, String> result = new HashMap<String, String>(); return ImmutableMap.of(ForgeConstants.QUEST_CARD_PRICE_FILE, ForgeConstants.URL_PRICE_DOWNLOAD);
result.put(ForgeConstants.QUEST_CARD_PRICE_FILE, ForgeConstants.URL_PRICE_DOWNLOAD);
return result;
} }
} }

View File

@@ -17,12 +17,13 @@
*/ */
package forge.itemmanager; package forge.itemmanager;
import forge.itemmanager.ItemColumnConfig.SortState;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import forge.itemmanager.ItemColumnConfig.SortState;
/** /**
* A collection of methods pertaining to columns in card catalog and * A collection of methods pertaining to columns in card catalog and
* current deck tables, for use in the deck editor. * current deck tables, for use in the deck editor.
@@ -55,7 +56,7 @@ public final class SColumnUtil {
} }
private static Map<ColumnDef, ItemColumnConfig> getCardColumns(ColumnDef quantityColDef, boolean includeFavorite, private static Map<ColumnDef, ItemColumnConfig> getCardColumns(ColumnDef quantityColDef, boolean includeFavorite,
boolean includeOwned, boolean includePrice, boolean includeNew, boolean includeDecks) { boolean includeOwned, boolean includePrice, boolean includeNew, boolean includeDecks) {
ArrayList<ColumnDef> colDefs = new ArrayList<ColumnDef>(); List<ColumnDef> colDefs = new ArrayList<ColumnDef>();
if (includeFavorite) { if (includeFavorite) {
colDefs.add(ColumnDef.FAVORITE); colDefs.add(ColumnDef.FAVORITE);
} }
@@ -126,7 +127,7 @@ public final class SColumnUtil {
} }
public static Map<ColumnDef, ItemColumnConfig> getSpecialCardPoolDefaultColumns() { public static Map<ColumnDef, ItemColumnConfig> getSpecialCardPoolDefaultColumns() {
ArrayList<ColumnDef> colDefs = new ArrayList<ColumnDef>(); List<ColumnDef> colDefs = new ArrayList<ColumnDef>();
colDefs.add(ColumnDef.FAVORITE); colDefs.add(ColumnDef.FAVORITE);
colDefs.add(ColumnDef.NAME); colDefs.add(ColumnDef.NAME);
colDefs.add(ColumnDef.TYPE); colDefs.add(ColumnDef.TYPE);
@@ -186,7 +187,7 @@ public final class SColumnUtil {
} }
public static Map<ColumnDef, ItemColumnConfig> getDecksDefaultColumns(boolean allowEdit, boolean includeFolder) { public static Map<ColumnDef, ItemColumnConfig> getDecksDefaultColumns(boolean allowEdit, boolean includeFolder) {
ArrayList<ColumnDef> colDefs = new ArrayList<ColumnDef>(); List<ColumnDef> colDefs = new ArrayList<ColumnDef>();
colDefs.add(ColumnDef.DECK_FAVORITE); colDefs.add(ColumnDef.DECK_FAVORITE);
if (allowEdit) { if (allowEdit) {
colDefs.add(ColumnDef.DECK_ACTIONS); colDefs.add(ColumnDef.DECK_ACTIONS);

View File

@@ -215,7 +215,7 @@ public class BoosterDraft implements IBoosterDraft {
/** Looks for draft files, reads them, returns a list. */ /** Looks for draft files, reads them, returns a list. */
private static List<CustomLimited> loadCustomDrafts() { private static List<CustomLimited> loadCustomDrafts() {
String[] dList; String[] dList;
final ArrayList<CustomLimited> customs = new ArrayList<CustomLimited>(); final List<CustomLimited> customs = new ArrayList<CustomLimited>();
// get list of custom draft files // get list of custom draft files
final File dFolder = new File(ForgeConstants.DRAFT_DIR); final File dFolder = new File(ForgeConstants.DRAFT_DIR);

View File

@@ -50,7 +50,7 @@ public class BoosterDraftAI {
// holds all the cards for each of the computer's decks // holds all the cards for each of the computer's decks
protected final List<List<PaperCard>> deck = new ArrayList<List<PaperCard>>(); protected final List<List<PaperCard>> deck = new ArrayList<List<PaperCard>>();
protected final ArrayList<DeckColors> playerColors = new ArrayList<DeckColors>(); protected final List<DeckColors> playerColors = new ArrayList<DeckColors>();
// roughly equivalent to 25 ranks in a core set, or 15 ranks in a small set // roughly equivalent to 25 ranks in a core set, or 15 ranks in a small set
private static final double TAKE_BEST_THRESHOLD = 0.1; private static final double TAKE_BEST_THRESHOLD = 0.1;

View File

@@ -61,7 +61,7 @@ import java.util.Map.Entry;
public class SealedCardPoolGenerator { public class SealedCardPoolGenerator {
public static final String FILE_EXT = ".sealed"; public static final String FILE_EXT = ".sealed";
private final ArrayList<IUnOpenedProduct> product = new ArrayList<IUnOpenedProduct>(); private final List<IUnOpenedProduct> product = new ArrayList<IUnOpenedProduct>();
/** The Land set code. */ /** The Land set code. */
private String landSetCode = null; private String landSetCode = null;
@@ -216,7 +216,7 @@ public class SealedCardPoolGenerator {
case Custom: case Custom:
String[] dList; String[] dList;
final ArrayList<CustomLimited> customs = new ArrayList<CustomLimited>(); final List<CustomLimited> customs = new ArrayList<CustomLimited>();
// get list of custom draft files // get list of custom draft files
final File dFolder = new File(ForgeConstants.SEALED_DIR); final File dFolder = new File(ForgeConstants.SEALED_DIR);
@@ -278,9 +278,9 @@ public class SealedCardPoolGenerator {
* *
* @return an ArrayList of the set choices. * @return an ArrayList of the set choices.
*/ */
private static ArrayList<String> getSetCombos(final List<String> setz, final int nPacks) { private static List<String> getSetCombos(final List<String> setz, final int nPacks) {
String[] sets = setz.toArray(ArrayUtils.EMPTY_STRING_ARRAY); String[] sets = setz.toArray(ArrayUtils.EMPTY_STRING_ARRAY);
ArrayList<String> setCombos = new ArrayList<String>(); List<String> setCombos = new ArrayList<String>();
if (nPacks == 3) { if (nPacks == 3) {
if (sets.length >= 2) { if (sets.length >= 2) {

View File

@@ -1,16 +1,17 @@
package forge.limited; package forge.limited;
import java.util.ArrayList;
import java.util.List;
import forge.deck.CardPool; import forge.deck.CardPool;
import forge.item.PaperCard; import forge.item.PaperCard;
import forge.util.MyRandom; import forge.util.MyRandom;
import java.util.ArrayList;
public class WinstonDraftAI extends BoosterDraftAI{ public class WinstonDraftAI extends BoosterDraftAI{
private WinstonDraft draft = null; private WinstonDraft draft = null;
private static final int N_DECKS = 1; private static final int N_DECKS = 1;
private ArrayList<Byte> colorPreference = new ArrayList<>(); private List<Byte> colorPreference = new ArrayList<>();
public WinstonDraft getDraft() { public WinstonDraft getDraft() {
return draft; return draft;

View File

@@ -31,24 +31,33 @@ import forge.util.FCollection;
import forge.util.FCollectionView; import forge.util.FCollectionView;
public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
private FCollectionView<PlayerView> localPlayers = new FCollection<PlayerView>(); private FCollection<PlayerView> localPlayers = new FCollection<PlayerView>();
private PlayerView currentPlayer = null; private PlayerView currentPlayer = null;
protected final void setLocalPlayers(final Iterable<PlayerView> myPlayers) { protected final void setLocalPlayers(final Collection<PlayerView> myPlayers) {
this.localPlayers = myPlayers == null ? new FCollection<PlayerView>() : new FCollection<PlayerView>(myPlayers); this.localPlayers = myPlayers == null ? new FCollection<PlayerView>() : new FCollection<PlayerView>(myPlayers);
this.currentPlayer = Iterables.getFirst(this.localPlayers, null); this.currentPlayer = Iterables.getFirst(this.localPlayers, null);
this.autoPassUntilEndOfTurn.retainAll(myPlayers);
} }
private void addLocalPlayer(final PlayerView player) {
this.localPlayers.add(player);
}
private void removeLocalPlayer(final PlayerView player) {
this.localPlayers.remove(player);
this.autoPassUntilEndOfTurn.remove(player);
}
public final boolean hasLocalPlayers() { public final boolean hasLocalPlayers() {
return localPlayers != null && !localPlayers.isEmpty(); return !localPlayers.isEmpty();
} }
public final FCollectionView<PlayerView> getLocalPlayers() { public final FCollectionView<PlayerView> getLocalPlayers() {
return localPlayers; return localPlayers;
} }
public final int getLocalPlayerCount() { public final int getLocalPlayerCount() {
return localPlayers == null ? 0 : localPlayers.size(); return localPlayers.size();
} }
public final boolean isLocalPlayer(final PlayerView player) { public final boolean isLocalPlayer(final PlayerView player) {
return hasLocalPlayers() && localPlayers.contains(player); return localPlayers.contains(player);
} }
public final PlayerView getCurrentPlayer() { public final PlayerView getCurrentPlayer() {
@@ -83,6 +92,11 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards {
@Override @Override
public void setGameController(final PlayerView player, final IGameController gameController) { public void setGameController(final PlayerView player, final IGameController gameController) {
this.gameControllers.put(player, gameController); this.gameControllers.put(player, gameController);
if (gameController == null) {
addLocalPlayer(player);
} else {
removeLocalPlayer(player);
}
} }
@Override @Override

View File

@@ -247,7 +247,7 @@ public abstract class InputPayMana extends InputSyncronizedBase {
colorNeeded = MagicColor.WHITE; colorNeeded = MagicColor.WHITE;
} }
else { else {
final ArrayList<SpellAbility> colorMatches = new ArrayList<SpellAbility>(); final List<SpellAbility> colorMatches = new ArrayList<SpellAbility>();
for (SpellAbility sa : abilities) { for (SpellAbility sa : abilities) {
if (abilityProducesManaColor(sa, sa.getManaPartRecursive(), colorNeeded)) { if (abilityProducesManaColor(sa, sa.getManaPartRecursive(), colorNeeded)) {
colorMatches.add(sa); colorMatches.add(sa);

View File

@@ -41,7 +41,7 @@ public class UnOpenedMeta implements IUnOpenedProduct {
SelectAll, SelectAll,
} }
private final ArrayList<MetaSet> metaSets; private final List<MetaSet> metaSets;
private final JoinOperation operation; private final JoinOperation operation;
private final Random generator = MyRandom.getRandom(); private final Random generator = MyRandom.getRandom();

Some files were not shown because too many files have changed in this diff Show More