From 1c4640d69b4d555e0b0ac290e8c5035965a27931 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Wed, 7 Apr 2021 22:11:47 +0200 Subject: [PATCH 1/2] Fix NoAbilities failing for basic land types --- forge-game/src/main/java/forge/game/card/Card.java | 9 +++++++++ .../src/main/java/forge/game/card/CardProperty.java | 3 ++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index b5f86b5caf9..b7c6addc2d0 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2731,6 +2731,15 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return false; } + public boolean hasRemoveAll() { + for (final CardTraitChanges ck : changedCardTraits.values()) { + if (ck.isRemoveAll()) { + return true; + } + } + return false; + } + public void updateSpellAbilities(List list, CardState state, Boolean mana) { if (hasRemoveIntrinsic()) { list.clear(); diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 7574e09b340..718a4c0ce7a 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1749,7 +1749,8 @@ public class CardProperty { return false; } } else if (property.equals("NoAbilities")) { - if (!((card.getAbilityText().trim().equals("") || card.isFaceDown()) && (card.getUnhiddenKeywords().isEmpty()))) { + // basic land types have no ability text, so need extra check + if (!((card.getAbilityText().trim().equals("") || card.isFaceDown()) && (!card.isLand() || card.hasRemoveAll()) && card.getUnhiddenKeywords().isEmpty())) { return false; } } else if (property.equals("HasCounters")) { From eb6d168d502658c3e4bcb6d2a68aca46e9ed92fa Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Thu, 8 Apr 2021 20:39:06 +0200 Subject: [PATCH 2/2] Update NoAbilities logic --- .../src/main/java/forge/game/card/Card.java | 22 ++++++++++++++----- .../java/forge/game/card/CardProperty.java | 3 +-- .../main/java/forge/game/card/CardState.java | 15 ++++--------- 3 files changed, 22 insertions(+), 18 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index b7c6addc2d0..6d06b72b6d9 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2731,13 +2731,25 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return false; } - public boolean hasRemoveAll() { - for (final CardTraitChanges ck : changedCardTraits.values()) { - if (ck.isRemoveAll()) { - return true; + public boolean hasNoAbilities() { + if (!getUnhiddenKeywords().isEmpty()) { + return false; + } + if (!getStaticAbilities().isEmpty()) { + return false; + } + if (!getReplacementEffects().isEmpty()) { + return false; + } + if (!getTriggers().isEmpty()) { + return false; + } + for (SpellAbility sa : getSpellAbilities()) { + if (!(sa instanceof SpellPermanent)) { + return false; } } - return false; + return true; } public void updateSpellAbilities(List list, CardState state, Boolean mana) { diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 718a4c0ce7a..fd0cb885a5b 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1749,8 +1749,7 @@ public class CardProperty { return false; } } else if (property.equals("NoAbilities")) { - // basic land types have no ability text, so need extra check - if (!((card.getAbilityText().trim().equals("") || card.isFaceDown()) && (!card.isLand() || card.hasRemoveAll()) && card.getUnhiddenKeywords().isEmpty())) { + if (!card.hasNoAbilities()) { return false; } } else if (property.equals("HasCounters")) { diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index cd6b659ba8f..a6988edfa82 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -198,7 +198,6 @@ public class CardState extends GameObject implements IHasSVars { public final String getBasePowerString() { return (null == basePowerString) ? "" + getBasePower() : basePowerString; } - public final String getBaseToughnessString() { return (null == baseToughnessString) ? "" + getBaseToughness() : baseToughnessString; } @@ -207,7 +206,6 @@ public class CardState extends GameObject implements IHasSVars { public final void setBasePowerString(final String s) { basePowerString = s; } - public final void setBaseToughnessString(final String s) { baseToughnessString = s; } @@ -313,7 +311,9 @@ public class CardState extends GameObject implements IHasSVars { return Iterables.filter(getSpellAbilities(), SpellAbilityPredicates.isIntrinsic()); } - + public final SpellAbility getFirstAbility() { + return Iterables.getFirst(getIntrinsicSpellAbilities(), null); + } public final SpellAbility getFirstSpellAbility() { return Iterables.getFirst(getNonManaAbilities(), null); } @@ -321,7 +321,6 @@ public class CardState extends GameObject implements IHasSVars { public final boolean hasSpellAbility(final SpellAbility sa) { return getSpellAbilities().contains(sa); } - public final boolean hasSpellAbility(final int id) { for (SpellAbility sa : getSpellAbilities()) { if (id == sa.getId()) { @@ -379,10 +378,6 @@ public class CardState extends GameObject implements IHasSVars { } } - public final SpellAbility getFirstAbility() { - return Iterables.getFirst(getIntrinsicSpellAbilities(), null); - } - public final FCollectionView getTriggers() { FCollection result = new FCollection<>(triggers); card.updateTriggers(result, this); @@ -467,7 +462,6 @@ public class CardState extends GameObject implements IHasSVars { public final boolean hasReplacementEffect(final ReplacementEffect re) { return getReplacementEffects().contains(re); } - public final boolean hasReplacementEffect(final int id) { for (final ReplacementEffect r : getReplacementEffects()) { if (id == r.getId()) { @@ -492,9 +486,8 @@ public class CardState extends GameObject implements IHasSVars { public final String getSVar(final String var) { if (sVars.containsKey(var)) { return sVars.get(var); - } else { - return ""; } + return ""; } public final boolean hasSVar(final String var) { if (var == null) {