diff --git a/Mage.Sets/src/mage/cards/p/PsychicPickpocket.java b/Mage.Sets/src/mage/cards/p/PsychicPickpocket.java
new file mode 100644
index 00000000000..e51d634e2fb
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/p/PsychicPickpocket.java
@@ -0,0 +1,43 @@
+package mage.cards.p;
+
+import mage.MageInt;
+import mage.abilities.common.EntersBattlefieldTriggeredAbility;
+import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
+import mage.abilities.effects.common.ReturnToHandTargetEffect;
+import mage.abilities.effects.keyword.ConniveSourceEffect;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.constants.CardType;
+import mage.constants.SubType;
+import mage.target.common.TargetNonlandPermanent;
+
+import java.util.UUID;
+
+/**
+ * @author TheElk801
+ */
+public final class PsychicPickpocket extends CardImpl {
+
+ public PsychicPickpocket(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{4}{U}");
+
+ this.subtype.add(SubType.CEPHALID);
+ this.subtype.add(SubType.ROGUE);
+ this.power = new MageInt(3);
+ this.toughness = new MageInt(2);
+
+ // When Psychic Pickpocket enters the battlefield, it connives. When it connives this way, return up to one target nonland permanent to its owner's hand.
+ ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility(new ReturnToHandTargetEffect(), false);
+ ability.addTarget(new TargetNonlandPermanent(0, 1));
+ this.addAbility(new EntersBattlefieldTriggeredAbility(new ConniveSourceEffect(ability)));
+ }
+
+ private PsychicPickpocket(final PsychicPickpocket card) {
+ super(card);
+ }
+
+ @Override
+ public PsychicPickpocket copy() {
+ return new PsychicPickpocket(this);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java b/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java
index 6072c78224c..9631a76a48e 100644
--- a/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java
+++ b/Mage.Sets/src/mage/sets/StreetsOfNewCapenna.java
@@ -72,6 +72,7 @@ public final class StreetsOfNewCapenna extends ExpansionSet {
cards.add(new SetCardInfo("Obscura Charm", 208, Rarity.UNCOMMON, mage.cards.o.ObscuraCharm.class));
cards.add(new SetCardInfo("Plains", 262, Rarity.LAND, mage.cards.basiclands.Plains.class, NON_FULL_USE_VARIOUS));
cards.add(new SetCardInfo("Professional Face-Breaker", 116, Rarity.RARE, mage.cards.p.ProfessionalFaceBreaker.class));
+ cards.add(new SetCardInfo("Psychic Pickpocket", 54, Rarity.UNCOMMON, mage.cards.p.PsychicPickpocket.class));
cards.add(new SetCardInfo("Racers' Ring", 253, Rarity.COMMON, mage.cards.r.RacersRing.class));
cards.add(new SetCardInfo("Raffine's Informant", 26, Rarity.COMMON, mage.cards.r.RaffinesInformant.class));
cards.add(new SetCardInfo("Raffine's Tower", 254, Rarity.RARE, mage.cards.r.RaffinesTower.class));
diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/ConniveSourceEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/ConniveSourceEffect.java
index 5c3ac657901..daf16396be9 100644
--- a/Mage/src/main/java/mage/abilities/effects/keyword/ConniveSourceEffect.java
+++ b/Mage/src/main/java/mage/abilities/effects/keyword/ConniveSourceEffect.java
@@ -1,6 +1,8 @@
package mage.abilities.effects.keyword;
import mage.abilities.Ability;
+import mage.abilities.Mode;
+import mage.abilities.common.delayed.ReflexiveTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.counters.CounterType;
@@ -8,20 +10,27 @@ import mage.filter.StaticFilters;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
+import mage.util.CardUtil;
/**
* @author TheElk801
*/
public class ConniveSourceEffect extends OneShotEffect {
+ private final ReflexiveTriggeredAbility ability;
+
public ConniveSourceEffect() {
+ this((ReflexiveTriggeredAbility) null);
+ }
+
+ public ConniveSourceEffect(ReflexiveTriggeredAbility ability) {
super(Outcome.Benefit);
- staticText = "{this} connives. (Draw a card, then discard a card. " +
- "If you discarded a nonland card, put a +1/+1 counter on this creature.)";
+ this.ability = ability;
}
private ConniveSourceEffect(final ConniveSourceEffect effect) {
super(effect);
+ this.ability = effect.ability;
}
@Override
@@ -32,10 +41,13 @@ public class ConniveSourceEffect extends OneShotEffect {
@Override
public boolean apply(Game game, Ability source) {
Permanent permanent = source.getSourcePermanentIfItStillExists(game);
- if (permanent == null) {
- return false;
+ if (permanent != null) {
+ connive(permanent, 1, source, game);
}
- return permanent != null && connive(permanent, 1, source, game);
+ if (ability != null) {
+ game.fireReflexiveTriggeredAbility(ability, source);
+ }
+ return permanent != null || ability != null;
}
public static boolean connive(Permanent permanent, int amount, Ability source, Game game) {
@@ -55,4 +67,19 @@ public class ConniveSourceEffect extends OneShotEffect {
}
return true;
}
+
+ @Override
+ public String getText(Mode mode) {
+ if (staticText != null && !staticText.isEmpty()) {
+ return staticText;
+ }
+ if (ability == null) {
+ return "{this} connives. (Draw a card, then discard a card. " +
+ "If you discarded a nonland card, put a +1/+1 counter on this creature.)";
+ }
+ return "{this} connives. When it connives this way, " +
+ CardUtil.getTextWithFirstCharLowerCase(ability.getRule()) +
+ " (To have a creature connive, draw a card, then discard a card. " +
+ "If you discarded a nonland card, put a +1/+1 counter on that creature.)";
+ }
}
diff --git a/Mage/src/main/java/mage/target/common/TargetNonlandPermanent.java b/Mage/src/main/java/mage/target/common/TargetNonlandPermanent.java
index c60585c1252..fa1143077da 100644
--- a/Mage/src/main/java/mage/target/common/TargetNonlandPermanent.java
+++ b/Mage/src/main/java/mage/target/common/TargetNonlandPermanent.java
@@ -1,18 +1,16 @@
-
-
package mage.target.common;
+import mage.filter.StaticFilters;
import mage.filter.common.FilterNonlandPermanent;
import mage.target.TargetPermanent;
/**
- *
* @author BetaSteward_at_googlemail.com
*/
public class TargetNonlandPermanent extends TargetPermanent {
public TargetNonlandPermanent() {
- this(1, 1, false);
+ this(1);
}
public TargetNonlandPermanent(FilterNonlandPermanent filter) {
@@ -20,11 +18,15 @@ public class TargetNonlandPermanent extends TargetPermanent {
}
public TargetNonlandPermanent(int numTargets) {
- this(numTargets, numTargets, new FilterNonlandPermanent(), false);
+ this(numTargets, numTargets);
+ }
+
+ public TargetNonlandPermanent(int minNumTargets, int maxNumTargets) {
+ this(minNumTargets, maxNumTargets, false);
}
public TargetNonlandPermanent(int minNumTargets, int maxNumTargets, boolean notTarget) {
- this(minNumTargets, maxNumTargets, new FilterNonlandPermanent(), notTarget);
+ this(minNumTargets, maxNumTargets, StaticFilters.FILTER_PERMANENT_NON_LAND, notTarget);
}
public TargetNonlandPermanent(int minNumTargets, int maxNumTargets, FilterNonlandPermanent filter, boolean notTarget) {