public CreateDelayedTriggeredAbilityEffect(DelayedTriggeredAbility ability, boolean copyTargets, boolean initAbility) { super(ability.getEffects().isEmpty() ? Outcome.Detriment : ability.getEffects().get(0).getOutcome()); this.ability = ability; this.copyTargets = copyTargets; this.initAbility = initAbility; }
public void init(Game game) { for (Effect effect : this.getEffects()) { effect.getTargetPointer().init(game, this); } }
public RescueFromTheUnderworldCreateDelayedTriggeredAbilityEffect(DelayedTriggeredAbility ability) { super(ability.getEffects().get(0).getOutcome()); this.ability = ability; }
@Override public boolean apply(Game game, Ability source) { Permanent controlledCreature = game.getPermanent(source.getFirstTarget()); if (controlledCreature != null) { DelayedTriggeredAbility delayedAbility = new MeriekeRiBeritDelayedTriggeredAbility(); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(controlledCreature, game)); game.addDelayedTriggeredAbility(delayedAbility, source); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Permanent controlledCreature = game.getPermanent(source.getFirstTarget()); if (controlledCreature != null) { DelayedTriggeredAbility delayedAbility = new CoffinQueenDelayedTriggeredAbility(); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(controlledCreature, game)); game.addDelayedTriggeredAbility(delayedAbility, source); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { DelayedTriggeredAbility delayedAbility = ability.copy(); if (this.copyTargets) { if (source.getTargets().isEmpty()) { for (Effect effect : delayedAbility.getEffects()) { effect.setTargetPointer(targetPointer); } } else { delayedAbility.getTargets().addAll(source.getTargets()); for (Effect effect : delayedAbility.getEffects()) { effect.getTargetPointer().init(game, source); } } } if (initAbility) { delayedAbility.init(game); } game.addDelayedTriggeredAbility(delayedAbility, source); return true; }
@Override public boolean apply(Game game, Ability source) { Card card = game.getCard(getTargetPointer().getFirst(game, source)); if (card != null) { Effect effect = new ReturnToBattlefieldUnderYourControlTargetEffect(); effect.setText("return that card to the battlefield under your control at the beginning of the next end step"); DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.getEffects().get(0).setTargetPointer(getTargetPointer()); game.addDelayedTriggeredAbility(delayedAbility, source); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Card card = game.getCard(this.getTargetPointer().getFirst(game, source)); if (card != null) { Effect effect = new ShireiShizosCaretakerReturnEffect(shireiId); effect.setText("return that card to the battlefield if {this} is still on the battlefield"); DelayedTriggeredAbility delayedAbility = new AtTheBeginOfNextEndStepDelayedTriggeredAbility(effect); delayedAbility.getEffects().get(0).setTargetPointer(new FixedTarget(card.getId(), card.getZoneChangeCounter(game))); game.addDelayedTriggeredAbility(delayedAbility, source); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { DelayedTriggeredAbility delayedAbility = ability.copy(); delayedAbility.getTargets().addAll(source.getTargets()); for (Effect effect : delayedAbility.getEffects()) { effect.getTargetPointer().init(game, source); } // add the sacrificed creature as target for (Cost cost : source.getCosts()) { if (cost instanceof SacrificeTargetCost) { SacrificeTargetCost sacCost = (SacrificeTargetCost) cost; TargetCardInGraveyard target = new TargetCardInGraveyard(); for (Permanent permanent : sacCost.getPermanents()) { target.add(permanent.getId(), game); delayedAbility.getTargets().add(target); } } } game.addDelayedTriggeredAbility(delayedAbility, source); return true; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Permanent oyster = game.getPermanent(source.getSourceId()); Permanent tappedCreature = game.getPermanent(source.getFirstTarget()); if (oyster != null && tappedCreature != null) { Effect addCountersEffect = new AddCountersTargetEffect(CounterType.M1M1.createInstance(1)); addCountersEffect.setTargetPointer(getTargetPointer().getFixedTarget(game, source)); DelayedTriggeredAbility drawStepAbility = new AtTheBeginOfYourNextDrawStepDelayedTriggeredAbility(addCountersEffect, Duration.Custom, false); drawStepAbility.setControllerId(source.getControllerId()); UUID drawStepAbilityUUID = game.addDelayedTriggeredAbility(drawStepAbility, source); DelayedTriggeredAbility leaveUntapDelayedTriggeredAbility = new GiantOysterLeaveUntapDelayedTriggeredAbility(drawStepAbilityUUID); leaveUntapDelayedTriggeredAbility.getEffects().get(0).setTargetPointer(new FixedTarget(tappedCreature, game)); game.addDelayedTriggeredAbility(leaveUntapDelayedTriggeredAbility, source); return true; } } return false; } }