@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) { 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) { if (!source.getTargets().isEmpty()) { Target multiTarget = source.getTargets().get(0); for (UUID target : multiTarget.getTargets()) { Permanent permanent = game.getPermanent(target); if (permanent != null) { permanent.addCounters(counterType.createInstance(multiTarget.getTargetAmount(target)), source, game); } } if (removeAtEndOfTurn) { DelayedTriggeredAbility ability = new AtTheBeginOfNextCleanupDelayedTriggeredAbility( new RemoveCountersAtEndOfTurn(counterType)); ability.getTargets().addAll(source.getTargets()); game.addDelayedTriggeredAbility(ability, source); } return true; } return false; }