package magic.model.trigger; import magic.model.MagicCard; import magic.model.MagicGame; import magic.model.MagicPlayer; import magic.model.MagicPermanent; import magic.model.MagicLocationType; import magic.model.choice.MagicMayChoice; import magic.model.event.MagicEvent; import magic.model.action.RemoveTriggerAction; import magic.model.action.CastCardAction; public class ReboundTrigger extends AtUpkeepTrigger { private final MagicCard staleCard; public ReboundTrigger(final MagicCard card) { staleCard = card; } @Override public boolean accept(final MagicPermanent permanent, final MagicPlayer upkeepPlayer) { return staleCard.getOwner().getId() == upkeepPlayer.getId(); } @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent none,final MagicPlayer upkeepPlayer) { game.addDelayedAction(new RemoveTriggerAction(this)); final MagicCard mappedCard = upkeepPlayer.getExile().getCard(staleCard.getId()); return mappedCard.isInExile() ? new MagicEvent( mappedCard, upkeepPlayer, new MagicMayChoice(), this, "You may$ cast SN without paying its mana costs." ): MagicEvent.NONE; } @Override public void executeEvent(final MagicGame game, final MagicEvent event) { if (event.isYes() && event.getCard().isInExile()) { game.doAction(CastCardAction.WithoutManaCost( event.getPlayer(), event.getCard(), MagicLocationType.Exile, MagicLocationType.Graveyard )); } } }