@Override public boolean apply(Game game, Ability source) { if (condition.apply(game, source)) { effect.setTargetPointer(this.targetPointer); return effect.apply(game, source); } else if (otherwiseEffect == null) { return true; // nothing to do - no problem } otherwiseEffect.setTargetPointer(this.targetPointer); return otherwiseEffect.apply(game, source); }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Permanent krovikanVampire = game.getPermanent(source.getSourceId()); creaturesAffected = (Set<UUID>) game.getState().getValue(source.getSourceId() + "creatureToGainControl"); if (creaturesAffected != null && controller != null && krovikanVampire != null) { for (UUID creatureId : creaturesAffected) { controller.moveCards(game.getCard(creatureId), Zone.BATTLEFIELD, source, game, false, false, false, null); OneShotEffect effect = new SacrificeTargetEffect(); effect.setText("Sacrifice this if Krovikan Vampire leaves the battlefield or its current controller loses control of it."); effect.setTargetPointer(new FixedTarget(creatureId)); KrovikanVampireDelayedTriggeredAbility dTA = new KrovikanVampireDelayedTriggeredAbility(effect, krovikanVampire.getId()); game.addDelayedTriggeredAbility(dTA, source); } creaturesAffected.clear(); return true; } return false; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Card creatureCard = game.getCard(targetPointer.getFirst(game, source)); if (controller != null && creatureCard != null && game.getState().getZone(creatureCard.getId()) == Zone.GRAVEYARD) { // must be still in the graveyard controller.moveCards(creatureCard, Zone.BATTLEFIELD, source, game, false, false, false, null); OneShotEffect effect = new SacrificeTargetEffect(); effect.setText("Sacrifice this if Seraph leaves the battlefield or its current controller loses control of it."); effect.setTargetPointer(new FixedTarget(creatureCard.getId())); SeraphDelayedTriggeredAbility dTA = new SeraphDelayedTriggeredAbility(effect, source.getSourceId()); game.addDelayedTriggeredAbility(dTA, source); return true; } return false; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(targetPointer.getFirst(game, source)); MageObject mageObject = game.getObject(source.getSourceId()); if (player != null && mageObject != null) { String message = userMessage; if (message == null) { message = getCostText() + " to prevent " + executingEffect.getText(source.getModes().getMode()) + '?'; } message = CardUtil.replaceSourceName(message, mageObject.getLogName()); cost.clearPaid(); if (cost.canPay(source, source.getSourceId(), player.getId(), game) && player.chooseUse(executingEffect.getOutcome(), message, source, game)) { cost.pay(source, game, source.getSourceId(), player.getId(), false, null); } if (!cost.isPaid()) { executingEffect.setTargetPointer(this.targetPointer); return executingEffect.apply(game, source); } return true; } return false; }