diff --git a/.gitattributes b/.gitattributes
index 8461f05d37a..3bf87da9276 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -10480,7 +10480,7 @@ src/main/java/forge/card/spellability/TargetChoices.java svneol=native#text/plai
src/main/java/forge/card/spellability/TargetSelection.java svneol=native#text/plain
src/main/java/forge/card/spellability/package-info.java svneol=native#text/plain
src/main/java/forge/card/staticability/StaticAbility.java svneol=native#text/plain
-src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java -text svneol=native#text/plain
+src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java svneol=native#text/plain
src/main/java/forge/card/staticability/StaticAbilityContinuous.java svneol=native#text/plain
src/main/java/forge/card/staticability/StaticAbilityPreventDamage.java -text svneol=native#text/plain
src/main/java/forge/card/staticability/package-info.java svneol=native#text/plain
diff --git a/res/cardsfolder/p/pithing_needle.txt b/res/cardsfolder/p/pithing_needle.txt
index 2a9f1a8d847..74daa755c2e 100644
--- a/res/cardsfolder/p/pithing_needle.txt
+++ b/res/cardsfolder/p/pithing_needle.txt
@@ -1,7 +1,10 @@
Name:Pithing Needle
ManaCost:1
Types:Artifact
-Text:As Pithing Needle enters the battlefield, name a card.\r\nActivated abilities of sources with the chosen name can't be activated unless they're mana abilities.
+Text:no text
+T:Mode$ ChangesZone | ValidCard$ Card.Self | Origin$ Any | Destination$ Battlefield | Execute$ TrigName | Static$ True | TriggerDescription$ As CARDNAME enters the battlefield, name a card.
+SVar:TrigName:AB$ NameCard | Cost$ 0 | Defined$ You
+S:Mode$ CantBeActivated | ValidCard$ Card.NamedCard | NonMana$ True | Description$ Activated abilities of sources with the chosen name can't be activated unless they're mana abilities.
SVar:RemRandomDeck:True
SVar:Rarity:Rare
SVar:Picture:http://www.wizards.com/global/images/magic/general/pithing_needle.jpg
diff --git a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java
index 668519237a5..f7452b9f5e7 100644
--- a/src/main/java/forge/card/cardfactory/AbstractCardFactory.java
+++ b/src/main/java/forge/card/cardfactory/AbstractCardFactory.java
@@ -1226,7 +1226,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
} // *************** END ************ END **************************
// *************** START *********** START **************************
- else if (cardName.equals("Pithing Needle")) {
+ /*else if (cardName.equals("Pithing Needle")) {
final SpellAbility ability = new AbilityStatic(card, "0") {
@Override
public void resolve() {
@@ -1276,7 +1276,7 @@ public abstract class AbstractCardFactory implements CardFactoryInterface {
card.addComesIntoPlayCommand(intoPlay);
card.addLeavesPlayCommand(leavesPlay);
- } // *************** END ************ END **************************
+ }*/ // *************** END ************ END **************************
// *************** START *********** START **************************
else if (cardName.equals("Phyrexian Processor")) {
diff --git a/src/main/java/forge/card/spellability/Ability.java b/src/main/java/forge/card/spellability/Ability.java
index 275d3727f81..0a2f4743ddd 100644
--- a/src/main/java/forge/card/spellability/Ability.java
+++ b/src/main/java/forge/card/spellability/Ability.java
@@ -18,8 +18,6 @@ import forge.Constant.Zone;
* @version $Id$
*/
public abstract class Ability extends SpellAbility {
- // Slight hack for Pithing Needle
- private final String sourceCardName;
/**
*
@@ -34,7 +32,6 @@ public abstract class Ability extends SpellAbility {
public Ability(final Card sourceCard, final String manaCost) {
super(SpellAbility.getAbility(), sourceCard);
this.setManaCost(manaCost);
- this.sourceCardName = sourceCard.getName();
}
/**
@@ -62,17 +59,6 @@ public abstract class Ability extends SpellAbility {
return false;
}
- CardList pithing = AllZone.getHumanPlayer().getCardsIn(Zone.Battlefield);
- pithing.addAll(AllZone.getComputerPlayer().getCardsIn(Zone.Battlefield));
- pithing = pithing.getName("Pithing Needle");
- pithing = pithing.filter(new CardListFilter() {
- @Override
- public boolean addCard(final Card c) {
- return c.getSVar("PithingTarget").equals(Ability.this.sourceCardName);
- }
- });
-
- return AllZoneUtil.isCardInPlay(this.getSourceCard()) && !this.getSourceCard().isFaceDown()
- && !this.getSourceCard().getName().equals("Spreading Seas") && (pithing.size() == 0);
+ return AllZoneUtil.isCardInPlay(this.getSourceCard()) && !this.getSourceCard().isFaceDown();
}
}
diff --git a/src/main/java/forge/card/spellability/AbilityActivated.java b/src/main/java/forge/card/spellability/AbilityActivated.java
index 69f1c918203..d0fb52a8496 100644
--- a/src/main/java/forge/card/spellability/AbilityActivated.java
+++ b/src/main/java/forge/card/spellability/AbilityActivated.java
@@ -81,7 +81,7 @@ public abstract class AbilityActivated extends SpellAbility implements java.io.S
for (final Card ca : allp) {
final ArrayList staticAbilities = ca.getStaticAbilities();
for (final StaticAbility stAb : staticAbilities) {
- if (stAb.applyAbility("CantBeActivated", c, activator)) {
+ if (stAb.applyAbility("CantBeActivated", c, activator, this)) {
return false;
}
}
@@ -91,20 +91,6 @@ public abstract class AbilityActivated extends SpellAbility implements java.io.S
return false;
}
- CardList pithing = AllZone.getHumanPlayer().getCardsIn(Zone.Battlefield);
- pithing.addAll(AllZone.getComputerPlayer().getCardsIn(Zone.Battlefield));
- pithing = pithing.getName("Pithing Needle");
- pithing = pithing.filter(new CardListFilter() {
- @Override
- public boolean addCard(final Card crd) {
- return crd.getSVar("PithingTarget").equals(c.getName());
- }
- });
-
- if ((pithing.size() != 0) && !(this instanceof AbilityMana)) {
- return false;
- }
-
if (!(this.getRestrictions().canPlay(c, this))) {
return false;
}
diff --git a/src/main/java/forge/card/staticability/StaticAbility.java b/src/main/java/forge/card/staticability/StaticAbility.java
index be18094295d..d7253626840 100644
--- a/src/main/java/forge/card/staticability/StaticAbility.java
+++ b/src/main/java/forge/card/staticability/StaticAbility.java
@@ -10,6 +10,7 @@ import forge.Constant.Zone;
import forge.GameEntity;
import forge.Player;
import forge.card.abilityfactory.AbilityFactory;
+import forge.card.spellability.SpellAbility;
/**
* The Class StaticAbility.
@@ -282,8 +283,35 @@ public class StaticAbility {
return StaticAbilityCantBeCast.applyCantBeCastAbility(this, card, activator);
}
+ return false;
+ }
+
+ /**
+ * Apply ability.
+ *
+ * @param mode
+ * the mode
+ * @param card
+ * the card
+ * @param activator
+ * the activator
+ * @param sa
+ * the ability
+ * @return true, if successful
+ */
+ public final boolean applyAbility(final String mode, final Card card, final Player activator, SpellAbility sa) {
+
+ // don't apply the ability if it hasn't got the right mode
+ if (!this.mapParams.get("Mode").equals(mode)) {
+ return false;
+ }
+
+ if (this.isSuppressed() || !this.checkConditions()) {
+ return false;
+ }
+
if (mode.equals("CantBeActivated")) {
- return StaticAbilityCantBeCast.applyCantBeActivatedAbility(this, card, activator);
+ return StaticAbilityCantBeCast.applyCantBeActivatedAbility(this, card, activator, sa);
}
return false;
diff --git a/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java b/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java
index 4fd7c04fc2b..70c9083f78c 100644
--- a/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java
+++ b/src/main/java/forge/card/staticability/StaticAbilityCantBeCast.java
@@ -1,74 +1,81 @@
-package forge.card.staticability;
-
-import java.util.HashMap;
-
-import forge.Card;
-import forge.Phase;
-import forge.Player;
-
-/**
- * The Class StaticAbility_CantBeCast.
- */
-public class StaticAbilityCantBeCast {
-
- /**
- * TODO Write javadoc for this method.
- *
- * @param stAb
- * a StaticAbility
- * @param card
- * the card
- * @param activator
- * the activator
- * @return true, if successful
- */
- public static boolean applyCantBeCastAbility(final StaticAbility stAb, final Card card, final Player activator) {
- final HashMap params = stAb.getMapParams();
- final Card hostCard = stAb.getHostCard();
-
- if (params.containsKey("ValidCard")
- && !card.isValid(params.get("ValidCard").split(","), hostCard.getController(), hostCard)) {
- return false;
- }
-
- if (params.containsKey("Caster") && (activator != null)
- && !activator.isValid(params.get("Caster"), hostCard.getController(), hostCard)) {
- return false;
- }
-
- if (params.containsKey("OnlySorcerySpeed") && (activator != null) && Phase.canCastSorcery(activator)) {
- return false;
- }
-
- return true;
- }
-
- /**
- * TODO Write javadoc for this method.
- *
- * @param stAb
- * a StaticAbility
- * @param card
- * the card
- * @param activator
- * the activator
- * @return true, if successful
- */
- public static boolean applyCantBeActivatedAbility(final StaticAbility stAb, final Card card, final Player activator) {
- final HashMap params = stAb.getMapParams();
- final Card hostCard = stAb.getHostCard();
-
- if (params.containsKey("ValidCard")
- && !card.isValid(params.get("ValidCard").split(","), hostCard.getController(), hostCard)) {
- return false;
- }
-
- if (params.containsKey("Activator") && (activator != null)
- && !activator.isValid(params.get("Activator"), hostCard.getController(), hostCard)) {
- return false;
- }
-
- return true;
- }
-
-}
+package forge.card.staticability;
+
+import java.util.HashMap;
+
+import forge.Card;
+import forge.Phase;
+import forge.Player;
+import forge.card.spellability.AbilityMana;
+import forge.card.spellability.SpellAbility;
+
+/**
+ * The Class StaticAbility_CantBeCast.
+ */
+public class StaticAbilityCantBeCast {
+
+ /**
+ * TODO Write javadoc for this method.
+ *
+ * @param stAb
+ * a StaticAbility
+ * @param card
+ * the card
+ * @param activator
+ * the activator
+ * @return true, if successful
+ */
+ public static boolean applyCantBeCastAbility(final StaticAbility stAb, final Card card, final Player activator) {
+ final HashMap params = stAb.getMapParams();
+ final Card hostCard = stAb.getHostCard();
+
+ if (params.containsKey("ValidCard")
+ && !card.isValid(params.get("ValidCard").split(","), hostCard.getController(), hostCard)) {
+ return false;
+ }
+
+ if (params.containsKey("Caster") && (activator != null)
+ && !activator.isValid(params.get("Caster"), hostCard.getController(), hostCard)) {
+ return false;
+ }
+
+ if (params.containsKey("OnlySorcerySpeed") && (activator != null) && Phase.canCastSorcery(activator)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * TODO Write javadoc for this method.
+ *
+ * @param stAb
+ * a StaticAbility
+ * @param card
+ * the card
+ * @param activator
+ * the activator
+ * @return true, if successful
+ */
+ public static boolean applyCantBeActivatedAbility(final StaticAbility stAb, final Card card,
+ final Player activator, SpellAbility sa) {
+ final HashMap params = stAb.getMapParams();
+ final Card hostCard = stAb.getHostCard();
+
+ if (params.containsKey("ValidCard")
+ && !card.isValid(params.get("ValidCard").split(","), hostCard.getController(), hostCard)) {
+ return false;
+ }
+
+ if (params.containsKey("Activator") && (activator != null)
+ && !activator.isValid(params.get("Activator"), hostCard.getController(), hostCard)) {
+ return false;
+ }
+
+ if (params.containsKey("NonMana") && sa instanceof AbilityMana) {
+ return false;
+ }
+
+ return true;
+ }
+
+}