diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index ae5ca2ada4b..7af67cf8f38 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -38,7 +38,6 @@ import forge.CardPredicates.Presets; import forge.card.CardCharacteristics; import forge.card.CardRarity; import forge.card.CardRules; -import forge.card.CardSplitType; import forge.card.ability.AbilityUtils; import forge.card.ability.ApiType; import forge.card.cardfactory.CardFactoryUtil; @@ -89,10 +88,6 @@ public class Card extends GameEntity implements Comparable { private CardCharacteristicName curCharacteristics = CardCharacteristicName.Original; private CardCharacteristicName preTFDCharacteristic = CardCharacteristicName.Original; - private boolean isDoubleFaced = false; - private boolean isFlipCard = false; - private CardCharacteristicName otherTransformable = null; - private ZoneType castFrom = null; private final CardDamageHistory damageHistory = new CardDamageHistory(); @@ -141,7 +136,6 @@ public class Card extends GameEntity implements Comparable { private boolean copiedToken = false; private boolean copiedSpell = false; private boolean spellWithChoices = false; - private boolean spellCopyingCard = false; private ArrayList mustBlockCards = null; @@ -288,7 +282,7 @@ public class Card extends GameEntity implements Comparable { * @return true, if successful */ public boolean setState(final CardCharacteristicName state) { - if (state == CardCharacteristicName.FaceDown && this.isDoubleFaced) { + if (state == CardCharacteristicName.FaceDown && this.isDoubleFaced()) { return false; // Doublefaced cards can't be turned face-down. } @@ -358,7 +352,7 @@ public class Card extends GameEntity implements Comparable { * @return true, if successful */ public boolean turnFaceDown() { - if (!this.isDoubleFaced) { + if (!this.isDoubleFaced()) { this.preTFDCharacteristic = this.curCharacteristics; return this.setState(CardCharacteristicName.FaceDown); } @@ -392,20 +386,6 @@ public class Card extends GameEntity implements Comparable { return false; } - /** - * Checks if is cloned. - * - * @return true, if is cloned - */ - public boolean isCloned() { - for (final CardCharacteristicName state : this.characteristicsMap.keySet()) { - if (state == CardCharacteristicName.Cloner) { - return true; - } - } - return false; - } - /** * Gets the state. * @@ -477,76 +457,25 @@ public class Card extends GameEntity implements Comparable { return this.characteristicsMap.keySet().size() > 2; } - /** - * Checks if is double faced. - * - * @return the isDoubleFaced - */ public final boolean isDoubleFaced() { - return this.isDoubleFaced; + return characteristicsMap.containsKey(CardCharacteristicName.Transformed); } - /** - * Sets the double faced. - * - * @param isDoubleFaced0 - * the isDoubleFaced to set - */ - public final void setDoubleFaced(final boolean isDoubleFaced0) { - this.isDoubleFaced = isDoubleFaced0; - } - - /** - * Checks if is flip card. - * - * @return the isFlipCard - */ public final boolean isFlipCard() { - return this.isFlipCard; + return characteristicsMap.containsKey(CardCharacteristicName.Flipped); } public final boolean isSplitCard() { - return cardRules != null && cardRules.getSplitType() == CardSplitType.Split; + return characteristicsMap.containsKey(CardCharacteristicName.LeftSplit); } /** - * Sets the flip card. + * Checks if is cloned. * - * @param isFlip0 - * the isFlip to set + * @return true, if is cloned */ - public final void setFlipCard(final boolean isFlip0) { - this.isFlipCard = isFlip0; - } - - /** - * - * Checks if card status is flipped. - * - * @return the flipped - */ - public final boolean isFlipped() { - return curCharacteristics == CardCharacteristicName.Flipped; - } - - /** - * Checks if this is transformable (i.e. Licids.) - * - * @return a boolean - */ - public final CardCharacteristicName isTransformable() { - return this.otherTransformable; - } - - /** - * Sets whether or not this card is transformable, but non-flip and not - * double-faced. - * - * @param otherTransformable0 - * a String - */ - public final void setTransformable(final CardCharacteristicName otherTransformable0) { - this.otherTransformable = otherTransformable0; + public boolean isCloned() { + return characteristicsMap.containsKey(CardCharacteristicName.Cloner); } /** @@ -2390,9 +2319,8 @@ public class Card extends GameEntity implements Comparable { } final ArrayList addedManaStrings = new ArrayList(); - final SpellAbility[] abilities = this.getSpellAbility(); boolean primaryCost = true; - for (final SpellAbility sa : abilities) { + for (final SpellAbility sa : this.getSpellAbilities()) { // only add abilities not Spell portions of cards if (!this.isPermanent()) { continue; @@ -2465,8 +2393,7 @@ public class Card extends GameEntity implements Comparable { } // Add SpellAbilities - final SpellAbility[] sa = this.getSpellAbility(); - for (final SpellAbility element : sa) { + for (final SpellAbility element : this.getSpellAbilities()) { sb.append(element.toString() + "\r\n"); } @@ -2681,23 +2608,10 @@ public class Card extends GameEntity implements Comparable { * @return a SpellAbility object. */ public final SpellAbility getFirstSpellAbility() { - final ArrayList sas = this.getCharacteristics().getSpellAbility(); - if (!sas.isEmpty()) { - return sas.get(0); - } - - return null; + final List sas = this.getCharacteristics().getSpellAbility(); + return sas.isEmpty() ? null : sas.get(0); } - /** - *

- * clearSpellAbility. - *

- */ - public final void clearSpellAbility() { - this.getCharacteristics().getSpellAbility().clear(); - this.getCharacteristics().getManaAbility().clear(); - } /** *

@@ -2715,15 +2629,6 @@ public class Card extends GameEntity implements Comparable { return null; } - /** - *

- * clearSpellKeepManaAbility. - *

- */ - public final void clearSpellKeepManaAbility() { - this.getCharacteristics().getSpellAbility().clear(); - } - /** *

* addSpellAbility. @@ -2761,20 +2666,6 @@ public class Card extends GameEntity implements Comparable { } } - /** - *

- * Getter for the field spellAbility. - *

- * - * @return an array of {@link forge.card.spellability.SpellAbility} objects. - */ - public final SpellAbility[] getSpellAbility() { - final ArrayList res = getSpellAbilities(); - final SpellAbility[] s = new SpellAbility[res.size()]; - res.toArray(s); - return s; - } - /** *

* getSpellAbilities. @@ -2795,7 +2686,7 @@ public class Card extends GameEntity implements Comparable { * * @return a {@link java.util.ArrayList} object. */ - public final ArrayList getNonManaSpellAbilities() { + public final List getNonManaSpellAbilities() { return this.getCharacteristics().getSpellAbility(); } @@ -2853,18 +2744,6 @@ public class Card extends GameEntity implements Comparable { } // shield = regeneration - /** - *

- * setShield. - *

- * - * @param n - * a int. - */ - public final void setShield(final int n) { - this.nShield = n; - } - /** *

* getShield. @@ -3033,29 +2912,6 @@ public class Card extends GameEntity implements Comparable { return this.spellWithChoices; } - /** - *

- * setCopiesSpells. - *

- * - * @param b - * a boolean. - */ - public final void setCopiesSpells(final boolean b) { - this.spellCopyingCard = b; - } - - /** - *

- * copiesSpells. - *

- * - * @return a boolean. - */ - public final boolean copiesSpells() { - return this.spellCopyingCard; - } - /** *

* isFaceDown. @@ -5194,204 +5050,36 @@ public class Card extends GameEntity implements Comparable { return stAb; } - /** - *

- * isPermanent. - *

- * - * @return a boolean. - */ public final boolean isPermanent() { return !(this.isInstant() || this.isSorcery() || this.isImmutable()); } - /** - *

- * isSpell. - *

- * - * @return a boolean. - */ public final boolean isSpell() { return (this.isInstant() || this.isSorcery() || (this.isAura() && !this.isInZone((ZoneType.Battlefield)))); } - /** - *

- * isCreature. - *

- * - * @return a boolean. - */ - public final boolean isCreature() { - return this.typeContains("Creature"); - } + public final boolean isEmblem() { return this.typeContains("Emblem"); } - /** - *

- * isWall. - *

- * - * @return a boolean. - */ - public final boolean isWall() { - return this.typeContains("Wall"); - } + public final boolean isLand() { return this.typeContains("Land"); } + public final boolean isBasicLand() { return this.typeContains("Basic"); } + public final boolean isSnow() { return this.typeContains("Snow"); } - /** - *

- * isBasicLand. - *

- * - * @return a boolean. - */ - public final boolean isBasicLand() { - return this.typeContains("Basic"); - } + public final boolean isTribal() { return this.typeContains("Tribal"); } + public final boolean isSorcery() { return this.typeContains("Sorcery"); } + public final boolean isInstant() { return this.typeContains("Instant"); } - /** - *

- * isLand. - *

- * - * @return a boolean. - */ - public final boolean isLand() { - return this.typeContains("Land"); - } + public final boolean isCreature() { return this.typeContains("Creature"); } + public final boolean isArtifact() { return this.typeContains("Artifact"); } + public final boolean isEquipment() { return this.typeContains("Equipment"); } + public final boolean isScheme() { return this.typeContains("Scheme"); } + - /** - *

- * isSorcery. - *

- * - * @return a boolean. - */ - public final boolean isSorcery() { - return this.typeContains("Sorcery"); - } + public final boolean isPlaneswalker() { return this.typeContains("Planeswalker"); } - /** - *

- * isInstant. - *

- * - * @return a boolean. - */ - public final boolean isInstant() { - return this.typeContains("Instant"); - } + public final boolean isEnchantment() { return this.typeContains("Enchantment"); } + public final boolean isAura() { return this.typeContains("Aura"); } - /** - *

- * isArtifact. - *

- * - * @return a boolean. - */ - public final boolean isArtifact() { - return this.typeContains("Artifact"); - } - /** - *

- * isEquipment. - *

- * - * @return a boolean. - */ - public final boolean isEquipment() { - return this.typeContains("Equipment"); - } - - /** - *

- * isScheme. - *

- * - * @return a boolean. - */ - public final boolean isScheme() { - return this.typeContains("Scheme"); - } - - /** - *

- * isPlaneswalker. - *

- * - * @return a boolean. - */ - public final boolean isPlaneswalker() { - return this.typeContains("Planeswalker"); - } - - /** - *

- * isEmblem. - *

- * - * @return a boolean. - */ - public final boolean isEmblem() { - return this.typeContains("Emblem"); - } - - /** - *

- * isTribal. - *

- * - * @return a boolean. - */ - public final boolean isTribal() { - return this.typeContains("Tribal"); - } - - /** - *

- * isSnow. - *

- * - * @return a boolean. - */ - public final boolean isSnow() { - return this.typeContains("Snow"); - } - - // global and local enchantments - /** - *

- * isEnchantment. - *

- * - * @return a boolean. - */ - public final boolean isEnchantment() { - return this.typeContains("Enchantment"); - } - - /** - *

- * isAura. - *

- * - * @return a boolean. - */ - public final boolean isAura() { - return this.typeContains("Aura"); - } - - /** - *

- * isGlobalEnchantment. - *

- * - * @return a boolean. - */ - public final boolean isGlobalEnchantment() { - return this.typeContains("Enchantment") && (!this.isAura()); - } private boolean typeContains(final String s) { final Iterator it = this.getType().iterator(); @@ -6115,11 +5803,11 @@ public class Card extends GameEntity implements Comparable { return false; } } else if (property.equals("DoubleFaced")) { - if (!this.isDoubleFaced) { + if (!this.isDoubleFaced()) { return false; } } else if (property.equals("Flip")) { - if (!this.isFlipCard) { + if (!this.isFlipCard()) { return false; } } else if (property.startsWith("YouCtrl")) { @@ -7002,10 +6690,9 @@ public class Card extends GameEntity implements Comparable { return false; } } else if (property.startsWith("hasXCost")) { - if (this.getSpellAbility().length > 0) { - if (!this.getSpellAbility()[0].isXCost()) { - return false; - } + SpellAbility sa1 = this.getFirstSpellAbility(); + if( sa1 != null && !sa1.isXCost()) { + return false; } } else if (property.startsWith("suspended")) { if (!this.hasSuspend() || !Singletons.getModel().getGame().isCardExiled(this) diff --git a/src/main/java/forge/CardUtil.java b/src/main/java/forge/CardUtil.java index 46831013b75..00d64ef6e2d 100644 --- a/src/main/java/forge/CardUtil.java +++ b/src/main/java/forge/CardUtil.java @@ -138,9 +138,7 @@ public final class CardUtil { newCopy.setCurSetCode(in.getCurSetCode()); newCopy.setOwner(in.getOwner()); newCopy.setController(in.getController(), 0); - newCopy.setFlipCard(in.isFlipCard()); - newCopy.setDoubleFaced(in.isDoubleFaced()); - newCopy.getCharacteristics().copy(in.getState(in.getCurState())); + newCopy.getCharacteristics().copyFrom(in.getState(in.getCurState())); newCopy.setBaseAttack(in.getNetAttack()); newCopy.setBaseDefense(in.getNetDefense()); newCopy.setType(new ArrayList(in.getType())); diff --git a/src/main/java/forge/StaticEffects.java b/src/main/java/forge/StaticEffects.java index c7dc9ab4b45..3b0c07052ac 100644 --- a/src/main/java/forge/StaticEffects.java +++ b/src/main/java/forge/StaticEffects.java @@ -223,8 +223,7 @@ public class StaticEffects { // remove abilities if (params.containsKey("AddAbility") || params.containsKey("GainsAbilitiesOf")) { - final SpellAbility[] spellAbility = affectedCard.getSpellAbility(); - for (final SpellAbility s : spellAbility) { + for (final SpellAbility s : affectedCard.getSpellAbilities()) { if (s.getType().equals("Temporary")) { affectedCard.removeSpellAbility(s); } diff --git a/src/main/java/forge/card/CardCharacteristics.java b/src/main/java/forge/card/CardCharacteristics.java index fc7aef06ef0..f587dddca46 100644 --- a/src/main/java/forge/card/CardCharacteristics.java +++ b/src/main/java/forge/card/CardCharacteristics.java @@ -43,7 +43,7 @@ public class CardCharacteristics { private int baseAttack = 0; private int baseDefense = 0; private ArrayList intrinsicKeyword = new ArrayList(); - private final ArrayList spellAbility = new ArrayList(); + private final List spellAbility = new ArrayList(); private final List manaAbility = new ArrayList(); private ArrayList intrinsicAbility = new ArrayList(); private ArrayList triggers = new ArrayList(); @@ -203,7 +203,7 @@ public class CardCharacteristics { * * @return the spellAbility */ - public final ArrayList getSpellAbility() { + public final List getSpellAbility() { return this.spellAbility; } @@ -388,7 +388,7 @@ public class CardCharacteristics { * @param source * a Map object. */ - public final void copy(final CardCharacteristics source) { + public final void copyFrom(final CardCharacteristics source) { // Makes a "deeper" copy of a CardCharacteristics object // String name : just copy reference diff --git a/src/main/java/forge/card/ability/AbilityFactory.java b/src/main/java/forge/card/ability/AbilityFactory.java index 8654b1dc78a..a8d1cd12b37 100644 --- a/src/main/java/forge/card/ability/AbilityFactory.java +++ b/src/main/java/forge/card/ability/AbilityFactory.java @@ -126,17 +126,8 @@ public final class AbilityFactory { Target abTgt = mapParams.containsKey("ValidTgts") ? readTarget(hostCard, mapParams) : null; - - if (api == ApiType.CopySpellAbility) { - if (abTgt != null) { - // Since all "CopySpell" ABs copy things on the Stack no need for it to be everywhere - abTgt.setZone(ZoneType.Stack); - } - - hostCard.setCopiesSpells(true); - } - - else if (api == ApiType.Counter || api == ApiType.ChangeTargets) { + if (api == ApiType.CopySpellAbility || api == ApiType.Counter || api == ApiType.ChangeTargets) { + // Since all "CopySpell" ABs copy things on the Stack no need for it to be everywhere // Since all "Counter" or "ChangeTargets" abilities only target the Stack Zone // No need to have each of those scripts have that info if (abTgt != null) { diff --git a/src/main/java/forge/card/ability/effects/CloneEffect.java b/src/main/java/forge/card/ability/effects/CloneEffect.java index 7f099890a20..8410a7e74a3 100644 --- a/src/main/java/forge/card/ability/effects/CloneEffect.java +++ b/src/main/java/forge/card/ability/effects/CloneEffect.java @@ -159,15 +159,12 @@ public class CloneEffect extends SpellAbilityEffect { if (keepName) { tgtCard.setName(originalName); } - tgtCard.setFlipCard(true); //keep the Clone card image for the cloned card tgtCard.setImageKey(imageFileName); - if (!tgtCard.isFlipped()) { + if (tgtCard.getCurState() != CardCharacteristicName.Flipped) { tgtCard.setState(CardCharacteristicName.Original); } - } else { - tgtCard.setFlipCard(false); } //Clean up copy of cloned state diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index a2542224c18..181e2349fa9 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -358,17 +358,9 @@ public class CardFactory { // 1. The states we may have: CardSplitType st = rules.getSplitType(); - switch ( st ) { - case Split: - card.addAlternateState(CardCharacteristicName.LeftSplit); - card.setState(CardCharacteristicName.LeftSplit); - break; - - case Transform: card.setDoubleFaced(true);break; - case Flip: card.setFlipCard(true); break; - case None: break; - - default: card.setTransformable(st.getChangedStateName()); break; + if ( st == CardSplitType.Split) { + card.addAlternateState(CardCharacteristicName.LeftSplit); + card.setState(CardCharacteristicName.LeftSplit); } readCardFace(card, rules.getMainPart()); @@ -458,8 +450,6 @@ public class CardFactory { public static Card copyStats(final Card sim) { final Card c = new Card(); - c.setFlipCard(sim.isFlipCard()); - c.setDoubleFaced(sim.isDoubleFaced()); c.setCurSetCode(sim.getCurSetCode()); final CardCharacteristicName origState = sim.getCurState(); @@ -527,7 +517,7 @@ public class CardFactory { // get CardCharacteristics for desired state CardCharacteristics characteristics = from.getState(stateToCopy); - to.getCharacteristics().copy(characteristics); + to.getCharacteristics().copyFrom(characteristics); // handle triggers and replacement effect through Card class interface to.setTriggers(characteristics.getTriggers()); to.setReplacementEffects(characteristics.getReplacementEffects()); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java index 45c63757f9d..f3404f35de6 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryCreatures.java @@ -394,10 +394,6 @@ public class CardFactoryCreatures { } private static void getCard_SurturedGhoul(final Card card) { - final int[] numCreatures = new int[1]; - final int[] sumPower = new int[1]; - final int[] sumToughness = new int[1]; - final Command intoPlay = new Command() { private static final long serialVersionUID = -75234586897814L; @@ -406,8 +402,7 @@ public class CardFactoryCreatures { int intermSumPower = 0; int intermSumToughness = 0; // intermSumPower = intermSumToughness = 0; - List creats = - CardLists.filter(card.getController().getCardsIn(ZoneType.Graveyard), new Predicate() { + List creats = CardLists.filter(card.getController().getCardsIn(ZoneType.Graveyard), new Predicate() { @Override public boolean apply(final Card c) { return c.isCreature() && !c.equals(card); @@ -415,10 +410,9 @@ public class CardFactoryCreatures { }); if (card.getController().isHuman()) { - if (creats.size() > 0) { - final List selection = GuiChoose.noneOrMany("Select creatures to sacrifice", creats); + if (!creats.isEmpty()) { + final List selection = GuiChoose.noneOrMany("Select creatures to exile", creats); - numCreatures[0] = selection.size(); for (int m = 0; m < selection.size(); m++) { intermSumPower += selection.get(m).getBaseAttack(); intermSumToughness += selection.get(m).getBaseDefense(); @@ -428,24 +422,19 @@ public class CardFactoryCreatures { } // human else { - int count = 0; for (int i = 0; i < creats.size(); i++) { final Card c = creats.get(i); if ((c.getNetAttack() <= 2) && (c.getNetDefense() <= 3)) { intermSumPower += c.getBaseAttack(); intermSumToughness += c.getBaseDefense(); Singletons.getModel().getGame().getAction().exile(c); - count++; } // is this needed? card.getController().getZone(ZoneType.Battlefield).updateObservers(); } - numCreatures[0] = count; } - sumPower[0] = intermSumPower; - sumToughness[0] = intermSumToughness; - card.setBaseAttack(sumPower[0]); - card.setBaseDefense(sumToughness[0]); + card.setBaseAttack(intermSumPower); + card.setBaseDefense(intermSumToughness); } }; // Do not remove SpellAbilities created by AbilityFactory or diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index 7cc043bf92c..f750b1eae8f 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -184,7 +184,7 @@ public class CardFactoryUtil { } }; - morphDown.setManaCost(new ManaCost(new ManaCostParser("3"))); + morphDown.setManaCost(ManaCost.THREE); morphDown.setDescription("(You may cast this face down as a 2/2 creature for 3.)"); morphDown.setStackDescription("Morph - Creature 2/2"); morphDown.setCastFaceDown(true); @@ -800,7 +800,7 @@ public class CardFactoryUtil { return true; } - for (final SpellAbility sa : c.getSpellAbility()) { + for (final SpellAbility sa : c.getSpellAbilities()) { final ZoneType restrictZone = sa.getRestrictions().getZone(); if (zone.is(restrictZone)) { return true; @@ -2397,7 +2397,7 @@ public class CardFactoryUtil { final String parse = card.getKeyword().get(n).toString(); final String[] k = parse.split("kicker "); - final SpellAbility sa = card.getSpellAbility()[0]; + final SpellAbility sa = card.getFirstSpellAbility(); sa.setMultiKickerManaCost(new ManaCost(new ManaCostParser(k[1]))); } } @@ -2408,7 +2408,7 @@ public class CardFactoryUtil { final String parse = card.getKeyword().get(n).toString(); final String[] k = parse.split("cate "); - final SpellAbility sa = card.getSpellAbility()[0]; + final SpellAbility sa = card.getFirstSpellAbility(); sa.setIsReplicate(true); sa.setReplicateManaCost(new ManaCost(new ManaCostParser(k[1]))); } @@ -2583,19 +2583,19 @@ public class CardFactoryUtil { // AddCost if (!card.getSVar("FullCost").equals("")) { - final SpellAbility[] abilities = card.getSpellAbility(); - if ((abilities.length > 0) && abilities[0].isSpell()) { + final SpellAbility sa1 = card.getFirstSpellAbility(); + if (sa1 != null && sa1.isSpell()) { final String altCost = card.getSVar("FullCost"); - final Cost abCost = new Cost(card, altCost, abilities[0].isAbility()); - abilities[0].setPayCosts(abCost); + final Cost abCost = new Cost(card, altCost, sa1.isAbility()); + sa1.setPayCosts(abCost); } } // AltCost if (!card.getSVar("AltCost").equals("")) { - final SpellAbility[] abilities = card.getSpellAbility(); - if ((abilities.length > 0) && abilities[0].isSpell()) { - card.addSpellAbility(makeAltCost(card, abilities[0])); + final SpellAbility sa1 = card.getFirstSpellAbility(); + if (sa1 != null && sa1.isSpell()) { + card.addSpellAbility(makeAltCost(card, sa1)); } } diff --git a/src/main/java/forge/game/ai/ComputerUtil.java b/src/main/java/forge/game/ai/ComputerUtil.java index 6c07062b224..4ef90536bfe 100644 --- a/src/main/java/forge/game/ai/ComputerUtil.java +++ b/src/main/java/forge/game/ai/ComputerUtil.java @@ -712,7 +712,7 @@ public class ComputerUtil { final Player controller = card.getController(); final List l = controller.getCardsIn(ZoneType.Battlefield); for (final Card c : l) { - for (final SpellAbility sa : c.getSpellAbility()) { + for (final SpellAbility sa : c.getSpellAbilities()) { // This try/catch should fix the "computer is thinking" bug try { @@ -778,7 +778,7 @@ public class ComputerUtil { final Player controller = card.getController(); final List l = controller.getCardsIn(ZoneType.Battlefield); for (final Card c : l) { - for (final SpellAbility sa : c.getSpellAbility()) { + for (final SpellAbility sa : c.getSpellAbilities()) { // if SA is from AF_Counter don't add to getPlayable // This try/catch should fix the "computer is thinking" bug try { @@ -1015,7 +1015,7 @@ public class ComputerUtil { all.addAll(ai.getCardsIn(ZoneType.Hand)); for (final Card c : all) { - for (final SpellAbility sa : c.getSpellAbility()) { + for (final SpellAbility sa : c.getSpellAbilities()) { if (sa.getApi() == ApiType.Pump && sa.hasParam("KW") && sa.getParam("KW").contains("Haste")) { return true; } diff --git a/src/main/java/forge/game/phase/CombatUtil.java b/src/main/java/forge/game/phase/CombatUtil.java index c2a773503d2..70c81f3bda0 100644 --- a/src/main/java/forge/game/phase/CombatUtil.java +++ b/src/main/java/forge/game/phase/CombatUtil.java @@ -731,11 +731,11 @@ public class CombatUtil { } } - if (attacker.hasKeyword("CARDNAME can't be blocked by Walls.") && blocker.isWall()) { + if (attacker.hasKeyword("CARDNAME can't be blocked by Walls.") && blocker.isType("Wall")) { return false; } - if (attacker.hasKeyword("CARDNAME can't be blocked except by Walls.") && !blocker.isWall()) { + if (attacker.hasKeyword("CARDNAME can't be blocked except by Walls.") && !blocker.isType("Wall")) { return false; }