[ new MagicWhenComesIntoPlayTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPlayer player) { return new MagicEvent( permanent, this, "Exile all creatures you control. Then put that many 5/5 " + "red Dragon creature tokens with flying onto the battlefield." ); } @Override public void executeEvent(final MagicGame game, final MagicEvent event) { final Collection targets = game.filterPermanents(event.getPlayer(),MagicTargetFilter.TARGET_CREATURE_YOU_CONTROL); for (final MagicPermanent target : targets) { game.doAction(new MagicExileUntilThisLeavesPlayAction( event.getPermanent(), target )); } game.doAction(new MagicPlayTokensAction( event.getPlayer(), TokenCardDefinitions.get("Dragon5"), targets.size() )); } }, new MagicWhenLeavesPlayTrigger() { @Override public MagicEvent executeTrigger(final MagicGame game,final MagicPermanent permanent, final MagicPermanent left) { if (permanent == left && !permanent.getExiledCards().isEmpty()) { final MagicCardList clist = new MagicCardList(permanent.getExiledCards()); return new MagicEvent( permanent, permanent.getController(), this, clist.size() == 1 ? "Sacrifice all Dragons. Return " + clist.get(0) + " to the battlefield." : "Sacrifice all Dragons. Return exiled cards to the battlefield." ); } return MagicEvent.NONE; } @Override public void executeEvent(final MagicGame game, final MagicEvent event) { final Collection targets = game.filterPermanents(event.getPlayer(),MagicTargetFilter.TARGET_DRAGON_YOU_CONTROL); for (final MagicPermanent target : targets) { game.doAction(new MagicSacrificeAction(target)); } final MagicPermanent permanent = event.getPermanent(); game.doAction(new MagicReturnExiledUntilThisLeavesPlayAction( permanent, MagicLocationType.Play, event.getPlayer() )); } } ]