diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 6f59c62ad10..7fc670a10fe 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -2208,107 +2208,7 @@ public class Card extends GameEntity implements Comparable { */ public String getAbilityText() { if (isInstant() || isSorcery()) { - String s = getSpellText(); - StringBuilder sb = new StringBuilder(); - - // Give spellText line breaks for easier reading - sb.append(s.replaceAll("\\\\r\\\\n", "\r\n")); - - // NOTE: - if (sb.toString().contains(" (NOTE: ")) { - sb.insert(sb.indexOf("(NOTE: "), "\r\n"); - } - if (sb.toString().contains("(NOTE: ") && sb.toString().endsWith(".)") && !sb.toString().endsWith("\r\n")) { - sb.append("\r\n"); - } - - // Add SpellAbilities - SpellAbility[] sa = getSpellAbility(); - for (int i = 0; i < sa.length; i++) { - sb.append(sa[i].toString() + "\r\n"); - } - - // Add Keywords - ArrayList kw = getKeyword(); - - // Triggered abilities - for (Trigger trig : getCharacteristics().getTriggers()) { - if (!trig.isSecondary()) { - sb.append(trig.toString() + "\r\n"); - } - } - - // static abilities - for (StaticAbility stAb : getCharacteristics().getStaticAbilities()) { - String stAbD = stAb.toString(); - if (!stAbD.equals("")) { - sb.append(stAbD + "\r\n"); - } - } - - // Ripple + Dredge + Madness + CARDNAME is {color} + Recover. - for (int i = 0; i < kw.size(); i++) { - if ((kw.get(i).startsWith("Ripple") && !sb.toString().contains("Ripple")) - || (kw.get(i).startsWith("Dredge") && !sb.toString().contains("Dredge")) - || (kw.get(i).startsWith("Madness") && !sb.toString().contains("Madness")) - || (kw.get(i).startsWith("CARDNAME is ") && !sb.toString().contains("CARDNAME is ")) - || (kw.get(i).startsWith("Recover") && !sb.toString().contains("Recover"))) { - sb.append(kw.get(i).replace(":", " ")).append("\r\n"); - } - } - - // Changeling + CARDNAME can't be countered. + Cascade + Multikicker - for (int i = 0; i < kw.size(); i++) { - if ((kw.get(i).contains("CARDNAME can't be countered.") && !sb.toString().contains( - "CARDNAME can't be countered.")) - || (kw.get(i).contains("Cascade") && !sb.toString().contains("Cascade")) - || (kw.get(i).contains("Multikicker") && !sb.toString().contains("Multikicker"))) { - sb.append(kw.get(i)).append("\r\n"); - } - } - - // Storm - if (hasKeyword("Storm") && !sb.toString().contains("Storm (When you ")) { - if (sb.toString().endsWith("\r\n\r\n")) { - sb.delete(sb.lastIndexOf("\r\n"), sb.lastIndexOf("\r\n") + 3); - } - sb.append("Storm (When you cast this spell, copy it for each spell cast before it this turn."); - if (sb.toString().contains("Target") || sb.toString().contains("target")) { - sb.append(" You may choose new targets for the copies."); - } - sb.append(")\r\n"); - } - - // Replicate - for (String keyw : kw) { - if (keyw.contains("Replicate") && !sb.toString().contains("you paid its replicate cost.")) { - if (sb.toString().endsWith("\r\n\r\n")) { - sb.delete(sb.lastIndexOf("\r\n"), sb.lastIndexOf("\r\n") + 3); - } - sb.append(keyw); - sb.append(" (When you cast this spell, copy it for each time you paid its replicate cost."); - if (sb.toString().contains("Target") || sb.toString().contains("target")) { - sb.append(" You may choose new targets for the copies."); - } - sb.append(")\r\n"); - } - } - - for (String keyw : kw) { - if (keyw.startsWith("Haunt")) { - if (sb.toString().endsWith("\r\n\r\n")) { - sb.delete(sb.lastIndexOf("\r\n"), sb.lastIndexOf("\r\n") + 3); - } - sb.append("Haunt ("); - if (isCreature()) { - sb.append("When this creature dies, exile it haunting target creature."); - } else { - sb.append("When this spell card is put into a graveyard after resolving, "); - sb.append("exile it haunting target creature."); - } - sb.append(")\r\n"); - } - } + StringBuilder sb = abilityTextInstantSorcery(); if (haunting != null) { sb.append("Haunting: ").append(haunting); @@ -2452,6 +2352,115 @@ public class Card extends GameEntity implements Comparable { return sb.toString().replaceAll("CARDNAME", getName()).trim(); } // getText() + /** + * TODO: Write javadoc for this method. + * @return + */ + private StringBuilder abilityTextInstantSorcery() { + String s = getSpellText(); + StringBuilder sb = new StringBuilder(); + + // Give spellText line breaks for easier reading + sb.append(s.replaceAll("\\\\r\\\\n", "\r\n")); + + // NOTE: + if (sb.toString().contains(" (NOTE: ")) { + sb.insert(sb.indexOf("(NOTE: "), "\r\n"); + } + if (sb.toString().contains("(NOTE: ") && sb.toString().endsWith(".)") && !sb.toString().endsWith("\r\n")) { + sb.append("\r\n"); + } + + // Add SpellAbilities + SpellAbility[] sa = getSpellAbility(); + for (int i = 0; i < sa.length; i++) { + sb.append(sa[i].toString() + "\r\n"); + } + + // Add Keywords + ArrayList kw = getKeyword(); + + // Triggered abilities + for (Trigger trig : getCharacteristics().getTriggers()) { + if (!trig.isSecondary()) { + sb.append(trig.toString() + "\r\n"); + } + } + + // static abilities + for (StaticAbility stAb : getCharacteristics().getStaticAbilities()) { + String stAbD = stAb.toString(); + if (!stAbD.equals("")) { + sb.append(stAbD + "\r\n"); + } + } + + // Ripple + Dredge + Madness + CARDNAME is {color} + Recover. + for (int i = 0; i < kw.size(); i++) { + if ((kw.get(i).startsWith("Ripple") && !sb.toString().contains("Ripple")) + || (kw.get(i).startsWith("Dredge") && !sb.toString().contains("Dredge")) + || (kw.get(i).startsWith("Madness") && !sb.toString().contains("Madness")) + || (kw.get(i).startsWith("CARDNAME is ") && !sb.toString().contains("CARDNAME is ")) + || (kw.get(i).startsWith("Recover") && !sb.toString().contains("Recover"))) { + sb.append(kw.get(i).replace(":", " ")).append("\r\n"); + } + } + + // Changeling + CARDNAME can't be countered. + Cascade + Multikicker + for (int i = 0; i < kw.size(); i++) { + if ((kw.get(i).contains("CARDNAME can't be countered.") && !sb.toString().contains( + "CARDNAME can't be countered.")) + || (kw.get(i).contains("Cascade") && !sb.toString().contains("Cascade")) + || (kw.get(i).contains("Multikicker") && !sb.toString().contains("Multikicker"))) { + sb.append(kw.get(i)).append("\r\n"); + } + } + + // Storm + if (hasKeyword("Storm") && !sb.toString().contains("Storm (When you ")) { + if (sb.toString().endsWith("\r\n\r\n")) { + sb.delete(sb.lastIndexOf("\r\n"), sb.lastIndexOf("\r\n") + 3); + } + sb.append("Storm (When you cast this spell, copy it for each spell cast before it this turn."); + if (sb.toString().contains("Target") || sb.toString().contains("target")) { + sb.append(" You may choose new targets for the copies."); + } + sb.append(")\r\n"); + } + + // Replicate + for (String keyw : kw) { + if (keyw.contains("Replicate") && !sb.toString().contains("you paid its replicate cost.")) { + if (sb.toString().endsWith("\r\n\r\n")) { + sb.delete(sb.lastIndexOf("\r\n"), sb.lastIndexOf("\r\n") + 3); + } + sb.append(keyw); + sb.append(" (When you cast this spell, copy it for each time you paid its replicate cost."); + if (sb.toString().contains("Target") || sb.toString().contains("target")) { + sb.append(" You may choose new targets for the copies."); + } + sb.append(")\r\n"); + } + } + + for (String keyw : kw) { + if (keyw.startsWith("Haunt")) { + if (sb.toString().endsWith("\r\n\r\n")) { + sb.delete(sb.lastIndexOf("\r\n"), sb.lastIndexOf("\r\n") + 3); + } + sb.append("Haunt ("); + if (isCreature()) { + sb.append("When this creature dies, exile it haunting target creature."); + } else { + sb.append("When this spell card is put into a graveyard after resolving, "); + sb.append("exile it haunting target creature."); + } + sb.append(")\r\n"); + } + } + return sb; + } + /** *

* Getter for the field manaAbility. diff --git a/src/main/java/forge/CardList.java b/src/main/java/forge/CardList.java index 96c5134abb4..17a3716d931 100644 --- a/src/main/java/forge/CardList.java +++ b/src/main/java/forge/CardList.java @@ -212,6 +212,7 @@ public class CardList implements Iterable { } /** {@inheritDoc} */ + @Override public final boolean equals(final Object a) { if (a instanceof CardList) { CardList b = (CardList) a; @@ -231,6 +232,11 @@ public class CardList implements Iterable { } } + @Override + public int hashCode() { + return (41 * (41 + list.size() + list.hashCode())); + } + // removes one copy of that card /** *

diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index 07f7be818b1..a2da0f49305 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -2489,4 +2489,10 @@ public abstract class Player extends GameEntity { return false; } } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return (41 * (41 + getName().hashCode())); + } } diff --git a/src/main/java/forge/SetInfo.java b/src/main/java/forge/SetInfo.java index 074b46ba5ea..279a0b2cd14 100644 --- a/src/main/java/forge/SetInfo.java +++ b/src/main/java/forge/SetInfo.java @@ -115,12 +115,17 @@ public class SetInfo { } else { return false; } + } + /** {@inheritDoc} */ + @Override + public int hashCode() { + return (41 * (41 + this.getCode().hashCode())); } /** * Gets the code. - * + * * @return the code */ public String getCode() { @@ -129,8 +134,9 @@ public class SetInfo { /** * Sets the code. - * - * @param code the code to set + * + * @param code + * the code to set */ public void setCode(final String code) { this.code = code; // TODO: Add 0 to parameter's name. @@ -138,7 +144,7 @@ public class SetInfo { /** * Gets the rarity. - * + * * @return the rarity */ public String getRarity() { @@ -147,8 +153,9 @@ public class SetInfo { /** * Sets the rarity. - * - * @param rarity the rarity to set + * + * @param rarity + * the rarity to set */ public void setRarity(final String rarity) { this.rarity = rarity; // TODO: Add 0 to parameter's name. @@ -156,7 +163,7 @@ public class SetInfo { /** * Gets the url. - * + * * @return the url */ public String getUrl() { @@ -165,8 +172,9 @@ public class SetInfo { /** * Sets the url. - * - * @param url the url to set + * + * @param url + * the url to set */ public void setUrl(final String url) { this.url = url; // TODO: Add 0 to parameter's name. @@ -174,7 +182,7 @@ public class SetInfo { /** * Gets the pic count. - * + * * @return the picCount */ public int getPicCount() { @@ -183,8 +191,9 @@ public class SetInfo { /** * Sets the pic count. - * - * @param picCount the picCount to set + * + * @param picCount + * the picCount to set */ public void setPicCount(final int picCount) { this.picCount = picCount; // TODO: Add 0 to parameter's name. diff --git a/src/main/java/forge/card/spellability/AbilityMana.java b/src/main/java/forge/card/spellability/AbilityMana.java index f808f9510af..c17c66592f1 100644 --- a/src/main/java/forge/card/spellability/AbilityMana.java +++ b/src/main/java/forge/card/spellability/AbilityMana.java @@ -359,5 +359,11 @@ public abstract class AbilityMana extends AbilityActivated implements java.io.Se return abm.toUnsuppressedString().equals(this.toUnsuppressedString()); } + /** {@inheritDoc} */ + @Override + public int hashCode() { + return (41 * (41 + this.getType().hashCode())); + } + } // end class Ability_Mana diff --git a/src/main/java/forge/card/spellability/AbilityTriggered.java b/src/main/java/forge/card/spellability/AbilityTriggered.java index d160387f1ed..fc49fa661d8 100644 --- a/src/main/java/forge/card/spellability/AbilityTriggered.java +++ b/src/main/java/forge/card/spellability/AbilityTriggered.java @@ -135,7 +135,7 @@ public class AbilityTriggered extends Ability implements Command { /** {@inheritDoc} */ @Override public final boolean equals(final Object o) { - // TODO triggers affecting other + // TODO triggers affecting other // cards if (!(o instanceof AbilityTriggered)) { return false; @@ -145,6 +145,12 @@ public class AbilityTriggered extends Ability implements Command { && tmp.todo.equals(this.todo) && Arrays.equals(tmp.restrictions, this.restrictions); } + /** {@inheritDoc} */ + @Override + public int hashCode() { + return (41 * (41 + this.getSourceCard().hashCode() + this.trigger.hashCode() + this.todo.hashCode() + this.restrictions.hashCode())); + } + /** *

* isBasic. diff --git a/src/main/java/forge/card/spellability/SpellAbilityList.java b/src/main/java/forge/card/spellability/SpellAbilityList.java index 21c9c2edd5e..728c4324fcb 100644 --- a/src/main/java/forge/card/spellability/SpellAbilityList.java +++ b/src/main/java/forge/card/spellability/SpellAbilityList.java @@ -150,4 +150,10 @@ public class SpellAbilityList { } return this.toString().equals(o.toString()); } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return (41 * (41 + this.toString().hashCode())); + } } diff --git a/src/main/java/forge/card/trigger/Trigger.java b/src/main/java/forge/card/trigger/Trigger.java index 16cbf5f466b..f03341e59e5 100644 --- a/src/main/java/forge/card/trigger/Trigger.java +++ b/src/main/java/forge/card/trigger/Trigger.java @@ -96,8 +96,9 @@ public abstract class Trigger { /** * Sets the map params. - * - * @param mapParams the mapParams to set + * + * @param mapParams + * the mapParams to set */ public final void setMapParams(final HashMap mapParams) { this.mapParams = mapParams; // TODO: Add 0 to parameter's name. @@ -581,6 +582,12 @@ public abstract class Trigger { return this.getId() == ((Trigger) o).getId(); } + /** {@inheritDoc} */ + @Override + public int hashCode() { + return 41 * (41 + this.getId()); + } + /** *

* performTest. @@ -670,7 +677,7 @@ public abstract class Trigger { /** * Checks if is intrinsic. - * + * * @return the isIntrinsic */ public boolean isIntrinsic() { @@ -679,8 +686,9 @@ public abstract class Trigger { /** * Sets the intrinsic. - * - * @param isIntrinsic the isIntrinsic to set + * + * @param isIntrinsic + * the isIntrinsic to set */ public void setIntrinsic(final boolean isIntrinsic) { this.isIntrinsic = isIntrinsic; // TODO: Add 0 to parameter's name. @@ -688,7 +696,7 @@ public abstract class Trigger { /** * Gets the run params. - * + * * @return the runParams */ public Map getRunParams() { @@ -697,8 +705,9 @@ public abstract class Trigger { /** * Sets the run params. - * - * @param runParams the runParams to set + * + * @param runParams + * the runParams to set */ public void setRunParams(final Map runParams) { this.runParams = runParams; // TODO: Add 0 to parameter's name. @@ -706,7 +715,7 @@ public abstract class Trigger { /** * Gets the overriding ability. - * + * * @return the overridingAbility */ public SpellAbility getOverridingAbility() { @@ -715,8 +724,9 @@ public abstract class Trigger { /** * Sets the overriding ability. - * - * @param overridingAbility the overridingAbility to set + * + * @param overridingAbility + * the overridingAbility to set */ public void setOverridingAbility(final SpellAbility overridingAbility) { this.overridingAbility = overridingAbility; // TODO: Add 0 to @@ -725,7 +735,7 @@ public abstract class Trigger { /** * Gets the id. - * + * * @return the id */ public int getId() { @@ -734,8 +744,9 @@ public abstract class Trigger { /** * Sets the id. - * - * @param id the id to set + * + * @param id + * the id to set */ public void setId(final int id) { this.id = id; // TODO: Add 0 to parameter's name. diff --git a/src/main/java/net/slightlymagic/braids/util/lambda/FrozenCall.java b/src/main/java/net/slightlymagic/braids/util/lambda/FrozenCall.java index 663d0ebfb59..eba60de7626 100644 --- a/src/main/java/net/slightlymagic/braids/util/lambda/FrozenCall.java +++ b/src/main/java/net/slightlymagic/braids/util/lambda/FrozenCall.java @@ -51,7 +51,8 @@ public class FrozenCall implements Thunk { */ /** * @return boolean - * @param obj Object + * @param obj + * Object */ @Override public final boolean equals(final Object obj) { @@ -74,4 +75,10 @@ public class FrozenCall implements Thunk { return true; } + + /** {@inheritDoc} */ + @Override + public int hashCode() { + return 41 * (41 + this.args.hashCode()); + } }