package magic.model.trigger; import magic.model.MagicCard; import magic.model.MagicGame; import magic.model.MagicLocationType; import magic.model.MagicPermanent; import magic.model.action.ShiftCardAction; import magic.model.choice.MagicMayChoice; import magic.model.choice.MagicTargetChoice; import magic.model.event.MagicEvent; import magic.model.target.MagicCMCCardFilter; import magic.model.target.MagicGraveyardTargetPicker; import magic.model.target.MagicTargetFilter; import magic.model.target.MagicTargetFilterFactory; import magic.model.target.MagicTargetHint; import magic.model.target.Operator; public class SoulshiftTrigger extends ThisDiesTrigger { private final int cmc; public SoulshiftTrigger(final int cmc) { this.cmc = cmc; } @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent,final MagicPermanent died) { final MagicTargetFilter<MagicCard> targetFilter = new MagicCMCCardFilter( MagicTargetFilterFactory.SPIRIT_CARD_FROM_GRAVEYARD, Operator.LESS_THAN_OR_EQUAL, cmc ); final MagicTargetChoice targetChoice = new MagicTargetChoice( targetFilter, MagicTargetHint.None, "target Spirit card from your graveyard" ); return new MagicEvent( permanent, new MagicMayChoice(targetChoice), MagicGraveyardTargetPicker.ReturnToHand, this, "PN may$ return target Spirit card$ with " + "converted mana cost " + cmc + " or less " + "from his or her graveyard to his or her hand." ); } @Override public void executeEvent(final MagicGame game, final MagicEvent event) { if (event.isYes()) { event.processTargetCard(game, (final MagicCard card) -> game.doAction(new ShiftCardAction( card, MagicLocationType.Graveyard, MagicLocationType.OwnersHand )) ); } } }