From 90b46f4c0f208bfe7a409b1afa539620e3ebf7b4 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Sun, 28 Jan 2018 12:31:13 +0100 Subject: [PATCH] Card & CardState: add has functions to check for SpellAbility, Trigger and ReplacementEffects --- .../src/main/java/forge/game/card/Card.java | 26 +++++++++++++--- .../main/java/forge/game/card/CardState.java | 31 +++++++++++++++++++ 2 files changed, 53 insertions(+), 4 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 bf01e3cbe5d..efab0d5ce2b 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -847,6 +847,14 @@ public class Card extends GameEntity implements Comparable { currentState.clearTriggers(); } + public final boolean hasTrigger(final Trigger t) { + return currentState.hasTrigger(t); + } + + public final boolean hasTrigger(final int id) { + return currentState.hasTrigger(id); + } + public void updateTriggers(List list, CardState state) { for (KeywordInterface kw : getUnhiddenKeywords(state)) { list.addAll(kw.getTriggers()); @@ -2193,13 +2201,15 @@ public class Card extends GameEntity implements Comparable { public final void addSpellAbility(final SpellAbility a) { a.setHostCard(this); - currentState.addSpellAbility(a); - currentState.getView().updateAbilityText(this, currentState); + if (currentState.addSpellAbility(a)) { + currentState.getView().updateAbilityText(this, currentState); + } } public final void removeSpellAbility(final SpellAbility a) { - currentState.removeSpellAbility(a); - currentState.getView().updateAbilityText(this, currentState); + if (currentState.removeSpellAbility(a)) { + currentState.getView().updateAbilityText(this, currentState); + } } public final FCollectionView getSpellAbilities() { @@ -2212,6 +2222,14 @@ public class Card extends GameEntity implements Comparable { return currentState.getNonManaAbilities(); } + public final boolean hasSpellAbility(final SpellAbility sa) { + return currentState.hasSpellAbility(sa); + } + + public final boolean hasSpellAbility(final int id) { + return currentState.hasSpellAbility(id); + } + public void updateSpellAbilities(List list, CardState state, Boolean mana) { for (KeywordInterface kw : getUnhiddenKeywords(state)) { for (SpellAbility sa : kw.getAbilities()) { 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 e661d81e06a..cab05bf0f54 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -222,6 +222,19 @@ public class CardState extends GameObject { return new FCollection(Iterables.filter(getSpellAbilities(), SpellAbilityPredicates.isIntrinsic())); } + 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()) { + return true; + } + } + return false; + } + public final void setNonManaAbilities(SpellAbility sa) { nonManaAbilities.clear(); if (sa != null) { @@ -279,6 +292,20 @@ public class CardState extends GameObject { card.updateTriggers(result, this); return result; } + + public final boolean hasTrigger(final Trigger t) { + return getTriggers().contains(t); + } + + public final boolean hasTrigger(final int id) { + for (final Trigger t : getTriggers()) { + if (id == t.getId()) { + return true; + } + } + return false; + } + public final void setTriggers(final FCollection triggers0) { triggers = triggers0; } @@ -333,6 +360,10 @@ public class CardState extends GameObject { replacementEffects.clear(); } + public final boolean hasReplacementEffect(final ReplacementEffect re) { + return getReplacementEffects().contains(re); + } + public final Map getSVars() { return sVars; }