change of Card.getKeywords() return type into List<String>

cleanup in callers of getKeywords - some were calling toString() of String, others used for with counter to iterate.
This commit is contained in:
Maxmtg
2013-02-27 14:40:26 +00:00
parent 222eb23c3b
commit cdea3d3a11
7 changed files with 123 additions and 181 deletions

View File

@@ -2492,7 +2492,7 @@ public class Card extends GameEntity implements Comparable<Card> {
}
// Add Keywords
final ArrayList<String> kw = this.getKeyword();
final List<String> kw = this.getKeyword();
// Triggered abilities
for (final Trigger trig : this.getCharacteristics().getTriggers()) {
@@ -4878,7 +4878,7 @@ public class Card extends GameEntity implements Comparable<Card> {
*
* @return a {@link java.util.ArrayList} object.
*/
public final ArrayList<String> getKeyword() {
public final List<String> getKeyword() {
final ArrayList<String> keywords = this.getUnhiddenKeyword();
keywords.addAll(this.getHiddenExtrinsicKeyword());
@@ -5978,7 +5978,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* @return a boolean.
*/
public final boolean hasStartOfKeyword(final String keyword) {
final ArrayList<String> a = this.getKeyword();
final List<String> a = this.getKeyword();
for (int i = 0; i < a.size(); i++) {
if (a.get(i).toString().startsWith(keyword)) {
return true;
@@ -6016,7 +6016,7 @@ public class Card extends GameEntity implements Comparable<Card> {
* @return a int.
*/
public final int getKeywordPosition(final String k) {
final ArrayList<String> a = this.getKeyword();
final List<String> a = this.getKeyword();
for (int i = 0; i < a.size(); i++) {
if (a.get(i).toString().startsWith(k)) {
return i;
@@ -6097,8 +6097,7 @@ public class Card extends GameEntity implements Comparable<Card> {
*/
public final int getKeywordMagnitude(final String k) {
int count = 0;
final ArrayList<String> keywords = this.getKeyword();
for (final String kw : keywords) {
for (final String kw : this.getKeyword()) {
if (kw.startsWith(k)) {
final String[] parse = kw.split(" ");
final String s = parse[1];
@@ -8691,7 +8690,7 @@ public class Card extends GameEntity implements Comparable<Card> {
}
if (this.getKeyword() != null) {
final ArrayList<String> list = this.getKeyword();
final List<String> list = this.getKeyword();
String kw = "";
for (int i = 0; i < list.size(); i++) {
@@ -8829,12 +8828,9 @@ public class Card extends GameEntity implements Comparable<Card> {
}
if (this.getKeyword() != null) {
final ArrayList<String> list = this.getKeyword();
final Card source = sa.getSourceCard();
String kw = "";
for (int i = 0; i < list.size(); i++) {
kw = list.get(i);
for (String kw : this.getKeyword()) {
if (kw.equals("Shroud")) {
return false;
}

View File

@@ -750,21 +750,26 @@ public class CardFactoryCreatures {
// end of card specific code
// ***************************************************
if ((CardFactoryCreatures.hasKeyword(card, "Level up") != -1)
&& (CardFactoryCreatures.hasKeyword(card, "maxLevel") != -1)) {
final int n = CardFactoryCreatures.hasKeyword(card, "Level up");
final int m = CardFactoryCreatures.hasKeyword(card, "maxLevel");
if (n != -1) {
final String parse = card.getKeyword().get(n).toString();
final String parseMax = card.getKeyword().get(m).toString();
final int iLvlUp = CardFactoryUtil.hasKeyword(card, "Level up");
final int iLvlMax = CardFactoryUtil.hasKeyword(card, "maxLevel");
card.removeIntrinsicKeyword(parse);
card.removeIntrinsicKeyword(parseMax);
if (iLvlUp != -1 && iLvlMax != -1) {
final String parse = card.getKeyword().get(iLvlUp);
final String parseMax = card.getKeyword().get(iLvlMax);
card.addSpellAbility(makeLevellerAbility(card, parse, parseMax));
card.setLevelUp(true);
} // level up
}
final String[] k = parse.split(":");
private static SpellAbility makeLevellerAbility(final Card card, final String strLevelCost, final String strMaxLevel) {
card.removeIntrinsicKeyword(strLevelCost);
card.removeIntrinsicKeyword(strMaxLevel);
final String[] k = strLevelCost.split(":");
final String manacost = k[1];
final String[] l = parseMax.split(":");
final String[] l = strMaxLevel.split(":");
final int maxLevel = Integer.parseInt(l[1]);
class LevelUpAbility extends AbilityActivated {
@@ -802,37 +807,9 @@ public class CardFactoryCreatures {
}
final SpellAbility levelUp = new LevelUpAbility(card, manacost);
levelUp.getRestrictions().setSorcerySpeed(true);
card.addSpellAbility(levelUp);
final StringBuilder sbStack = new StringBuilder();
sbStack.append(card).append(" - put a level counter on this.");
levelUp.setStackDescription(sbStack.toString());
card.setLevelUp(true);
}
} // level up
}
/**
* <p>
* hasKeyword.
* </p>
*
* @param c
* a {@link forge.Card} object.
* @param k
* a {@link java.lang.String} object.
* @return a int.
*/
private static int hasKeyword(final Card c, final String k) {
final ArrayList<String> a = c.getKeyword();
for (int i = 0; i < a.size(); i++) {
if (a.get(i).toString().startsWith(k)) {
return i;
}
}
return -1;
return levelUp;
}
}

View File

@@ -40,7 +40,6 @@ import forge.CounterType;
import forge.GameEntity;
import forge.Singletons;
import forge.card.CardCharacteristics;
import forge.card.MagicColor;
import forge.card.ability.AbilityFactory;
import forge.card.ability.AbilityUtils;
import forge.card.ability.ApiType;
@@ -1822,9 +1821,8 @@ public class CardFactoryUtil {
// Count$BushidoPoint
if (sq[0].contains("BushidoPoint")) {
final ArrayList<String> keywords = c.getKeyword();
int magnitude = 0;
for (final String kw : keywords) {
for (final String kw : c.getKeyword()) {
if (kw.contains("Bushido")) {
final String[] parse = kw.split(" ");
final String num = parse[1];
@@ -2528,12 +2526,11 @@ public class CardFactoryUtil {
* @return a {@link java.util.ArrayList} object.
*/
public static ArrayList<Ability> getBushidoEffects(final Card c) {
final ArrayList<String> keywords = c.getKeyword();
final ArrayList<Ability> list = new ArrayList<Ability>();
final Card crd = c;
for (final String kw : keywords) {
for (final String kw : c.getKeyword()) {
if (kw.contains("Bushido")) {
final String[] parse = kw.split(" ");
final String s = parse[1];
@@ -2862,11 +2859,9 @@ public class CardFactoryUtil {
if (CardFactoryUtil.hasKeyword(card, "Transmute") != -1) {
final int n = CardFactoryUtil.hasKeyword(card, "Transmute");
if (n != -1) {
final String parse = card.getKeyword().get(n).toString();
final String parse = card.getKeyword().get(n);
card.removeIntrinsicKeyword(parse);
final String[] k = parse.split(":");
final String manacost = k[1];
final String manacost = parse.split(":")[1];
card.addSpellAbility(CardFactoryUtil.abilityTransmute(card, manacost));
}
@@ -2895,8 +2890,7 @@ public class CardFactoryUtil {
final int echoPos = CardFactoryUtil.hasKeyword(card, "Echo");
if (echoPos != -1) {
// card.removeIntrinsicKeyword(parse);
final String parse = card.getKeyword().get(echoPos);
final String[] k = parse.split(":");
final String[] k = card.getKeyword().get(echoPos).split(":");
final String manacost = k[1];
card.setEchoCost(manacost);
@@ -2918,7 +2912,7 @@ public class CardFactoryUtil {
// Suspend:<TimeCounters>:<Cost>
final int n = CardFactoryUtil.hasKeyword(card, "Suspend");
if (n != -1) {
final String parse = card.getKeyword().get(n).toString();
final String parse = card.getKeyword().get(n);
card.removeIntrinsicKeyword(parse);
card.setSuspend(true);
final String[] k = parse.split(":");
@@ -2939,9 +2933,7 @@ public class CardFactoryUtil {
if (CardFactoryUtil.hasKeyword(card, "Fading") != -1) {
final int n = CardFactoryUtil.hasKeyword(card, "Fading");
if (n != -1) {
final String parse = card.getKeyword().get(n).toString();
final String[] k = parse.split(":");
final String[] k = card.getKeyword().get(n).split(":");
final int power = Integer.parseInt(k[1]);
card.addComesIntoPlayCommand(CardFactoryUtil.fading(card, power));
@@ -2951,9 +2943,7 @@ public class CardFactoryUtil {
if (CardFactoryUtil.hasKeyword(card, "Vanishing") != -1) {
final int n = CardFactoryUtil.hasKeyword(card, "Vanishing");
if (n != -1) {
final String parse = card.getKeyword().get(n).toString();
final String[] k = parse.split(":");
final String[] k = card.getKeyword().get(n).split(":");
final int power = Integer.parseInt(k[1]);
card.addComesIntoPlayCommand(CardFactoryUtil.vanishing(card, power));
@@ -3591,7 +3581,7 @@ public class CardFactoryUtil {
* @return a int.
*/
public static final int hasKeyword(final Card c, final String k) {
final ArrayList<String> a = c.getKeyword();
final List<String> a = c.getKeyword();
for (int i = 0; i < a.size(); i++) {
if (a.get(i).startsWith(k)) {
return i;
@@ -3615,7 +3605,7 @@ public class CardFactoryUtil {
* @return a int.
*/
static final int hasKeyword(final Card c, final String k, final int startPos) {
final ArrayList<String> a = c.getKeyword();
final List<String> a = c.getKeyword();
for (int i = startPos; i < a.size(); i++) {
if (a.get(i).startsWith(k)) {
return i;

View File

@@ -121,10 +121,7 @@ public class InputMulligan extends Input {
for (final Card c : openingHand) {
if (p.isHuman()) {
final ArrayList<String> kws = c.getKeyword();
for (int i = 0; i < kws.size(); i++) {
final String kw = kws.get(i);
for (String kw : c.getKeyword()) {
if (kw.startsWith("MayEffectFromOpeningHand")) {
final String effName = kw.split(":")[1];
@@ -143,10 +140,7 @@ public class InputMulligan extends Input {
}
} else { // Computer Leylines & Chancellors
if (!c.getName().startsWith("Leyline of")) {
final ArrayList<String> kws = c.getKeyword();
for (int i = 0; i < kws.size(); i++) {
final String kw = kws.get(i);
for (String kw : c.getKeyword()) {
if (kw.startsWith("MayEffectFromOpeningHand")) {
final String effName = kw.split(":")[1];

View File

@@ -333,7 +333,7 @@ public final class GameActionUtil {
c.addExtrinsicKeyword("Ripple:4");
}
final ArrayList<String> a = c.getKeyword();
final List<String> a = c.getKeyword();
for (int x = 0; x < a.size(); x++) {
if (a.get(x).toString().startsWith("Ripple")) {
final String parse = c.getKeyword().get(x).toString();
@@ -713,16 +713,14 @@ public final class GameActionUtil {
* a {@link forge.Card} object.
*/
public static void executeVampiricEffects(final Card c) {
final ArrayList<String> a = c.getKeyword();
for (int i = 0; i < a.size(); i++) {
if (c.isInPlay()
&& a.get(i)
.toString()
.startsWith(
"Whenever a creature dealt damage by CARDNAME "
+ "this turn is put into a graveyard, put")) {
if (!c.isInPlay()) return;
for (final String kw : c.getKeyword()) {
if(!kw.startsWith("Whenever a creature dealt damage by CARDNAME this turn is put into a graveyard, put")) {
continue;
}
final Card thisCard = c;
final String kw = a.get(i).toString();
final Ability ability2 = new Ability(c, ManaCost.ZERO) {
@Override
public void resolve() {
@@ -749,7 +747,6 @@ public final class GameActionUtil {
}
}
}
// not restricted to just combat damage, restricted to players
/**
@@ -823,13 +820,11 @@ public final class GameActionUtil {
sb.append(".");
ability.setStackDescription(sb.toString());
final ArrayList<String> keywords = c.getKeyword();
for (int i = 0; i < keywords.size(); i++) {
if (keywords.get(i).startsWith("Poisonous")) {
for (String kw : c.getKeyword()) {
if (kw.startsWith("Poisonous")) {
Singletons.getModel().getGame().getStack().addSimultaneousStackEntry(ability);
}
}
}

View File

@@ -880,36 +880,32 @@ public class CombatUtil {
// CARDNAME can't attack if defending player controls an untapped
// creature with power ...
final int[] powerLimit = { 0 };
int keywordPosition = 0;
boolean hasKeyword = false;
String cantAttackKw = null;
final ArrayList<String> attackerKeywords = c.getKeyword();
for (int i = 0; i < attackerKeywords.size(); i++) {
if (attackerKeywords.get(i).toString()
.startsWith("CARDNAME can't attack if defending player controls an untapped creature with power")) {
hasKeyword = true;
keywordPosition = i;
for( String kw : c.getKeyword()) {
if (kw.startsWith("CARDNAME can't attack if defending player controls an untapped creature with power")) {
cantAttackKw = kw;
}
}
// The keyword
// "CARDNAME can't attack if defending player controls an untapped creature with power"
// ... is present
if (hasKeyword) {
final String tmpString = c.getKeyword().get(keywordPosition).toString();
final String[] asSeparateWords = tmpString.trim().split(" ");
if (cantAttackKw != null) {
final String[] asSeparateWords = cantAttackKw.trim().split(" ");
if (asSeparateWords.length >= 15) {
if (asSeparateWords[12].matches("[0-9][0-9]?")) {
if (StringUtils.isNumeric(asSeparateWords[12])) {
powerLimit[0] = Integer.parseInt((asSeparateWords[12]).trim());
List<Card> list = defendingPlayer.getCreaturesInPlay();
list = CardLists.filter(list, new Predicate<Card>() {
@Override
public boolean apply(final Card ct) {
return ((ct.isUntapped() && (ct.getNetAttack() >= powerLimit[0]) && asSeparateWords[14]
.contains("greater")) || (ct.isUntapped() && (ct.getNetAttack() <= powerLimit[0]) && asSeparateWords[14]
.contains("less")));
return (ct.isUntapped()
&& ((ct.getNetAttack() >= powerLimit[0] && asSeparateWords[14].contains("greater"))
|| (ct.getNetAttack() <= powerLimit[0] && asSeparateWords[14].contains("less"))));
}
});
if (!list.isEmpty()) {
@@ -1247,8 +1243,7 @@ public class CombatUtil {
// Annihilator:
if (!c.getDamageHistory().getCreatureAttackedThisCombat()) {
final ArrayList<String> kws = c.getKeyword();
for (final String key : kws) {
for (final String key : c.getKeyword()) {
if( !key.startsWith("Annihilator ") ) continue;
final String[] k = key.split(" ", 2);
final int a = Integer.valueOf(k[1]);
@@ -1419,7 +1414,7 @@ public class CombatUtil {
}
// Rampage
final ArrayList<String> keywords = a.getKeyword();
final List<String> keywords = a.getKeyword();
final Pattern p = Pattern.compile("Rampage [0-9]+");
Matcher m;
for (final String keyword : keywords) {
@@ -1437,11 +1432,8 @@ public class CombatUtil {
if (a.hasKeyword("Flanking") && !b.hasKeyword("Flanking")) {
int flankingMagnitude = 0;
String kw = "";
final ArrayList<String> list = a.getKeyword();
for (int i = 0; i < list.size(); i++) {
kw = list.get(i);
for (String kw : a.getKeyword()) {
if (kw.equals("Flanking")) {
flankingMagnitude++;
}

View File

@@ -268,9 +268,7 @@ public class Upkeep extends Phase {
for (int i = 0; i < list.size(); i++) {
final Card c = list.get(i);
final Player controller = c.getController();
final ArrayList<String> a = c.getKeyword();
for (int j = 0; j < a.size(); j++) {
final String ability = a.get(j);
for (String ability : c.getKeyword()) {
// destroy
if (ability.startsWith("At the beginning of your upkeep, destroy CARDNAME")) {