diff --git a/Mage.Sets/src/mage/cards/y/YurikoTheTigersShadow.java b/Mage.Sets/src/mage/cards/y/YurikoTheTigersShadow.java
new file mode 100644
index 0000000000..f83bbd6ddf
--- /dev/null
+++ b/Mage.Sets/src/mage/cards/y/YurikoTheTigersShadow.java
@@ -0,0 +1,103 @@
+package mage.cards.y;
+
+import java.util.UUID;
+import mage.MageInt;
+import mage.abilities.Ability;
+import mage.abilities.common.DealsDamageToAPlayerAllTriggeredAbility;
+import mage.abilities.costs.mana.ManaCostsImpl;
+import mage.abilities.effects.OneShotEffect;
+import mage.abilities.effects.common.LoseLifeOpponentsEffect;
+import mage.abilities.keyword.NinjutsuAbility;
+import mage.cards.Card;
+import mage.constants.SubType;
+import mage.constants.SuperType;
+import mage.cards.CardImpl;
+import mage.cards.CardSetInfo;
+import mage.cards.CardsImpl;
+import mage.constants.CardType;
+import mage.constants.Outcome;
+import mage.constants.SetTargetPointer;
+import mage.constants.TargetController;
+import mage.constants.Zone;
+import mage.filter.common.FilterCreaturePermanent;
+import mage.filter.predicate.permanent.ControllerPredicate;
+import mage.game.Game;
+import mage.players.Player;
+
+/**
+ *
+ * @author TheElk801
+ */
+public final class YurikoTheTigersShadow extends CardImpl {
+
+ private static final FilterCreaturePermanent filter
+ = new FilterCreaturePermanent(SubType.NINJA, "a Ninja you control");
+
+ static {
+ filter.add(new ControllerPredicate(TargetController.YOU));
+ }
+
+ public YurikoTheTigersShadow(UUID ownerId, CardSetInfo setInfo) {
+ super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}{B}");
+
+ this.addSuperType(SuperType.LEGENDARY);
+ this.subtype.add(SubType.HUMAN);
+ this.subtype.add(SubType.NINJA);
+ this.power = new MageInt(1);
+ this.toughness = new MageInt(3);
+
+ // Commander ninjutsu {U}{B}
+ this.addAbility(new NinjutsuAbility(new ManaCostsImpl("{U}{B}")));
+
+ // Whenever a Ninja you control deals combat damage to a player, reveal the top card of your library and put that card into your hand. Each opponent loses life equal to that card's converted mana cost.
+ this.addAbility(new DealsDamageToAPlayerAllTriggeredAbility(
+ new YurikoTheTigersShadowEffect(), filter,
+ false, SetTargetPointer.NONE, true
+ ));
+ }
+
+ public YurikoTheTigersShadow(final YurikoTheTigersShadow card) {
+ super(card);
+ }
+
+ @Override
+ public YurikoTheTigersShadow copy() {
+ return new YurikoTheTigersShadow(this);
+ }
+}
+
+class YurikoTheTigersShadowEffect extends OneShotEffect {
+
+ public YurikoTheTigersShadowEffect() {
+ super(Outcome.Benefit);
+ this.staticText = "reveal the top card of your library "
+ + "and put that card into your hand. Each opponent loses life "
+ + "equal to that card's converted mana cost";
+ }
+
+ public YurikoTheTigersShadowEffect(final YurikoTheTigersShadowEffect effect) {
+ super(effect);
+ }
+
+ @Override
+ public YurikoTheTigersShadowEffect copy() {
+ return new YurikoTheTigersShadowEffect(this);
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ Player player = game.getPlayer(source.getControllerId());
+ if (player == null) {
+ return false;
+ }
+ Card card = player.getLibrary().getFromTop(game);
+ if (card == null) {
+ return false;
+ }
+ player.revealCards(source, new CardsImpl(card), game);
+ player.moveCards(card, Zone.HAND, source, game);
+ return new LoseLifeOpponentsEffect(
+ card.getConvertedManaCost()
+ ).apply(game, source);
+ }
+}
diff --git a/Mage.Sets/src/mage/sets/Commander2018.java b/Mage.Sets/src/mage/sets/Commander2018.java
index c9e1253121..0e71fc96a0 100644
--- a/Mage.Sets/src/mage/sets/Commander2018.java
+++ b/Mage.Sets/src/mage/sets/Commander2018.java
@@ -316,6 +316,7 @@ public final class Commander2018 extends ExpansionSet {
cards.add(new SetCardInfo("Yavimaya Elder", 166, Rarity.COMMON, mage.cards.y.YavimayaElder.class));
cards.add(new SetCardInfo("Yavimaya Enchantress", 167, Rarity.COMMON, mage.cards.y.YavimayaEnchantress.class));
cards.add(new SetCardInfo("Yennet, Crypt Sovereign", 51, Rarity.MYTHIC, mage.cards.y.YennetCryptSovereign.class));
+ cards.add(new SetCardInfo("Yuriko, the Tiger's Shadow", 52, Rarity.RARE, mage.cards.y.YurikoTheTigersShadow.class));
cards.add(new SetCardInfo("Zendikar Incarnate", 195, Rarity.UNCOMMON, mage.cards.z.ZendikarIncarnate.class));
}
}
diff --git a/Mage/src/main/java/mage/abilities/keyword/NinjutsuAbility.java b/Mage/src/main/java/mage/abilities/keyword/NinjutsuAbility.java
index 4eb32f5c56..5737f0b50b 100644
--- a/Mage/src/main/java/mage/abilities/keyword/NinjutsuAbility.java
+++ b/Mage/src/main/java/mage/abilities/keyword/NinjutsuAbility.java
@@ -1,4 +1,3 @@
-
package mage.abilities.keyword;
import java.util.UUID;
@@ -16,6 +15,7 @@ import mage.constants.Zone;
import mage.filter.common.FilterControlledCreaturePermanent;
import mage.filter.predicate.permanent.UnblockedPredicate;
import mage.game.Game;
+import mage.game.command.CommandObject;
import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetControlledCreaturePermanent;
@@ -43,6 +43,7 @@ import mage.target.common.TargetControlledPermanent;
*/
public class NinjutsuAbility extends ActivatedAbilityImpl {
+ private final boolean commander;
private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("unblocked attacker you control");
static {
@@ -54,13 +55,19 @@ public class NinjutsuAbility extends ActivatedAbilityImpl {
* @param manaCost ninjutsu mana cost
*/
public NinjutsuAbility(ManaCost manaCost) {
- super(Zone.HAND, new NinjutsuEffect(), manaCost);
- this.addCost(new RevealNinjutsuCardCost());
+ this(manaCost, false);
+ }
+
+ public NinjutsuAbility(ManaCost manaCost, boolean commander) {
+ super(commander ? Zone.ALL : Zone.HAND, new NinjutsuEffect(), manaCost);
+ this.addCost(new RevealNinjutsuCardCost(commander));
this.addCost(new ReturnAttackerToHandTargetCost(new TargetControlledCreaturePermanent(1, 1, filter, true)));
+ this.commander = commander;
}
public NinjutsuAbility(NinjutsuAbility ability) {
super(ability);
+ this.commander = ability.commander;
}
@Override
@@ -70,9 +77,13 @@ public class NinjutsuAbility extends ActivatedAbilityImpl {
@Override
public String getRule() {
- return new StringBuilder("Ninjutsu ").append(getManaCostsToPay().getText()).append(" (")
- .append(getManaCostsToPay().getText())
- .append(" Return an unblocked attacker you control to hand: Put this card onto the battlefield from your hand tapped and attacking.)").toString();
+ return (commander ? "Commander n" : "N") + "injutsu "
+ + getManaCostsToPay().getText() + " ("
+ + getManaCostsToPay().getText()
+ + " Return an unblocked attacker you control to hand: "
+ + "Put this card onto the battlefield from your hand"
+ + (commander ? " or the command zone " : " ")
+ + "tapped and attacking.)";
}
}
@@ -80,7 +91,8 @@ class NinjutsuEffect extends OneShotEffect {
public NinjutsuEffect() {
super(Outcome.PutCreatureInPlay);
- this.staticText = "Put this card onto the battlefield from your hand tapped and attacking";
+ this.staticText = "Put this card onto the battlefield "
+ + "from your hand tapped and attacking";
}
public NinjutsuEffect(final NinjutsuEffect effect) {
@@ -165,12 +177,16 @@ class ReturnAttackerToHandTargetCost extends CostImpl {
class RevealNinjutsuCardCost extends CostImpl {
- public RevealNinjutsuCardCost() {
+ private final boolean commander;
+
+ public RevealNinjutsuCardCost(boolean commander) {
this.text = "reveal ninjutsu card";
+ this.commander = commander;
}
public RevealNinjutsuCardCost(RevealNinjutsuCardCost cost) {
super(cost);
+ this.commander = cost.commander;
}
@Override
@@ -178,6 +194,15 @@ class RevealNinjutsuCardCost extends CostImpl {
Player player = game.getPlayer(controllerId);
Card card = player.getHand().get(ability.getSourceId(), game);
+ if (card == null && commander
+ && player.getCommandersIds().contains(ability.getSourceId())) {
+ for (CommandObject coj : game.getState().getCommand()) {
+ if (coj != null && coj.getId().equals(ability.getSourceId())) {
+ card = game.getCard(ability.getSourceId());
+ }
+ break;
+ }
+ }
if (card != null) {
Cards cards = new CardsImpl(card);
player.revealCards("Ninjutsu", cards, game);